diff --git a/composer.json b/composer.json
index 118bd6a98aa48b1dc0de48b69f5e174075a58d02..117dbb812340d4946a64fbbd30bf86d7cdfac5e5 100644
--- a/composer.json
+++ b/composer.json
@@ -19,7 +19,7 @@
     "twig/twig": "1.15.*",
     "doctrine/common": "dev-master#a45d110f71c323e29f41eb0696fa230e3fa1b1b5",
     "doctrine/annotations": "1.2.*",
-    "guzzlehttp/guzzle": "4.1.*",
+    "guzzlehttp/guzzle": "~5.0",
     "symfony-cmf/routing": "1.2.*",
     "easyrdf/easyrdf": "0.8.*",
     "phpunit/phpunit": "4.1.*",
diff --git a/composer.lock b/composer.lock
index b762494ce52fc1e8745b8933de5166d2179980bb..c61f7902030d62d55fd46f30a44f7d85ecbed307 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
         "Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
         "This file is @generated automatically"
     ],
-    "hash": "f51bcf6e79129718cf410ac81b6449f1",
+    "hash": "838f4566f4f537d5f71fa46b66f263b0",
     "packages": [
         {
             "name": "doctrine/annotations",
@@ -568,21 +568,20 @@
         },
         {
             "name": "guzzlehttp/guzzle",
-            "version": "4.1.8",
+            "version": "5.0.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/guzzle/guzzle.git",
-                "reference": "e196b8f44f9492a11261ea8f7b9724613a198daf"
+                "reference": "28b51e11237f25cdb0efaea8e45af26007831aa9"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/guzzle/guzzle/zipball/e196b8f44f9492a11261ea8f7b9724613a198daf",
-                "reference": "e196b8f44f9492a11261ea8f7b9724613a198daf",
+                "url": "https://api.github.com/repos/guzzle/guzzle/zipball/28b51e11237f25cdb0efaea8e45af26007831aa9",
+                "reference": "28b51e11237f25cdb0efaea8e45af26007831aa9",
                 "shasum": ""
             },
             "require": {
-                "ext-json": "*",
-                "guzzlehttp/streams": "~1.4",
+                "guzzlehttp/ringphp": "~1.0",
                 "php": ">=5.4.0"
             },
             "require-dev": {
@@ -590,22 +589,16 @@
                 "phpunit/phpunit": "~4.0",
                 "psr/log": "~1.0"
             },
-            "suggest": {
-                "ext-curl": "Guzzle will use specific adapters if cURL is present"
-            },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "4.1-dev"
+                    "dev-ring": "5.0-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
                     "GuzzleHttp\\": "src/"
-                },
-                "files": [
-                    "src/functions.php"
-                ]
+                }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
@@ -629,20 +622,70 @@
                 "rest",
                 "web service"
             ],
-            "time": "2014-08-14 20:29:51"
+            "time": "2014-10-13 03:05:51"
+        },
+        {
+            "name": "guzzlehttp/ringphp",
+            "version": "1.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/guzzle/RingPHP.git",
+                "reference": "9e44b565d726d9614cd970319e6eea70ee15bff3"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/guzzle/RingPHP/zipball/9e44b565d726d9614cd970319e6eea70ee15bff3",
+                "reference": "9e44b565d726d9614cd970319e6eea70ee15bff3",
+                "shasum": ""
+            },
+            "require": {
+                "guzzlehttp/streams": "~3.0",
+                "php": ">=5.4.0",
+                "react/promise": "~2.0"
+            },
+            "require-dev": {
+                "ext-curl": "*",
+                "phpunit/phpunit": "~4.0"
+            },
+            "suggest": {
+                "ext-curl": "Guzzle will use specific adapters if cURL is present"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "GuzzleHttp\\Ring\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Michael Dowling",
+                    "email": "mtdowling@gmail.com",
+                    "homepage": "https://github.com/mtdowling"
+                }
+            ],
+            "time": "2014-10-13 00:59:38"
         },
         {
             "name": "guzzlehttp/streams",
-            "version": "1.5.1",
+            "version": "3.0.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/guzzle/streams.git",
-                "reference": "fb0d1ee29987c2bdc59867bffaade6fc88c2675f"
+                "reference": "47aaa48e27dae43d39fc1cea0ccf0d84ac1a2ba5"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/guzzle/streams/zipball/fb0d1ee29987c2bdc59867bffaade6fc88c2675f",
-                "reference": "fb0d1ee29987c2bdc59867bffaade6fc88c2675f",
+                "url": "https://api.github.com/repos/guzzle/streams/zipball/47aaa48e27dae43d39fc1cea0ccf0d84ac1a2ba5",
+                "reference": "47aaa48e27dae43d39fc1cea0ccf0d84ac1a2ba5",
                 "shasum": ""
             },
             "require": {
@@ -654,16 +697,13 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.5-dev"
+                    "dev-master": "3.0-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
                     "GuzzleHttp\\Stream\\": "src/"
-                },
-                "files": [
-                    "src/functions.php"
-                ]
+                }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
@@ -676,13 +716,13 @@
                     "homepage": "https://github.com/mtdowling"
                 }
             ],
-            "description": "Provides a simple abstraction over streams of data (Guzzle 4+)",
+            "description": "Provides a simple abstraction over streams of data",
             "homepage": "http://guzzlephp.org/",
             "keywords": [
                 "Guzzle",
                 "stream"
             ],
-            "time": "2014-08-10 23:57:01"
+            "time": "2014-10-12 19:18:40"
         },
         {
             "name": "mikey179/vfsStream",
@@ -1136,6 +1176,50 @@
             ],
             "time": "2012-12-21 11:40:51"
         },
+        {
+            "name": "react/promise",
+            "version": "v2.1.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/reactphp/promise.git",
+                "reference": "937b04f1b0ee8f6d180e75a0830aac778ca4bcd6"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/reactphp/promise/zipball/937b04f1b0ee8f6d180e75a0830aac778ca4bcd6",
+                "reference": "937b04f1b0ee8f6d180e75a0830aac778ca4bcd6",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.4.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.0-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "React\\Promise\\": "src/"
+                },
+                "files": [
+                    "src/functions.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Jan Sorgalla",
+                    "email": "jsorgalla@googlemail.com"
+                }
+            ],
+            "description": "A lightweight implementation of CommonJS Promises/A for PHP",
+            "time": "2014-10-15 20:05:57"
+        },
         {
             "name": "sdboyer/gliph",
             "version": "0.1.8",
diff --git a/core/modules/update/src/UpdateFetcher.php b/core/modules/update/src/UpdateFetcher.php
index 14bdb29336ec826ff9126f75fc8a40c13e67b2ff..118d3a96630840e407dd9414e5276d8e67c348f9 100644
--- a/core/modules/update/src/UpdateFetcher.php
+++ b/core/modules/update/src/UpdateFetcher.php
@@ -8,6 +8,7 @@
 namespace Drupal\update;
 
 use Drupal\Core\Config\ConfigFactoryInterface;
+use Drupal\Core\DependencyInjection\DependencySerializationTrait;
 use GuzzleHttp\ClientInterface;
 use GuzzleHttp\Exception\RequestException;
 
@@ -16,6 +17,8 @@
  */
 class UpdateFetcher implements UpdateFetcherInterface {
 
+  use DependencySerializationTrait;
+
   /**
    * URL to check for updates, if a given project doesn't define its own.
    */
@@ -63,9 +66,9 @@ public function fetchProjectData(array $project, $site_key = '') {
     $url = $this->buildFetchUrl($project, $site_key);
     $data = '';
     try {
-      $data = $this->httpClient
+      $data = (string) $this->httpClient
         ->get($url, array('headers' => array('Accept' => 'text/xml')))
-        ->getBody(TRUE);
+        ->getBody();
     }
     catch (RequestException $exception) {
       watchdog_exception('update', $exception);
diff --git a/core/vendor/composer/autoload_files.php b/core/vendor/composer/autoload_files.php
index cef8a46b8c5300dacc8012faa77407e039e3c343..de3bf98e84019ddb6e61333503534cabb1cfb3e8 100644
--- a/core/vendor/composer/autoload_files.php
+++ b/core/vendor/composer/autoload_files.php
@@ -6,7 +6,6 @@
 $baseDir = dirname(dirname($vendorDir));
 
 return array(
-    $vendorDir . '/guzzlehttp/streams/src/functions.php',
-    $vendorDir . '/guzzlehttp/guzzle/src/functions.php',
+    $vendorDir . '/react/promise/src/functions.php',
     $baseDir . '/core/lib/Drupal.php',
 );
diff --git a/core/vendor/composer/autoload_psr4.php b/core/vendor/composer/autoload_psr4.php
index f8323179ef373669fd4275459eeb08cd84725d20..c26aa268de598286379805d854efabf58fdcac97 100644
--- a/core/vendor/composer/autoload_psr4.php
+++ b/core/vendor/composer/autoload_psr4.php
@@ -6,7 +6,9 @@
 $baseDir = dirname(dirname($vendorDir));
 
 return array(
+    'React\\Promise\\' => array($vendorDir . '/react/promise/src'),
     'GuzzleHttp\\Stream\\' => array($vendorDir . '/guzzlehttp/streams/src'),
+    'GuzzleHttp\\Ring\\' => array($vendorDir . '/guzzlehttp/ringphp/src'),
     'GuzzleHttp\\' => array($vendorDir . '/guzzlehttp/guzzle/src'),
     'Drupal\\Driver\\' => array($baseDir . '/drivers/lib/Drupal/Driver'),
     'Drupal\\Core\\' => array($baseDir . '/core/lib/Drupal/Core'),
diff --git a/core/vendor/composer/installed.json b/core/vendor/composer/installed.json
index 8dec5aa60e64583089e16f8cce24cd90186af755..b227477011252dc1975495fbf7a3bf41d9ac6680 100644
--- a/core/vendor/composer/installed.json
+++ b/core/vendor/composer/installed.json
@@ -335,61 +335,6 @@
         "description": "Library that helps with managing the version number of Git-hosted PHP projects",
         "homepage": "https://github.com/sebastianbergmann/version"
     },
-    {
-        "name": "guzzlehttp/streams",
-        "version": "1.5.1",
-        "version_normalized": "1.5.1.0",
-        "source": {
-            "type": "git",
-            "url": "https://github.com/guzzle/streams.git",
-            "reference": "fb0d1ee29987c2bdc59867bffaade6fc88c2675f"
-        },
-        "dist": {
-            "type": "zip",
-            "url": "https://api.github.com/repos/guzzle/streams/zipball/fb0d1ee29987c2bdc59867bffaade6fc88c2675f",
-            "reference": "fb0d1ee29987c2bdc59867bffaade6fc88c2675f",
-            "shasum": ""
-        },
-        "require": {
-            "php": ">=5.4.0"
-        },
-        "require-dev": {
-            "phpunit/phpunit": "~4.0"
-        },
-        "time": "2014-08-10 23:57:01",
-        "type": "library",
-        "extra": {
-            "branch-alias": {
-                "dev-master": "1.5-dev"
-            }
-        },
-        "installation-source": "dist",
-        "autoload": {
-            "psr-4": {
-                "GuzzleHttp\\Stream\\": "src/"
-            },
-            "files": [
-                "src/functions.php"
-            ]
-        },
-        "notification-url": "https://packagist.org/downloads/",
-        "license": [
-            "MIT"
-        ],
-        "authors": [
-            {
-                "name": "Michael Dowling",
-                "email": "mtdowling@gmail.com",
-                "homepage": "https://github.com/mtdowling"
-            }
-        ],
-        "description": "Provides a simple abstraction over streams of data (Guzzle 4+)",
-        "homepage": "http://guzzlephp.org/",
-        "keywords": [
-            "Guzzle",
-            "stream"
-        ]
-    },
     {
         "name": "symfony-cmf/routing",
         "version": "1.2.0",
@@ -1488,73 +1433,6 @@
             "parser"
         ]
     },
-    {
-        "name": "guzzlehttp/guzzle",
-        "version": "4.1.8",
-        "version_normalized": "4.1.8.0",
-        "source": {
-            "type": "git",
-            "url": "https://github.com/guzzle/guzzle.git",
-            "reference": "e196b8f44f9492a11261ea8f7b9724613a198daf"
-        },
-        "dist": {
-            "type": "zip",
-            "url": "https://api.github.com/repos/guzzle/guzzle/zipball/e196b8f44f9492a11261ea8f7b9724613a198daf",
-            "reference": "e196b8f44f9492a11261ea8f7b9724613a198daf",
-            "shasum": ""
-        },
-        "require": {
-            "ext-json": "*",
-            "guzzlehttp/streams": "~1.4",
-            "php": ">=5.4.0"
-        },
-        "require-dev": {
-            "ext-curl": "*",
-            "phpunit/phpunit": "~4.0",
-            "psr/log": "~1.0"
-        },
-        "suggest": {
-            "ext-curl": "Guzzle will use specific adapters if cURL is present"
-        },
-        "time": "2014-08-14 20:29:51",
-        "type": "library",
-        "extra": {
-            "branch-alias": {
-                "dev-master": "4.1-dev"
-            }
-        },
-        "installation-source": "dist",
-        "autoload": {
-            "psr-4": {
-                "GuzzleHttp\\": "src/"
-            },
-            "files": [
-                "src/functions.php"
-            ]
-        },
-        "notification-url": "https://packagist.org/downloads/",
-        "license": [
-            "MIT"
-        ],
-        "authors": [
-            {
-                "name": "Michael Dowling",
-                "email": "mtdowling@gmail.com",
-                "homepage": "https://github.com/mtdowling"
-            }
-        ],
-        "description": "Guzzle is a PHP HTTP client library and framework for building RESTful web service clients",
-        "homepage": "http://guzzlephp.org/",
-        "keywords": [
-            "client",
-            "curl",
-            "framework",
-            "http",
-            "http client",
-            "rest",
-            "web service"
-        ]
-    },
     {
         "name": "zendframework/zend-stdlib",
         "version": "2.2.6",
@@ -2558,5 +2436,215 @@
             "testing",
             "xunit"
         ]
+    },
+    {
+        "name": "react/promise",
+        "version": "v2.1.0",
+        "version_normalized": "2.1.0.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/reactphp/promise.git",
+            "reference": "937b04f1b0ee8f6d180e75a0830aac778ca4bcd6"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/reactphp/promise/zipball/937b04f1b0ee8f6d180e75a0830aac778ca4bcd6",
+            "reference": "937b04f1b0ee8f6d180e75a0830aac778ca4bcd6",
+            "shasum": ""
+        },
+        "require": {
+            "php": ">=5.4.0"
+        },
+        "time": "2014-10-15 20:05:57",
+        "type": "library",
+        "extra": {
+            "branch-alias": {
+                "dev-master": "2.0-dev"
+            }
+        },
+        "installation-source": "dist",
+        "autoload": {
+            "psr-4": {
+                "React\\Promise\\": "src/"
+            },
+            "files": [
+                "src/functions.php"
+            ]
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "MIT"
+        ],
+        "authors": [
+            {
+                "name": "Jan Sorgalla",
+                "email": "jsorgalla@googlemail.com"
+            }
+        ],
+        "description": "A lightweight implementation of CommonJS Promises/A for PHP"
+    },
+    {
+        "name": "guzzlehttp/streams",
+        "version": "3.0.0",
+        "version_normalized": "3.0.0.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/guzzle/streams.git",
+            "reference": "47aaa48e27dae43d39fc1cea0ccf0d84ac1a2ba5"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/guzzle/streams/zipball/47aaa48e27dae43d39fc1cea0ccf0d84ac1a2ba5",
+            "reference": "47aaa48e27dae43d39fc1cea0ccf0d84ac1a2ba5",
+            "shasum": ""
+        },
+        "require": {
+            "php": ">=5.4.0"
+        },
+        "require-dev": {
+            "phpunit/phpunit": "~4.0"
+        },
+        "time": "2014-10-12 19:18:40",
+        "type": "library",
+        "extra": {
+            "branch-alias": {
+                "dev-master": "3.0-dev"
+            }
+        },
+        "installation-source": "dist",
+        "autoload": {
+            "psr-4": {
+                "GuzzleHttp\\Stream\\": "src/"
+            }
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "MIT"
+        ],
+        "authors": [
+            {
+                "name": "Michael Dowling",
+                "email": "mtdowling@gmail.com",
+                "homepage": "https://github.com/mtdowling"
+            }
+        ],
+        "description": "Provides a simple abstraction over streams of data",
+        "homepage": "http://guzzlephp.org/",
+        "keywords": [
+            "Guzzle",
+            "stream"
+        ]
+    },
+    {
+        "name": "guzzlehttp/ringphp",
+        "version": "1.0.0",
+        "version_normalized": "1.0.0.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/guzzle/RingPHP.git",
+            "reference": "9e44b565d726d9614cd970319e6eea70ee15bff3"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/guzzle/RingPHP/zipball/9e44b565d726d9614cd970319e6eea70ee15bff3",
+            "reference": "9e44b565d726d9614cd970319e6eea70ee15bff3",
+            "shasum": ""
+        },
+        "require": {
+            "guzzlehttp/streams": "~3.0",
+            "php": ">=5.4.0",
+            "react/promise": "~2.0"
+        },
+        "require-dev": {
+            "ext-curl": "*",
+            "phpunit/phpunit": "~4.0"
+        },
+        "suggest": {
+            "ext-curl": "Guzzle will use specific adapters if cURL is present"
+        },
+        "time": "2014-10-13 00:59:38",
+        "type": "library",
+        "extra": {
+            "branch-alias": {
+                "dev-master": "1.0-dev"
+            }
+        },
+        "installation-source": "dist",
+        "autoload": {
+            "psr-4": {
+                "GuzzleHttp\\Ring\\": "src/"
+            }
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "MIT"
+        ],
+        "authors": [
+            {
+                "name": "Michael Dowling",
+                "email": "mtdowling@gmail.com",
+                "homepage": "https://github.com/mtdowling"
+            }
+        ]
+    },
+    {
+        "name": "guzzlehttp/guzzle",
+        "version": "5.0.0",
+        "version_normalized": "5.0.0.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/guzzle/guzzle.git",
+            "reference": "28b51e11237f25cdb0efaea8e45af26007831aa9"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/guzzle/guzzle/zipball/28b51e11237f25cdb0efaea8e45af26007831aa9",
+            "reference": "28b51e11237f25cdb0efaea8e45af26007831aa9",
+            "shasum": ""
+        },
+        "require": {
+            "guzzlehttp/ringphp": "~1.0",
+            "php": ">=5.4.0"
+        },
+        "require-dev": {
+            "ext-curl": "*",
+            "phpunit/phpunit": "~4.0",
+            "psr/log": "~1.0"
+        },
+        "time": "2014-10-13 03:05:51",
+        "type": "library",
+        "extra": {
+            "branch-alias": {
+                "dev-ring": "5.0-dev"
+            }
+        },
+        "installation-source": "dist",
+        "autoload": {
+            "psr-4": {
+                "GuzzleHttp\\": "src/"
+            }
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "MIT"
+        ],
+        "authors": [
+            {
+                "name": "Michael Dowling",
+                "email": "mtdowling@gmail.com",
+                "homepage": "https://github.com/mtdowling"
+            }
+        ],
+        "description": "Guzzle is a PHP HTTP client library and framework for building RESTful web service clients",
+        "homepage": "http://guzzlephp.org/",
+        "keywords": [
+            "client",
+            "curl",
+            "framework",
+            "http",
+            "http client",
+            "rest",
+            "web service"
+        ]
     }
 ]
diff --git a/core/vendor/guzzlehttp/guzzle/.gitignore b/core/vendor/guzzlehttp/guzzle/.gitignore
index f344b89b9197d01ebfa81a6431bcbe00aaf54912..83ec41e24427fbd121fef56d827ff34e46fd50fe 100644
--- a/core/vendor/guzzlehttp/guzzle/.gitignore
+++ b/core/vendor/guzzlehttp/guzzle/.gitignore
@@ -3,7 +3,7 @@ composer.phar
 composer.lock
 composer-test.lock
 vendor/
-build/
+build/artifacts/
 artifacts/
 docs/_build
 docs/*.pyc
diff --git a/core/vendor/guzzlehttp/guzzle/.travis.yml b/core/vendor/guzzlehttp/guzzle/.travis.yml
index 65f2d69a0fe86073aeca030e48ce2eba44bc4942..77bcf4a7003a81beac976cafbb6bf72b194baae2 100644
--- a/core/vendor/guzzlehttp/guzzle/.travis.yml
+++ b/core/vendor/guzzlehttp/guzzle/.travis.yml
@@ -21,3 +21,19 @@ matrix:
   allow_failures:
     - php: hhvm
   fast_finish: true
+
+before_deploy:
+  - make package
+
+deploy:
+  provider: releases
+  api_key:
+    secure: UpypqlYgsU68QT/x40YzhHXvzWjFwCNo9d+G8KAdm7U9+blFfcWhV1aMdzugvPMl6woXgvJj7qHq5tAL4v6oswCORhpSBfLgOQVFaica5LiHsvWlAedOhxGmnJqMTwuepjBCxXhs3+I8Kof1n4oUL9gKytXjOVCX/f7XU1HiinU=
+  file:
+    - build/artifacts/guzzle.phar
+    - build/artifacts/guzzle.zip
+  on:
+    repo: guzzle/guzzle
+    tags: true
+    all_branches: true
+    php: 5.4
diff --git a/core/vendor/guzzlehttp/guzzle/CHANGELOG.md b/core/vendor/guzzlehttp/guzzle/CHANGELOG.md
index d8c34d00dca3ea9e08f3f18793bd8d73d25f7c6a..63394fb7cc535cd1bc5b385d2bd54ee865dee466 100644
--- a/core/vendor/guzzlehttp/guzzle/CHANGELOG.md
+++ b/core/vendor/guzzlehttp/guzzle/CHANGELOG.md
@@ -1,6 +1,121 @@
 CHANGELOG
 =========
 
+5.0.0 (2014-10-12)
+------------------
+
+Adding support for non-blocking responses and some minor API cleanup.
+
+### New Features
+
+* Added support for non-blocking responses based on `guzzlehttp/guzzle-ring`.
+* Added a public API for creating a default HTTP adapter.
+* Updated the redirect plugin to be non-blocking so that redirects are sent
+  concurrently. Other plugins like this can now be updated to be non-blocking.
+* Added a "progress" event so that you can get upload and download progress
+  events.
+* Added `GuzzleHttp\Pool` which implements FutureInterface and transfers
+  requests concurrently using a capped pool size as efficiently as possible.
+* Added `hasListeners()` to EmitterInterface.
+* Removed `GuzzleHttp\ClientInterface::sendAll` and marked
+  `GuzzleHttp\Client::sendAll` as deprecated (it's still there, just not the
+  recommended way).
+
+### Breaking changes
+
+The breaking changes in this release are relatively minor. The biggest thing to
+look out for is that request and response objects no longer implement fluent
+interfaces.
+
+* Removed the fluent interfaces (i.e., ``return $this``) from requests,
+  responses, ``GuzzleHttp\Collection``, ``GuzzleHttp\Url``,
+  ``GuzzleHttp\Query``, ``GuzzleHttp\Post\PostBody``, and
+  ``GuzzleHttp\Cookie\SetCookie``. This blog post provides a good outline of
+  why I did this: http://ocramius.github.io/blog/fluent-interfaces-are-evil/.
+  This also makes the Guzzle message interfaces compatible with the current
+  PSR-7 message proposal.
+* Removed "functions.php", so that Guzzle is truly PSR-4 compliant. Except
+  for the HTTP request functions from function.php, these functions are now
+  implemented in `GuzzleHttp\Utils` using camelCase. `GuzzleHttp\json_decode`
+  moved to `GuzzleHttp\Utils::jsonDecode`. `GuzzleHttp\get_path` moved to
+  `GuzzleHttp\Utils::getPath`. `GuzzleHttp\set_path` moved to
+  `GuzzleHttp\Utils::setPath`. `GuzzleHttp\batch` should now be
+  `GuzzleHttp\Pool::batch`, which returns a bjectStorage`. Using functions.php
+  caused problems for many users: they aren't PSR-4 compliant, require an
+  explicit include, and needed an if-guard to ensure that the functions are not
+  declared multiple times.
+* Rewrote adapter layer.
+    * Removing all classes from `GuzzleHttp\Adapter`, these are now
+      implemented as callables that are stored in `GuzzleHttp\Ring\Client`.
+    * Removed the concept of "parallel adapters". Sending requests serially or
+      concurrently is now handled using a single adapter.
+    * Moved `GuzzleHttp\Adapter\Transaction` to `GuzzleHttp\Transaction`. The
+      Transaction object now exposes the request, response, and client as public
+      properties. The getters and setters have been removed.
+* Removed the "headers" event. This event was only useful for changing the
+  body a response once the headers of the response were known. You can implement
+  a similar behavior in a number of ways. One example might be to use a
+  FnStream that has access to the transaction being sent. For example, when the
+  first byte is written, you could check if the response headers match your
+  expectations, and if so, change the actual stream body that is being
+  written to.
+* Removed the `asArray` parameter from
+  `GuzzleHttp\Message\MessageInterface::getHeader`. If you want to get a header
+  value as an array, then use the newly added ``getHeaderAsArray()`` method of
+  ``MessageInterface``. This change makes the Guzzle interfaces compatible with
+  the PSR-7 interfaces.
+* ``GuzzleHttp\Message\MessageFactory`` no longer allows subclasses to add
+  custom request options using double-dispatch (this was an implementation
+  detail). Instead, you should now provide an associative array to the
+  constructor which is a mapping of the request option name mapping to a
+  function that applies the option value to a request.
+* Removed the concept of "throwImmediately" from exceptions and error events.
+  This control mechanism was used to stop a transfer of concurrent requests
+  from completing. This can now be handled by throwing the exception or by
+  cancelling a pool of requests or each outstanding future request individually.
+* Updated to "GuzzleHttp\Streams" 3.0.
+    * `GuzzleHttp\Stream\StreamInterface::getContents()` no longer accepts a
+      `maxLen` parameter. This update makes the Guzzle streams project
+      compatible with the current PSR-7 proposal.
+    * ``GuzzleHttp\Stream\Stream::__construct``,
+      ``GuzzleHttp\Stream\Stream::factory``, and
+      ``GuzzleHttp\Stream\Utils::create`` no longer accept a size in the second
+      argument. They now accept an associative array of options, including the
+      "size" key and "metadata" key which can be used to provide custom metadata.
+
+4.2.2 (2014-09-08)
+------------------
+
+* Fixed a memory leak in the CurlAdapter when reusing cURL handles.
+* No longer using `request_fulluri` in stream adapter proxies.
+* Relative redirects are now based on the last response, not the first response.
+
+4.2.1 (2014-08-19)
+------------------
+
+* Ensuring that the StreamAdapter does not always add a Content-Type header
+* Adding automated github releases with a phar and zip
+
+4.2.0 (2014-08-17)
+------------------
+
+* Now merging in default options using a case-insensitive comparison.
+  Closes https://github.com/guzzle/guzzle/issues/767
+* Added the ability to automatically decode `Content-Encoding` response bodies
+  using the `decode_content` request option. This is set to `true` by default
+  to decode the response body if it comes over the wire with a
+  `Content-Encoding`. Set this value to `false` to disable decoding the
+  response content, and pass a string to provide a request `Accept-Encoding`
+  header and turn on automatic response decoding. This feature now allows you
+  to pass an `Accept-Encoding` header in the headers of a request but still
+  disable automatic response decoding.
+  Closes https://github.com/guzzle/guzzle/issues/764
+* Added the ability to throw an exception immediately when transferring
+  requests in parallel. Closes https://github.com/guzzle/guzzle/issues/760
+* Updating guzzlehttp/streams dependency to ~2.1
+* No longer utilizing the now deprecated namespaced methods from the stream
+  package.
+
 4.1.8 (2014-08-14)
 ------------------
 
diff --git a/core/vendor/guzzlehttp/guzzle/Makefile b/core/vendor/guzzlehttp/guzzle/Makefile
index e21e9dfbf7fcf81aaa40b9c918e94ad21ce691e3..b8188d22b88abb3a4808f3519dfe5ec8da58d89c 100644
--- a/core/vendor/guzzlehttp/guzzle/Makefile
+++ b/core/vendor/guzzlehttp/guzzle/Makefile
@@ -1,14 +1,10 @@
 all: clean coverage docs
 
 start-server:
-	@ps aux | grep 'node tests/server.js' | grep -v grep > /dev/null \
-	|| node tests/server.js &> /dev/null &
+	cd vendor/guzzlehttp/ringphp && make start-server
 
 stop-server:
-	@PID=$(shell ps axo pid,command | grep 'tests/server.js' | grep -v grep | cut -f 1 -d " ") && \
-	[ -n "$$PID" ] && \
-	kill $$PID || \
-	true
+	cd vendor/guzzlehttp/ringphp && make stop-server
 
 test: start-server
 	vendor/bin/phpunit
@@ -30,8 +26,25 @@ docs:
 view-docs:
 	open docs/_build/html/index.html
 
+tag:
+	$(if $(TAG),,$(error TAG is not defined. Pass via "make tag TAG=4.2.1"))
+	@echo Tagging $(TAG)
+	chag update -m '$(TAG) ()'
+	sed -i '' -e "s/VERSION = '.*'/VERSION = '$(TAG)'/" src/ClientInterface.php
+	php -l src/ClientInterface.php
+	git add -A
+	git commit -m '$(TAG) release'
+	chag tag
+
 perf: start-server
 	php tests/perf.php
 	$(MAKE) stop-server
 
-.PHONY: docs
+package: burgomaster
+	php build/packager.php
+
+burgomaster:
+	mkdir -p build/artifacts
+	curl -s https://raw.githubusercontent.com/mtdowling/Burgomaster/0.0.1/src/Burgomaster.php > build/artifacts/Burgomaster.php
+
+.PHONY: docs burgomaster
diff --git a/core/vendor/guzzlehttp/guzzle/README.md b/core/vendor/guzzlehttp/guzzle/README.md
index 94c386ef4f7777488ab2a6ea42afa0e7f48a0f94..90e163b541cc0a73d5922491a05a8cf8e0d23460 100644
--- a/core/vendor/guzzlehttp/guzzle/README.md
+++ b/core/vendor/guzzlehttp/guzzle/README.md
@@ -3,38 +3,44 @@ Guzzle, PHP HTTP client and webservice framework
 
 [![Build Status](https://secure.travis-ci.org/guzzle/guzzle.png?branch=master)](http://travis-ci.org/guzzle/guzzle)
 
-Guzzle is a PHP HTTP client that makes it easy to work with HTTP/1.1 and takes
-the pain out of consuming web services.
+Guzzle is a PHP HTTP client that makes it easy to send HTTP requests and
+trivial to integrate with web services.
+
+- Manages things like persistent connections, represents query strings as
+  collections, simplifies sending streaming POST requests with fields and
+  files, and abstracts away the underlying HTTP transport layer.
+- Can send both synchronous and asynchronous requests using the same interface
+  without requiring a dependency on a specific event loop.
+- Pluggable HTTP adapters allows Guzzle to integrate with any method you choose
+  for sending HTTP requests over the wire (e.g., cURL, sockets, PHP's stream
+  wrapper, non-blocking event loops like ReactPHP.
+- Guzzle makes it so that you no longer need to fool around with cURL options,
+  stream contexts, or sockets.
 
 ```php
 $client = new GuzzleHttp\Client();
 $response = $client->get('http://guzzlephp.org');
 $res = $client->get('https://api.github.com/user', ['auth' =>  ['user', 'pass']]);
 echo $res->getStatusCode();
-// 200
+// "200"
 echo $res->getHeader('content-type');
 // 'application/json; charset=utf8'
 echo $res->getBody();
 // {"type":"User"...'
 var_export($res->json());
 // Outputs the JSON decoded data
-```
 
-- Pluggable HTTP adapters that can send requests serially or in parallel
-- Doesn't require cURL, but uses cURL by default
-- Streams data for both uploads and downloads
-- Provides event hooks & plugins for cookies, caching, logging, OAuth, mocks,
-  etc.
-- Keep-Alive & connection pooling
-- SSL Verification
-- Automatic decompression of response bodies
-- Streaming multipart file uploads
-- Connection timeouts
+// Send an asynchronous request.
+$req = $client->createRequest('GET', 'http://httpbin.org', ['future' => true]);
+$client->send($req)->then(function ($response) {
+    echo 'I completed! ' . $response;
+});
+```
 
 Get more information and answers with the
 [Documentation](http://guzzlephp.org/),
 [Forums](https://groups.google.com/forum/?hl=en#!forum/guzzle),
-and IRC ([#guzzlephp](irc://irc.freenode.net/#guzzlephp) @ irc.freenode.net).
+and [Gitter](https://gitter.im/guzzle/guzzle).
 
 ### Installing via Composer
 
@@ -51,7 +57,7 @@ Next, update your project's composer.json file to include Guzzle:
 ```javascript
 {
     "require": {
-        "guzzlehttp/guzzle": "~4.0"
+        "guzzlehttp/guzzle": "~5.0"
     }
 }
 ```
diff --git a/core/vendor/guzzlehttp/guzzle/UPGRADING.md b/core/vendor/guzzlehttp/guzzle/UPGRADING.md
index 8b5f045015379a2d3831359755b9d9895330599f..d0f55bc3537ada7a5af656609f17048d96de4f5a 100644
--- a/core/vendor/guzzlehttp/guzzle/UPGRADING.md
+++ b/core/vendor/guzzlehttp/guzzle/UPGRADING.md
@@ -1,6 +1,69 @@
 Guzzle Upgrade Guide
 ====================
 
+4.x to 5.0
+----------
+
+## Rewritten Adapter Layer
+
+Guzzle now uses `RingPHP <http://ringphp.readthedocs.org/en/latest/>`_ to send
+HTTP requests. The `adapter` option in a `GuzzleHttp\Client` constructor
+is still supported, but it has now been renamed to `handler`. Instead of
+passing a `GuzzleHttp\Adapter\AdapterInterface`, you must now pass a PHP
+`callable` that follows the RingPHP specification.
+
+## Removed Fluent Interfaces
+
+`Fluent interfaces were removed <http://ocramius.github.io/blog/fluent-interfaces-are-evil/>`_
+from the following classes:
+
+- `GuzzleHttp\Collection`
+- `GuzzleHttp\Url`
+- `GuzzleHttp\Query`
+- `GuzzleHttp\Post\PostBody`
+- `GuzzleHttp\Cookie\SetCookie`
+
+## Removed functions.php
+
+Removed "functions.php", so that Guzzle is truly PSR-4 compliant. The following
+functions can be used as replacements.
+
+- `GuzzleHttp\json_decode` -> `GuzzleHttp\Utils::jsonDecode`
+- `GuzzleHttp\get_path` -> `GuzzleHttp\Utils::getPath`
+- `GuzzleHttp\Utils::setPath` -> `GuzzleHttp\set_path`
+- `GuzzleHttp\Pool::batch` -> `GuzzleHttp\batch`. This function is, however,
+  deprecated in favor of using `GuzzleHttp\Pool::batch()`.
+
+The "procedural" global client has been removed with no replacement (e.g.,
+`GuzzleHttp\get()`, `GuzzleHttp\post()`, etc.). Use a `GuzzleHttl\Client`
+object as a replacement.
+
+## `throwImmediately` has been removed
+
+The concept of "throwImmediately" has been removed from exceptions and error
+events. This control mechanism was used to stop a transfer of concurrent
+requests from completing. This can now be handled by throwing the exception or
+by cancelling a pool of requests or each outstanding future request
+individually.
+
+## headers event has been removed
+
+Removed the "headers" event. This event was only useful for changing the
+body a response once the headers of the response were known. You can implement
+a similar behavior in a number of ways. One example might be to use a
+FnStream that has access to the transaction being sent. For example, when the
+first byte is written, you could check if the response headers match your
+expectations, and if so, change the actual stream body that is being
+written to.
+
+## Updates to HTTP Messages
+
+Removed the `asArray` parameter from
+`GuzzleHttp\Message\MessageInterface::getHeader`. If you want to get a header
+value as an array, then use the newly added `getHeaderAsArray()` method of
+`MessageInterface`. This change makes the Guzzle interfaces compatible with
+the PSR-7 interfaces.
+
 3.x to 4.0
 ----------
 
@@ -285,7 +348,7 @@ emitted during the lifecycle of a request now emit a custom
 methods and a way in which to modify the transaction at that specific point in
 time (e.g., intercept the request and set a response on the transaction).
 
-- `request.before_send` has been renamed to ``before`` and now emits a
+- `request.before_send` has been renamed to `before` and now emits a
   `GuzzleHttp\Event\BeforeEvent`
 - `request.complete` has been renamed to `complete` and now emits a
   `GuzzleHttp\Event\CompleteEvent`.
diff --git a/core/vendor/guzzlehttp/guzzle/build/packager.php b/core/vendor/guzzlehttp/guzzle/build/packager.php
new file mode 100644
index 0000000000000000000000000000000000000000..96afa93a47612c433c5c65f92f11df8103b46aed
--- /dev/null
+++ b/core/vendor/guzzlehttp/guzzle/build/packager.php
@@ -0,0 +1,21 @@
+<?php
+require __DIR__ . '/artifacts/Burgomaster.php';
+
+$stageDirectory = __DIR__ . '/artifacts/staging';
+$projectRoot = __DIR__ . '/../';
+$packager = new \Burgomaster($stageDirectory, $projectRoot);
+
+// Copy basic files to the stage directory. Note that we have chdir'd onto
+// the $projectRoot directory, so use relative paths.
+foreach (['README.md', 'LICENSE'] as $file) {
+    $packager->deepCopy($file, $file);
+}
+
+// Copy each dependency to the staging directory. Copy *.php and *.pem files.
+$packager->recursiveCopy('src', 'GuzzleHttp', ['php']);
+$packager->recursiveCopy('vendor/react/promise/src', '');
+$packager->recursiveCopy('vendor/guzzlehttp/ringphp/src', 'GuzzleHttp/Ring');
+$packager->recursiveCopy('vendor/guzzlehttp/streams/src', 'GuzzleHttp/Stream');
+$packager->createAutoloader(['React/Promise/functions.php']);
+$packager->createPhar(__DIR__ . '/artifacts/guzzle.phar');
+$packager->createZip(__DIR__ . '/artifacts/guzzle.zip');
diff --git a/core/vendor/guzzlehttp/guzzle/composer.json b/core/vendor/guzzlehttp/guzzle/composer.json
index 3d2244f82f4668673d2ad1960c54efdbe7d708b7..43804ffbb3e602726cf875380669308acab899ef 100644
--- a/core/vendor/guzzlehttp/guzzle/composer.json
+++ b/core/vendor/guzzlehttp/guzzle/composer.json
@@ -5,7 +5,6 @@
     "keywords": ["framework", "http", "rest", "web service", "curl", "client", "HTTP client"],
     "homepage": "http://guzzlephp.org/",
     "license": "MIT",
-
     "authors": [
         {
             "name": "Michael Dowling",
@@ -13,37 +12,28 @@
             "homepage": "https://github.com/mtdowling"
         }
     ],
-
     "require": {
         "php": ">=5.4.0",
-        "ext-json": "*",
-        "guzzlehttp/streams": "~1.4"
+        "guzzlehttp/ringphp": "~1.0"
     },
-
-    "suggest": {
-        "ext-curl": "Guzzle will use specific adapters if cURL is present"
+    "require-dev": {
+        "ext-curl": "*",
+        "psr/log": "~1.0",
+        "phpunit/phpunit": "~4.0"
     },
-
     "autoload": {
         "psr-4": {
             "GuzzleHttp\\": "src/"
-        },
-        "files": ["src/functions.php"]
+        }
     },
     "autoload-dev": {
         "psr-4": {
             "GuzzleHttp\\Tests\\": "tests/"
         }
     },
-    "require-dev": {
-        "ext-curl": "*",
-        "psr/log": "~1.0",
-        "phpunit/phpunit": "~4.0"
-    },
-
     "extra": {
         "branch-alias": {
-            "dev-master": "4.1-dev"
+            "dev-ring": "5.0-dev"
         }
     }
 }
diff --git a/core/vendor/guzzlehttp/guzzle/docs/adapters.rst b/core/vendor/guzzlehttp/guzzle/docs/adapters.rst
deleted file mode 100644
index 9f2d0870f545f3f343acf5c877f42f8a3651997b..0000000000000000000000000000000000000000
--- a/core/vendor/guzzlehttp/guzzle/docs/adapters.rst
+++ /dev/null
@@ -1,222 +0,0 @@
-========
-Adapters
-========
-
-Guzzle uses *adapters* to send HTTP requests. Adapters emit the lifecycle
-events of requests, transfer HTTP requests, and normalize error handling.
-
-Default Adapter
-===============
-
-Guzzle will use the best possible adapter based on your environment.
-
-If cURL is present, Guzzle will use the following adapters by default:
-
-- ``GuzzleHttp\Adapter\Curl\MultiAdapter`` is used to transfer requests in
-  parallel.
-- If ``allow_url_fopen`` is enabled, then a
-  ``GuzzleHttp\Adapter\StreamingProxyAdapter`` is added so that streaming
-  requests are sent using the PHP stream wrapper. If this setting is disabled,
-  then streaming requests are sent through a cURL adapter.
-- If using PHP 5.5 or greater, then a ``GuzzleHttp\Adapter\Curl\CurlAdapter``
-  is used to send serial requests. Otherwise, the
-  ``GuzzleHttp\Adapter\Curl\MultiAdapter`` is used for serial and parallel
-  requests.
-
-If cURL is not installed, then Guzzle will use a
-``GuzzleHttp\Adapter\StreamingAdapter`` to send requests through PHP's
-HTTP stream wrapper. ``allow_url_fopen`` must be enabled if cURL is not
-installed on your system.
-
-Creating an Adapter
-===================
-
-Creating a custom HTTP adapter allows you to completely customize the way an
-HTTP request is sent over the wire. In some cases, you might need to use a
-different mechanism for transferring HTTP requests other than cURL or PHP's
-stream wrapper. For example, you might need to use a socket because the version
-of cURL on your system has an old bug, maybe you'd like to implement future
-response objects, or you want to create a thread pool and send parallel
-requests using pthreads.
-
-The first thing you need to know about implementing custom adapters are the
-responsibilities of an adapter.
-
-Adapter Responsibilities
-------------------------
-
-Adapters use a ``GuzzleHttp\Adapter\TransactionInterface`` which acts as a
-mediator between ``GuzzleHttp\Message\RequestInterface`` and
-``GuzzleHttp\Message\ResponseInterface`` objects. The main goal of an adapter
-is to set a response on the provided transaction object.
-
-1. The adapter MUST return a ``GuzzleHttp\Message\ResponseInterface`` object in
-   a successful condition.
-
-2. When preparing requests, adapters MUST properly handle as many of the
-   following request configuration options as possible:
-
-   - :ref:`cert-option`
-   - :ref:`connect_timeout-option`
-   - :ref:`debug-option`
-   - :ref:`expect-option`
-   - :ref:`proxy-option`
-   - :ref:`save_to-option`
-   - :ref:`ssl_key-option`
-   - :ref:`stream-option`
-   - :ref:`timeout-option`
-   - :ref:`verify-option`
-
-3. Adapters SHOULD not follow redirects. In the normal case, redirects are
-   followed by ``GuzzleHttp\Subscriber\Redirect``. Redirects SHOULD be
-   implemented using Guzzle event subscribers, not by an adapter.
-
-4. The adapter MUST emit a ``before`` event with a
-   ``GuzzleHttp\Event\BeforeEvent`` object before sending a request. If the
-   event is intercepted and a response is associated with a transaction during
-   the ``before`` event, then the adapter MUST not send the request over the
-   wire, but rather return the response.
-
-5. When all of the headers of a response have been received, the adapter MUST
-   emit a ``headers`` event with a ``GuzzleHttp\Event\HeadersEvent``. This
-   event MUST be emitted before any data is written to the body of the response
-   object. It is important to keep in mind that event listeners MAY mutate a
-   response during the emission of this event.
-
-6. The adapter MUST emit a ``complete`` event with a
-   ``GuzzleHttp\Event\CompleteEvent`` when a request has completed sending.
-   Adapters MUST emit the complete event for all valid HTTP responses,
-   including responses that resulted in a non 2xx level response.
-
-7. The adapter MUST emit an ``error`` event with a
-   ``GuzzleHttp\Event\ErrorEvent``when an error occurs during the transfer.
-   This includes when preparing a request for transfer, during the ``before``
-   event, during the ``headers`` event, during the ``complete`` event, when
-   a networking error occurs, and so on.
-
-8. After emitting the ``error`` event, the adapter MUST check if the
-   error event was intercepted and a response was associated with the
-   transaction. If the propagation of the ``error`` event was not stopped, then
-   the adapter MUST throw the exception. If the propagation was stopped, then
-   the adapter MUST NOT throw the exception.
-
-Parallel Adapters
------------------
-
-Parallel adapters are used when using a client's ``sendAll()`` method. Parallel
-adapters are expected to send one or more transactions in parallel. Parallel
-adapters accept an ``\Iterator`` that yields
-``GuzzleHttp\Adapter\TransactionInterface`` object. In addition to the
-iterator, the adapter is also provided an integer representing the number of
-transactions to execute in parallel.
-
-Parallel adapters are similar to adapters (described earlier), except for the
-following:
-
-1. RequestExceptions are never thrown from a parallel adapter. Error handling
-   for parallel transfers is handled through event listeners that use ``error``
-   events.
-
-2. Parallel adapters are not expected to return responses. Because parallel
-   adapters can, in theory, send an infinite number of requests, developers
-   must use event listeners to receive the ``complete`` event and handle
-   responses accordingly.
-
-Emitting Lifecycle Events
--------------------------
-
-Request lifecycle events MUST be emitted by adapters and parallel adapters.
-These lifecycle events are used by event listeners to modify requests, modify
-responses, perform validation, and anything else required by an application.
-
-Emitting request lifecycle events in an adapter is much simpler if you use the
-static helper method of ``GuzzleHttp\Event\RequestEvents``. These methods are
-used by the built-in in curl and stream wrapper adapters of Guzzle, so you
-should use them too.
-
-Example Adapter
-===============
-
-Here's a really simple example of creating a custom HTTP adapter. For
-simplicity, this example uses a magic ``send_request()`` function.
-
-.. code-block:: php
-
-    <?php
-
-    namespace MyProject\Adapter;
-
-    use GuzzleHttp\Event\RequestEvents;
-    use GuzzleHttp\Event\HeadersEvent;
-    use GuzzleHttp\Message\MessageFactoryInterface;
-
-    class MyAdapter implements AdapterInterface
-    {
-        private $messageFactory;
-
-        public function __construct(MessageFactoryInterface $messageFactory)
-        {
-            $this->messageFactory = $messageFactory;
-        }
-
-        public function send(TransactionInterface $transaction)
-        {
-            RequestEvents::emitBefore($transaction);
-
-            // Check if the transaction was intercepted
-            if (!$transaction->getResponse()) {
-                // It wasn't intercepted, so send the request
-                $this->getResponse($transaction);
-            }
-
-            // Adapters always return a response in the successful case.
-            return $transaction->getResponse();
-        }
-
-        private function getResponse(TransactionInterface $transaction)
-        {
-            $request = $transaction->getRequest();
-
-            $response = send_request(
-                $request->getMethod(),
-                $request->getUrl(),
-                $request->getHeaders(),
-                $request->getBody()
-            );
-
-            if ($response) {
-                $this->processResponse($response, $transaction);
-            } else {
-                // Emit the error event which allows listeners to intercept
-                // the error with a valid response. If it is not intercepted,
-                // a RequestException is thrown.
-                RequestEvents::emitError($transaction, $e);
-            }
-        }
-
-        private function processResponse(
-            array $response,
-            TransactionInterface $transaction
-        ) {
-            // Process the response, create a Guzzle Response object, and
-            // associate the response with the transaction.
-            $responseObject = $this->messageFactory->createResponse(
-                $response['status_code'],
-                $response['headers']
-            );
-
-            $transaction->setResponse($responseObject);
-
-            // Emit the headers event before downloading the body
-            RequestEvents::emitHeaders($transaction);
-
-            if ($response['body']) {
-                // Assuming the response body is a stream or something,
-                // associate it with the response object.
-                $responseObject->setBody(Stream::factory($response['body']));
-            }
-
-            // Emit the complete event
-            RequestEvents::emitComplete($transaction);
-        }
-    }
diff --git a/core/vendor/guzzlehttp/guzzle/docs/clients.rst b/core/vendor/guzzlehttp/guzzle/docs/clients.rst
index 30e879ba9ec23ae28c54651e36bea1030027ccc2..c5aed63f0201f0874b9c1ec372bb6f02e08c6860 100644
--- a/core/vendor/guzzlehttp/guzzle/docs/clients.rst
+++ b/core/vendor/guzzlehttp/guzzle/docs/clients.rst
@@ -3,7 +3,7 @@ Clients
 =======
 
 Clients are used to create requests, create transactions, send requests
-through an HTTP adapter, and return a response. You can add default request
+through an HTTP handler, and return a response. You can add default request
 options to a client that are applied to every request (e.g., default headers,
 default query string parameters, etc.), and you can add event listeners and
 subscribers to every request created by a client.
@@ -29,22 +29,12 @@ base_url
     `Absolute URLs <http://tools.ietf.org/html/rfc3986#section-4.3>`_ sent
     through a client will not use the base URL of the client.
 
-adapter
-    Configures the HTTP adapter (``GuzzleHttp\Adapter\AdapterInterface``) used
-    to transfer the HTTP requests of a client. Guzzle will, by default, utilize
-    a stacked adapter that chooses the best adapter to use based on the provided
-    request options and based on the extensions available in the environment. If
-    cURL is installed, it will be used as the default adapter. However, if a
-    request has the ``stream`` request option, the PHP stream wrapper adapter
-    will be used (assuming ``allow_url_fopen`` is enabled in your PHP
-    environment).
-
-parallel_adapter
-    Just like the ``adapter`` option, you can choose to specify an adapter
-    that is used to send requests in parallel
-    (``GuzzleHttp\Adapter\ParallelAdapterInterface``). Guzzle will by default
-    use cURL to send requests in parallel, but if cURL is not available it will
-    use the PHP stream wrapper and simply send requests serially.
+handler
+    Configures the `RingPHP handler <http://ringphp.readthedocs.org>`_
+    used to transfer the HTTP requests of a client. Guzzle will, by default,
+    utilize a stacked handlers that chooses the best handler to use based on the
+    provided request options and based on the extensions available in the
+    environment.
 
 message_factory
     Specifies the factory used to create HTTP requests and responses
@@ -61,9 +51,7 @@ emitter
     to be used by the client to emit request events. This option is useful if
     you need to inject an emitter with listeners/subscribers already attached.
 
-Here's an example of creating a client with various options, including using
-a mock adapter that just returns the result of a callable function and a
-base URL that is a URI template with parameters.
+Here's an example of creating a client with various options.
 
 .. code-block:: php
 
@@ -95,20 +83,28 @@ Requests can be created using various methods of a client. You can create
 Each of the above methods accepts a URL as the first argument and an optional
 associative array of :ref:`request-options` as the second argument.
 
+Synchronous Requests
+--------------------
+
+Guzzle sends synchronous (blocking) requests when the ``future`` request option
+is not specified. This means that the request will complete immediately, and if
+an error is encountered, a ``GuzzleHttp\Exception\RequestException`` will be
+thrown.
+
 .. code-block:: php
 
     $client = new GuzzleHttp\Client();
 
     $client->put('http://httpbin.org', [
-        'headers' => ['X-Foo' => 'Bar'],
-        'body' => 'this is the body!',
-        'save_to' => '/path/to/local/file',
+        'headers'         => ['X-Foo' => 'Bar'],
+        'body'            => 'this is the body!',
+        'save_to'         => '/path/to/local/file',
         'allow_redirects' => false,
-        'timeout' => 5
+        'timeout'         => 5
     ]);
 
-Error Handling
---------------
+Synchronous Error Handling
+~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 When a recoverable error is encountered while calling the ``send()`` method of
 a client, a ``GuzzleHttp\Exception\RequestException`` is thrown.
@@ -140,8 +136,89 @@ response, then you can access the associated
 ``GuzzleHttp\Message\ResponseInterface`` using the ``getResponse()`` method of
 the exception.
 
+Asynchronous Requests
+---------------------
+
+You can send asynchronous requests by setting the ``future`` request option
+to ``true`` (or a string that your handler understands). This creates a
+``GuzzleHttp\Message\FutureResponse`` object that has not yet completed. Once
+you have a future response, you can use a promise object obtained by calling
+the ``then`` method of the response to take an action when the response has
+completed or encounters an error.
+
+.. code-block:: php
+
+    $response = $client->put('http://httpbin.org/get', ['future' => true]);
+
+    // Call the function when the response completes
+    $response->then(function ($response) {
+        echo $response->getStatusCode();
+    });
+
+You can call the ``wait()`` method of a future response to block until it has
+completed. You also use a future response object just like a normal response
+object by accessing the methods of the response. Using a future response like a
+normal response object, also known as *dereferencing*, will block until the
+response has completed.
+
+.. code-block:: php
+
+    $response = $client->put('http://httpbin.org/get', ['future' => true]);
+
+    // Block until the response has completed
+    echo $response->getStatusCode();
+
+.. important::
+
+    If an exception occurred while transferring the future response, then the
+    exception encountered will be thrown when dereferencing.
+
+Asynchronous Error Handling
+~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Handling errors with future response object promises is a bit different. When
+using a promise, exceptions are forwarded to the ``$onError`` function provided
+to the second argument of the ``then()`` function.
+
+.. code-block:: php
+
+    $response = $client->put('http://httpbin.org/get', ['future' => true]);
+
+    $response
+        ->then(
+            function ($response) {
+                // This is called when the request succeeded
+                echo 'Success: ' . $response->getStatusCode();
+                // Returning a value will forward the value to the next promise
+                // in the chain.
+                return $response;
+            },
+            function ($error) {
+                // This is called when the exception failed.
+                echo 'Exception: ' . $error->getMessage();
+                // Throwing will "forward" the exception to the next promise
+                // in the chain.
+                throw $error;
+            }
+        )
+        ->then(
+            function($response) {
+                // This is called after the first promise in the chain. It
+                // receives the value returned from the first promise.
+                echo $response->getReasonPhrase();
+            },
+            function ($error) {
+                // This is called if the first promise error handler in the
+                // chain rethrows the exception.
+                echo 'Error: ' . $error->getMessage();
+            }
+        );
+
+Please see the `React/Promises project documentation <https://github.com/reactphp/promise>`_
+for more information on how promise resolution and rejection forwarding works.
+
 HTTP Errors
-~~~~~~~~~~~
+-----------
 
 If the ``exceptions`` request option is not set to ``false``, then exceptions
 are thrown for HTTP protocol errors as well:
@@ -153,7 +230,7 @@ Creating Requests
 -----------------
 
 You can create a request without sending it. This is useful for building up
-requests over time or sending requests in parallel.
+requests over time or sending requests in concurrently.
 
 .. code-block:: php
 
@@ -170,38 +247,50 @@ After creating a request, you can send it with the client's ``send()`` method.
 
     $response = $client->send($request);
 
-Sending Requests in Parallel
+Sending Requests With a Pool
 ============================
 
-You can send requests in parallel using a client object's ``sendAll()`` method.
-The ``sendAll()`` method accepts an array or ``\Iterator`` that contains
-``GuzzleHttp\Message\RequestInterface`` objects. In addition to providing the
-requests to send, you can also specify an associative array of options that
-will affect the transfer.
+You can send requests concurrently using a fixed size pool via the
+``GuzzleHttp\Pool`` class. The Pool class is an implementation of
+``GuzzleHttp\Ring\Future\FutureInterface``, meaning it can be dereferenced at a
+later time or cancelled before sending. The Pool constructor accepts a client
+object, iterator or array that yields ``GuzzleHttp\Message\RequestInterface``
+objects, and an optional associative array of options that can be used to
+affect the transfer.
 
 .. code-block:: php
 
+    use GuzzleHttp\Pool;
+
     $requests = [
         $client->createRequest('GET', 'http://httpbin.org'),
         $client->createRequest('DELETE', 'http://httpbin.org/delete'),
         $client->createRequest('PUT', 'http://httpbin.org/put', ['body' => 'test'])
     ];
 
-    $client->sendAll($requests);
+    $options = [];
+
+    // Create a pool. Note: the options array is optional.
+    $pool = new Pool($client, $requests, $options);
 
-The ``sendAll()`` method accepts the following associative array of options:
+    // Send the requests
+    $pool->wait();
 
-- **parallel**: Integer representing the maximum number of requests that are
-  allowed to be sent in parallel.
+The Pool constructor accepts the following associative array of options:
+
+- **pool_size**: Integer representing the maximum number of requests that are
+  allowed to be sent concurrently.
 - **before**: Callable or array representing the event listeners to add to
   each request's :ref:`before_event` event.
 - **complete**: Callable or array representing the event listeners to add to
   each request's :ref:`complete_event` event.
 - **error**: Callable or array representing the event listeners to add to
   each request's :ref:`error_event` event.
+- **end**: Callable or array representing the event listeners to add to
+  each request's :ref:`end_event` event.
 
-The "before", "complete", and "error" event options accept a callable or an
-array of associative arrays where each associative array contains a "fn" key
+The "before", "complete", "error", and "end" event options accept a callable or
+an array of associative arrays where each associative array contains a "fn" key
 with a callable value, an optional "priority" key representing the event
 priority (with a default value of 0), and an optional "once" key that can be
 set to true so that the event listener will be removed from the request after
@@ -209,10 +298,11 @@ it is first triggered.
 
 .. code-block:: php
 
+    use GuzzleHttp\Pool;
     use GuzzleHttp\Event\CompleteEvent;
 
     // Add a single event listener using a callable.
-    $client->sendAll($requests, [
+    Pool::send($client, $requests, [
         'complete' => function (CompleteEvent $event) {
             echo 'Completed request to ' . $event->getRequest()->getUrl() . "\n";
             echo 'Response: ' . $event->getResponse()->getBody() . "\n\n";
@@ -221,7 +311,7 @@ it is first triggered.
 
     // The above is equivalent to the following, but the following structure
     // allows you to add multiple event listeners to the same event name.
-    $client->sendAll($requests, [
+    Pool::send($client, $requests, [
         'complete' => [
             [
                 'fn'       => function (CompleteEvent $event) { /* ... */ },
@@ -234,16 +324,17 @@ it is first triggered.
 Asynchronous Response Handling
 ------------------------------
 
-When sending requests in parallel, the request/response/error lifecycle must be
-handled asynchronously. This means that you give the ``sendAll()`` method
+When sending requests concurrently using a pool, the request/response/error
+lifecycle must be handled asynchronously. This means that you give the Pool
 multiple requests and handle the response or errors that is associated with the
 request using event callbacks.
 
 .. code-block:: php
 
+    use GuzzleHttp\Pool;
     use GuzzleHttp\Event\ErrorEvent;
 
-    $client->sendAll($requests, [
+    Pool::send($client, $requests, [
         'complete' => function (CompleteEvent $event) {
             echo 'Completed request to ' . $event->getRequest()->getUrl() . "\n";
             echo 'Response: ' . $event->getResponse()->getBody() . "\n\n";
@@ -272,10 +363,11 @@ failed request to an array that we can use to process errors later.
 
 .. code-block:: php
 
+    use GuzzleHttp\Pool;
     use GuzzleHttp\Event\ErrorEvent;
 
     $errors = [];
-    $client->sendAll($requests, [
+    Pool::send($client, $requests, [
         'error' => function (ErrorEvent $event) use (&$errors) {
             $errors[] = $event;
         }
@@ -285,35 +377,21 @@ failed request to an array that we can use to process errors later.
         // Handle the error...
     }
 
-Throwing Errors Immediately
-~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-It sometimes is useful to throw exceptions immediately when the occur. The
-following example shows how to use an event listener to throw exceptions
-immeditaley and prevent subsequent requests from being sent.
-
-.. code-block:: php
-
-    use GuzzleHttp\Event\ErrorEvent;
-
-    $client->sendAll($requests, [
-        'error' => function (ErrorEvent $event) {
-            throw $event->getException();
-        }
-    ]);
-
 .. _batch-requests:
 
 Batching Requests
 -----------------
 
-Sometimes you just want to send a few requests in parallel and then process
+Sometimes you just want to send a few requests concurrently and then process
 the results all at once after they've been sent. Guzzle provides a convenience
-function ``GuzzleHttp\batch()`` that makes this very simple:
+function ``GuzzleHttp\Pool::batch()`` that makes this very simple:
 
 .. code-block:: php
 
-    $client = new GuzzleHttp\Client();
+    use GuzzleHttp\Pool;
+    use GuzzleHttp\Client;
+
+    $client = new Client();
 
     $requests = [
         $client->createRequest('GET', 'http://httpbin.org/get'),
@@ -321,27 +399,29 @@ function ``GuzzleHttp\batch()`` that makes this very simple:
         $client->createRequest('PUT', 'http://httpbin.org/put'),
     ];
 
-    $results = GuzzleHttp\batch($client, $requests);
-
-    // Results is an SplObjectStorage object where each request is a key
-    foreach ($results as $request) {
-        echo $request->getUrl() . "\n";
-        // Get the result (either a ResponseInterface or RequestException)
-        $result = $results[$request];
-        if ($result instanceof ResponseInterface) {
-            // Interact with the response directly
-            echo $result->getStatusCode();
-        } else {
-            // Get the exception message
-            echo $result->getMessage();
-        }
+    // Results is a GuzzleHttp\BatchResults object.
+    $results = Pool::batch($client, $requests);
+
+    // Can be accessed by index.
+    echo $results[0]->getStatusCode();
+
+    // Can be accessed by request.
+    echo $results->getResult($requests[0])->getStatusCode();
+
+    // Retrieve all successful responses
+    foreach ($results->getSuccessful() as $response) {
+        echo $response->getStatusCode() . "\n";
     }
 
-``GuzzleHttp\batch()`` accepts an optional associative array of options in the
-third argument that allows you to specify the 'before', 'complete' and 'error'
-events as well as specify the maximum number of requests to send in parallel
-using the 'parallel' option key. This options array is the exact same format as
-the options array exposed in ``GuzzleHttp\ClientInterface::sendAll()``.
+    // Retrieve all failures.
+    foreach ($results->getFailures() as $requestException) {
+        echo $requestException->getMessage() . "\n";
+    }
+
+``GuzzleHttp\Pool::batch()`` accepts an optional associative array of options
+in the third argument that allows you to specify the 'before', 'complete',
+'error', and 'end' events as well as specify the maximum number of requests to
+send concurrently using the 'pool_size' option key.
 
 .. _request-options:
 
@@ -507,14 +587,14 @@ basic
 
 digest
     Use `digest authentication <http://www.ietf.org/rfc/rfc2069.txt>`_ (must be
-    supported by the HTTP adapter).
+    supported by the HTTP handler).
 
     .. code-block:: php
 
         $client->get('/get', ['auth' => ['username', 'password', 'digest']]);
 
-    *This is currently only supported when using the cURL adapter, but creating
-    a replacement that can be used with any HTTP adapter is planned.*
+    *This is currently only supported when using the cURL handler, but creating
+    a replacement that can be used with any HTTP handler is planned.*
 
 .. important::
 
@@ -573,7 +653,7 @@ Adapter Specific Authentication Schemes
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 If you need to use authentication methods provided by cURL (e.g., NTLM, GSS,
-etc.), then you need to specify a curl adapter option in the ``options``
+etc.), then you need to specify a curl handler option in the ``options``
 request option array. See :ref:`config-option` for more information.
 
 .. _cookies-option:
@@ -659,6 +739,40 @@ specify whether or not the "Referer" header should be added when redirecting.
     echo $res->getStatusCode();
     // 200
 
+decode_content
+--------------
+
+:Summary: Specify whether or not ``Content-Encoding`` responses (gzip,
+    deflate, etc.) are automatically decoded.
+:Types:
+    - string
+    - bool
+:Default: ``true``
+
+This option can be used to control how content-encoded response bodies are
+handled. By default, ``decode_content`` is set to true, meaning any gzipped
+or deflated response will be decoded by Guzzle.
+
+When set to ``false``, the body of a response is never decoded, meaning the
+bytes pass through the handler unchanged.
+
+.. code-block:: php
+
+    // Request gzipped data, but do not decode it while downloading
+    $client->get('/foo.js', [
+        'headers'        => ['Accept-Encoding' => 'gzip'],
+        'decode_content' => false
+    ]);
+
+When set to a string, the bytes of a response are decoded and the string value
+provided to the ``decode_content`` option is passed as the ``Accept-Encoding``
+header of the request.
+
+.. code-block:: php
+
+    // Pass "gzip" as the Accept-Encoding header.
+    $client->get('/foo.js', ['decode_content' => 'gzip']);
+
 .. _save_to-option:
 
 save_to
@@ -717,7 +831,6 @@ events
     $client->get('/', [
         'events' => [
             'before' => function (BeforeEvent $e) { echo 'Before'; },
-            'headers' => function (HeadersEvent $e) { echo 'Headers'; },
             'complete' => function (CompleteEvent $e) { echo 'Complete'; },
             'error' => function (ErrorEvent $e) { echo 'Error'; },
         ]
@@ -814,9 +927,9 @@ connect_timeout
 
 .. note::
 
-    This setting must be supported by the HTTP adapter used to send a request.
+    This setting must be supported by the HTTP handler used to send a request.
     ``connect_timeout`` is currently only supported by the built-in cURL
-    adapter.
+    handler.
 
 .. _verify-option:
 
@@ -824,10 +937,12 @@ verify
 ------
 
 :Summary: Describes the SSL certificate verification behavior of a request.
-    Set to ``true`` to enable SSL certificate verification (the default). Set
-    to ``false`` to disable certificate verification (this is insecure!). Set
-    to a string to provide the path to a CA bundle to enable verification using
-    a custom certificate.
+
+    - Set to ``true`` to enable SSL certificate verification and use the default
+      CA bundle provided by operating system.
+    - Set to ``false`` to disable certificate verification (this is insecure!).
+    - Set to a string to provide the path to a CA bundle to enable verification
+      using a custom certificate.
 :Types:
     - bool
     - string
@@ -835,12 +950,50 @@ verify
 
 .. code-block:: php
 
-    // Use a custom SSL certificate
+    // Use the system's CA bundle (this is the default setting)
+    $client->get('/', ['verify' => true]);
+
+    // Use a custom SSL certificate on disk.
     $client->get('/', ['verify' => '/path/to/cert.pem']);
 
-    // Disable validation
+    // Disable validation entirely (don't do this!).
     $client->get('/', ['verify' => false]);
 
+Not all system's have a known CA bundle on disk. For example, Windows and
+OS X do not have a single common location for CA bundles. When setting
+"verify" to ``true``, Guzzle will do its best to find the most appropriate
+CA bundle on your system. When using cURL or the PHP stream wrapper on PHP
+versions >= 5.6, this happens by default. When using the PHP stream
+wrapper on versions < 5.6, Guzzle tries to find your CA bundle in the
+following order:
+
+1. Check if ``openssl.cafile`` is set in your php.ini file.
+2. Check if ``curl.cainfo`` is set in your php.ini file.
+3. Check if ``/etc/pki/tls/certs/ca-bundle.crt`` exists (Red Hat, CentOS,
+   Fedora; provided by the ca-certificates package)
+4. Check if ``/etc/ssl/certs/ca-certificates.crt`` exists (Ubuntu, Debian;
+   provided by the ca-certificates package)
+5. Check if ``/usr/local/share/certs/ca-root-nss.crt`` exists (FreeBSD;
+   provided by the ca_root_nss package)
+6. Check if ``/usr/local/etc/openssl/cert.pem`` (OS X; provided by homebrew)
+7. Check if ``C:\windows\system32\curl-ca-bundle.crt`` exists (Windows)
+8. Check if ``C:\windows\curl-ca-bundle.crt`` exists (Windows)
+
+The result of this lookup is cached in memory so that subsequent calls
+in the same process will return very quickly. However, when sending only
+a single request per-process in something like Apache, you should consider
+setting the ``openssl.cafile`` environment variable to the path on disk
+to the file so that this entire process is skipped.
+
+If you do not need a specific certificate bundle, then Mozilla provides a
+commonly used CA bundle which can be downloaded
+`here <https://raw.githubusercontent.com/bagder/ca-bundle/master/ca-bundle.crt>`_
+(provided by the maintainer of cURL). Once you have a CA bundle available on
+disk, you can set the "openssl.cafile" PHP ini setting to point to the path to
+the file, allowing you to omit the "verify" request option. Much more detail on
+SSL certificates can be found on the
+`cURL website <http://curl.haxx.se/docs/sslcerts.html>`_.
+
 .. _cert-option:
 
 cert
@@ -876,9 +1029,9 @@ ssl_key
 
 .. note::
 
-    ``ssl_key`` is implemented by HTTP adapters. This is currently only
-    supported by the cURL adapter, but might be supported by other third-part
-    adapters.
+    ``ssl_key`` is implemented by HTTP handlers. This is currently only
+    supported by the cURL handler, but might be supported by other third-part
+    handlers.
 
 .. _proxy-option:
 
@@ -921,7 +1074,7 @@ debug
 -----
 
 :Summary: Set to ``true`` or set to a PHP stream returned by ``fopen()`` to
-    enable debug output with the adapter used to send a request. For example,
+    enable debug output with the handler used to send a request. For example,
     when using cURL to transfer requests, cURL's verbose of ``CURLOPT_VERBOSE``
     will be emitted. When using the PHP stream wrapper, stream wrapper
     notifications will be emitted. If set to true, the output is written to
@@ -976,10 +1129,10 @@ stream
 
 .. note::
 
-    Streaming response support must be implemented by the HTTP adapter used by
-    a client. This option might not be supported by every HTTP adapter, but the
+    Streaming response support must be implemented by the HTTP handler used by
+    a client. This option might not be supported by every HTTP handler, but the
     interface of the response object remains the same regardless of whether or
-    not it is supported by the adapter.
+    not it is supported by the handler.
 
 .. _expect-option:
 
@@ -1007,7 +1160,7 @@ the body of a request is greater than 1 MB and a request is using HTTP/1.1.
     This option only takes effect when using HTTP/1.1. The HTTP/1.0 and
     HTTP/2.0 protocols do not support the "Expect: 100-Continue" header.
     Support for handling the "Expect: 100-Continue" workflow must be
-    implemented by Guzzle HTTP adapters used by a client.
+    implemented by Guzzle HTTP handlers used by a client.
 
 .. _version-option:
 
@@ -1032,7 +1185,7 @@ config
 
 :Summary: Associative array of config options that are forwarded to a request's
     configuration collection. These values are used as configuration options
-    that can be consumed by plugins and adapters.
+    that can be consumed by plugins and handlers.
 :Types: array
 :Default: None
 
@@ -1042,7 +1195,7 @@ config
     echo $request->getConfig('foo');
     // 'bar'
 
-Some HTTP adapters allow you to specify custom adapter-specific settings. For
+Some HTTP handlers allow you to specify custom handler-specific settings. For
 example, you can pass custom cURL options to requests by passing an associative
 array in the ``config`` request option under the ``curl`` key.
 
@@ -1059,6 +1212,36 @@ array in the ``config`` request option under the ``curl`` key.
         ]
     ]);
 
+future
+------
+
+:Summary: Specifies whether or not a response SHOULD be an instance of a
+    ``GuzzleHttp\Message\FutureResponse`` object.
+:Types:
+        - bool
+        - string
+:Default: ``false``
+
+By default, Guzzle requests should be synchronous. You can create asynchronous
+future responses by passing the ``future`` request option as ``true``. The
+response will only be executed when it is used like a normal response, the
+``wait()`` method of the response is called, or the corresponding handler that
+created the response is destructing and there are futures that have not been
+resolved.
+
+.. important::
+
+    This option only has an effect if your handler can create and return future
+    responses. However, even if a response is completed synchronously, Guzzle
+    will ensure that a FutureResponse object is returned for API consistency.
+
+.. code-block:: php
+
+    $response = $client->get('/foo', ['future' => true])
+        ->then(function ($response) {
+            echo 'I got a response! ' . $response;
+        });
+
 Event Subscribers
 =================
 
@@ -1095,8 +1278,8 @@ Guzzle exposes a few environment variables that can be used to customize the
 behavior of the library.
 
 ``GUZZLE_CURL_SELECT_TIMEOUT``
-    Controls the duration in seconds that ``GuzzleHttp\Adapter\Curl\MultiAdapter``
-    will use when selecting handles using ``curl_multi_select()``. Some systems
+    Controls the duration in seconds that a curl_multi_* handler will use when
+    selecting on curl handles using ``curl_multi_select()``. Some systems
     have issues with PHP's implementation of ``curl_multi_select()`` where
     calling this function always results in waiting for the maximum duration of
     the timeout.
diff --git a/core/vendor/guzzlehttp/guzzle/docs/conf.py b/core/vendor/guzzlehttp/guzzle/docs/conf.py
index c787faca402af1a7feaa887d98add1d7c780d9d2..917bdf4ca424889da423e7b272960a12701234e9 100644
--- a/core/vendor/guzzlehttp/guzzle/docs/conf.py
+++ b/core/vendor/guzzlehttp/guzzle/docs/conf.py
@@ -2,92 +2,27 @@ import sys, os
 from sphinx.highlighting import lexers
 from pygments.lexers.web import PhpLexer
 
+
 lexers['php'] = PhpLexer(startinline=True, linenos=1)
 lexers['php-annotations'] = PhpLexer(startinline=True, linenos=1)
 primary_domain = 'php'
 
-# -- General configuration -----------------------------------------------------
-
 extensions = []
 templates_path = ['_templates']
 source_suffix = '.rst'
 master_doc = 'index'
-
 project = u'Guzzle'
-copyright = u'2012, Michael Dowling'
-version = '3.0.0'
-release = '3.0.0'
-
-exclude_patterns = ['_build']
-
-# -- Options for HTML output ---------------------------------------------------
-
-# The name for this set of Sphinx documents.  If None, it defaults to
-# "<project> v<release> documentation".
-html_title = "Guzzle documentation"
+copyright = u'2014, Michael Dowling'
+version = '5.0.0'
+html_title = "Guzzle Documentation"
 html_short_title = "Guzzle"
 
-# Add any paths that contain custom static files (such as style sheets) here,
-# relative to this directory. They are copied after the builtin static files,
-# so a file named "default.css" will overwrite the builtin "default.css".
+exclude_patterns = ['_build']
 html_static_path = ['_static']
 
-# Custom sidebar templates, maps document names to template names.
-html_sidebars = {
-    '**':       ['localtoc.html', 'searchbox.html']
-}
-
-# Output file base name for HTML help builder.
-htmlhelp_basename = 'Guzzledoc'
-
-# -- Guzzle Sphinx theme setup ------------------------------------------------
-
-sys.path.insert(0, '/Users/dowling/projects/guzzle_sphinx_theme')
-
-import guzzle_sphinx_theme
-html_translator_class = 'guzzle_sphinx_theme.HTMLTranslator'
-html_theme_path = guzzle_sphinx_theme.html_theme_path()
-html_theme = 'guzzle_sphinx_theme'
-
-# Guzzle theme options (see theme.conf for more information)
-html_theme_options = {
-    "project_nav_name": "Guzzle",
-    "github_user": "guzzle",
-    "github_repo": "guzzle",
-    "disqus_comments_shortname": "guzzle",
-    "google_analytics_account": "UA-22752917-1"
-}
-
-# -- Options for LaTeX output --------------------------------------------------
-
-latex_elements = {}
-
-# Grouping the document tree into LaTeX files. List of tuples
-# (source start file, target name, title, author, documentclass [howto/manual]).
-latex_documents = [
-  ('index', 'Guzzle.tex', u'Guzzle Documentation',
-   u'Michael Dowling', 'manual'),
-]
-
-# -- Options for manual page output --------------------------------------------
-
-# One entry per manual page. List of tuples
-# (source start file, name, description, authors, manual section).
-man_pages = [
-    ('index', 'guzzle', u'Guzzle Documentation',
-     [u'Michael Dowling'], 1)
-]
-
-# If true, show URL addresses after external links.
-#man_show_urls = False
-
-# -- Options for Texinfo output ------------------------------------------------
+on_rtd = os.environ.get('READTHEDOCS', None) == 'True'
 
-# Grouping the document tree into Texinfo files. List of tuples
-# (source start file, target name, title, author,
-#  dir menu entry, description, category)
-texinfo_documents = [
-  ('index', 'Guzzle', u'Guzzle Documentation',
-   u'Michael Dowling', 'Guzzle', 'One line description of project.',
-   'Miscellaneous'),
-]
+if not on_rtd:  # only import and set the theme if we're building docs locally
+    import sphinx_rtd_theme
+    html_theme = 'sphinx_rtd_theme'
+    html_theme_path = [sphinx_rtd_theme.get_html_theme_path()]
diff --git a/core/vendor/guzzlehttp/guzzle/docs/events.rst b/core/vendor/guzzlehttp/guzzle/docs/events.rst
index 933ec6ae5f858e6433030af1585a6568878400c3..fc849075a8fce20a35c5231fa576227884589f0d 100644
--- a/core/vendor/guzzlehttp/guzzle/docs/events.rst
+++ b/core/vendor/guzzlehttp/guzzle/docs/events.rst
@@ -83,7 +83,7 @@ Adding Event Listeners
 After you have the emitter, you can register event listeners that listen to
 specific events using the ``on()`` method. When registering an event listener,
 you must tell the emitter what event to listen to (e.g., "before", "after",
-"headers", "complete", "error", etc.), what callable to invoke when the
+"progress", "complete", "error", etc.), what callable to invoke when the
 event is triggered, and optionally provide a priority.
 
 .. code-block:: php
@@ -145,7 +145,7 @@ of a ``GuzzleHttp\Common\EventInterface`` object:
     });
 
 After stopping the propagation of an event, any subsequent event listeners that
-have not yet been trigger will not be triggered. You can check to see if the
+have not yet been triggered will not be triggered. You can check to see if the
 propagation of an event was stopped using the ``isPropagationStopped()`` method
 of the event.
 
@@ -198,7 +198,7 @@ priority of the listener (as shown in the ``before`` listener in the example).
                 'before'   => ['onBefore', 100],
                 'complete' => ['onComplete'],
                 // You can pass a list of listeners with different priorities
-                'error'    => [['beforeError', 'first'], ['afterError', 'last]]
+                'error'    => [['beforeError', 'first'], ['afterError', 'last']]
             ];
         }
 
@@ -298,10 +298,10 @@ Requests emit lifecycle events when they are transferred.
 
 .. important::
 
-    Request lifecycle events may be triggered multiple times due to redirects,
-    retries, or reusing a request multiple times. Use the ``once()`` method
-    of an event emitter if you only want the event to be triggered once. You
-    can also remove an event listener from an emitter by using the emitter the
+    Excluding the ``end`` event, request lifecycle events may be triggered
+    multiple times due to redirects, retries, or reusing a request multiple
+    times. Use the ``once()`` method want the event to be triggered once. You
+    can also remove an event listener from an emitter by using the emitter which
     is provided to the listener.
 
 .. _before_event:
@@ -360,49 +360,6 @@ the request from being sent over the wire and stops the propagation of the
     Any exception encountered while executing the ``before`` event will trigger
     the ``error`` event of a request.
 
-.. _headers_event:
-
-headers
--------
-
-The ``headers`` event is emitted after the headers of a response have been
-received before any of the response body has been downloaded. The event
-emitted is a ``GuzzleHttp\Event\HeadersEvent``.
-
-This event can be useful if you need to conditionally wrap the response body
-of a request in a special decorator or if you only want to conditionally
-download a response body based on response headers.
-
-This event cannot be intercepted.
-
-.. code-block:: php
-
-    use GuzzleHttp\Client;
-    use GuzzleHttp\Event\HeadersEvent;
-
-    $client = new Client(['base_url' => 'http://httpbin.org']);
-    $request = $client->createRequest('GET', '/stream/100');
-    $request->getEmitter()->on('headers', function (HeadersEvent $e) {
-        echo $e->getResponse();
-        // Prints the response headers
-
-        // Wrap the response body in a custom decorator if the response has a body
-        if ($e->getResponse()->getHeader('Content-Length') ||
-            $e->getResponse()->getHeader('Content-Encoding')
-        ) {
-            $customBody = new MyCustomStreamDecorator($e->getResponse()->getBody());
-            $e->getResponse()->setBody($customBody);
-        }
-    });
-
-.. note::
-
-    A response may or may not yet have a body associated with it. If a request
-    used a ``save_to`` request option, then the response will have a body.
-    Otherwise, the response will have no body but you are free to associate one
-    with the response. As an example, this is done in the
-    `progress subscriber <https://github.com/guzzle/progress-subscriber/blob/master/src/Progress.php>`_.
-
 .. _complete_event:
 
 complete
@@ -480,3 +437,72 @@ a username and password.
     If an ``error`` event is intercepted with a response, then the ``complete``
     event of a request is triggered. If the ``complete`` event fails, then the
     ``error`` event is triggered once again.
+
+.. _progress_event:
+
+progress
+--------
+
+The ``progress`` event is emitted when data is uploaded or downloaded. The
+event emitted is a ``GuzzleHttp\Event\ProgressEvent``.
+
+You can access the emitted progress values using the corresponding public
+properties of the event object:
+
+- ``$downloadSize``: The number of bytes that will be downloaded (if known)
+- ``$downloaded``: The number of bytes that have been downloaded
+- ``$uploadSize``: The number of bytes that will be uploaded (if known)
+- ``$uploaded``: The number of bytes that have been uploaded
+
+This event cannot be intercepted.
+
+.. code-block:: php
+
+    use GuzzleHttp\Client;
+    use GuzzleHttp\Event\ProgressEvent;
+
+    $client = new Client(['base_url' => 'http://httpbin.org']);
+    $request = $client->createRequest('PUT', '/put', [
+        'body' => str_repeat('.', 100000)
+    ]);
+
+    $request->getEmitter()->on('progress', function (ProgressEvent $e) {
+        echo 'Downloaded ' . $e->downloaded . ' of ' . $e->downloadSize . ' '
+            . 'Uploaded ' . $e->uploaded . ' of ' . $e->uploadSize . "\r";
+    });
+
+    $client->send($request);
+    echo "\n";
+
+.. _end_event:
+
+end
+---
+
+The ``end`` event is a terminal event, emitted once per request, that provides
+access to the repsonse that was received or the exception that was encountered.
+The event emitted is a ``GuzzleHttp\Event\EndEvent``.
+
+This event can be intercepted, but keep in mind that the ``complete`` event
+will not fire after intercepting this event.
+
+.. code-block:: php
+
+    use GuzzleHttp\Client;
+    use GuzzleHttp\Event\EndEvent;
+
+    $client = new Client(['base_url' => 'http://httpbin.org']);
+    $request = $client->createRequest('PUT', '/put', [
+        'body' => str_repeat('.', 100000)
+    ]);
+
+    $request->getEmitter()->on('end', function (EndEvent $e) {
+        if ($e->getException()) {
+            echo 'Error: ' . $e->getException()->getMessage();
+        } else {
+            echo 'Response: ' . $e->getResponse();
+        }
+    });
+
+    $client->send($request);
+    echo "\n";
diff --git a/core/vendor/guzzlehttp/guzzle/docs/faq.rst b/core/vendor/guzzlehttp/guzzle/docs/faq.rst
index 9282b79542b95caae20888d93dfdabb60e2b5855..0647f693a71e85f3cee1b33a621595c9caaadb35 100644
--- a/core/vendor/guzzlehttp/guzzle/docs/faq.rst
+++ b/core/vendor/guzzlehttp/guzzle/docs/faq.rst
@@ -8,35 +8,24 @@ Why should I use Guzzle?
 Guzzle makes it easy to send HTTP requests and super simple to integrate with
 web services. Guzzle manages things like persistent connections, represents
 query strings as collections, makes it simple to send streaming POST requests
-with fields and files, and abstracts away the underlying HTTP transport layer
-(cURL, ``fopen()``, etc.). By providing an object oriented interface for HTTP
-clients, requests, responses, headers, and message bodies, Guzzle makes it so
-that you no longer need to fool around with cURL options or stream contexts.
+with fields and files, and abstracts away the underlying HTTP transport layer.
+By providing an object oriented interface for HTTP clients, requests, responses,
+headers, and message bodies, Guzzle makes it so that you no longer need to fool
+around with cURL options, stream contexts, or sockets.
 
-To get a feel for how easy it is to use Guzzle, take a look at the
-:doc:`quick start guide <quickstart>`.
+**Asynchronous and Synchronous Requests**
 
-Swappable HTTP Adapters
------------------------
+Guzzle allows you to send both asynchronous and synchronous requests using the
+same interface and no direct dependency on an event loop. This flexibility
+allows Guzzle to send an HTTP request using the most appropriate HTTP handler
+based on the request being sent. For example, when sending synchronous
+requests, Guzzle will by default send requests using cURL easy handles to
+ensure you're using the fastest possible method for serially transferring HTTP
+requests. When sending asynchronous requests, Guzzle might use cURL's multi
+interface or any other asynchronous handler you configure. When you request
+streaming data, Guzzle will by default use PHP's stream wrapper.
 
-Guzzle will use the most appropriate HTTP adapter to send requests based on the
-capabilities of your environment and the options applied to a request. When
-cURL is available on your system, Guzzle will automatically use cURL. When a
-request is sent with the ``stream=true`` request option, Guzzle will
-automatically use the PHP stream wrapper HTTP adapter so that bytes are only
-read from the HTTP stream as needed.
-
-.. note::
-
-    Guzzle has historically only utilized cURL to send HTTP requests. cURL is
-    an amazing HTTP client (arguably the best), and Guzzle will continue to use
-    it by default when it is available. It is rare, but some developers don't
-    have cURL installed on their systems or run into version specific issues.
-    By allowing swappable HTTP adapters, Guzzle is now much more customizable
-    and able to adapt to fit the needs of more developers.
-
-HTTP Streams
-------------
+**Streams**
 
 Request and response message bodies use :doc:`Guzzle Streams <streams>`,
 allowing you to stream data without needing to load it all into memory.
@@ -48,27 +37,23 @@ Guzzle's stream layer provides a large suite of functionality:
 - You can validate the integrity of a stream using a rolling hash as data is
   read from a stream.
 
-Event System
-------------
+**Event System and Plugins**
 
-Guzzle's flexible event system allows you to completely modify the behavior
-of a client or request at runtime to cater them for any API. You can send a
-request with a client, and the client can do things like automatically retry
-your request if it fails, automatically redirect, log HTTP messages that are
-sent over the wire, emit progress events as data is uploaded and downloaded,
-sign requests using OAuth 1.0, verify the integrity of messages before and
-after they are sent over the wire, and anything else you might need.
+Guzzle's  event system allows you to completely modify the behavior of a client
+or request at runtime to cater them for any API. You can send a request with a
+client, and the client can do things like automatically retry your request if
+it fails, automatically redirect, log HTTP messages that are sent over the
+wire, emit progress events as data is uploaded and downloaded, sign requests
+using OAuth 1.0, verify the integrity of messages before and after they are
+sent over the wire, and anything else you might need.
 
-Easy to Test
-------------
+**Testable**
 
 Another important aspect of Guzzle is that it's really
 :doc:`easy to test clients <testing>`. You can mock HTTP responses and when
-testing an adapter implementation, Guzzle provides a mock web server that
-makes it easy.
+testing an handler implementation, Guzzle provides a mock node.js web server.
 
-Large Ecosystem
----------------
+**Ecosystem**
 
 Guzzle has a large `ecosystem of plugins <http://guzzle.readthedocs.org/en/latest/index.html#http-components>`_,
 including `service descriptions <https://github.com/guzzle/guzzle-services>`_
@@ -82,70 +67,55 @@ an HTTP response into a more meaningful model object.
   implementation of "Guzzle Command" that utlizes Guzzle's service description
   format.
 
-Is it possible to use Guzzle 3 and 4 in the same project?
-=========================================================
-
-Yes, because Guzzle 3 and 4 use different Packagist packages and different
-namespaces. You simply need to add ``guzzle/guzzle`` (Guzzle 3) and
-``guzzlehttp/guzzle`` (Guzzle 4+) to your project's composer.json file.
-
-.. code-block:: javascript
-
-    {
-        "require": {
-            "guzzle/guzzle": 3.*,
-            "guzzlehttp/guzzle": 4.*
-        }
-    }
-
-You might need to use Guzzle 3 and Guzzle 4 in the same project due to a
-requirement of a legacy application or a dependency that has not yet migrated
-to Guzzle 4.0.
-
-How do I migrate from Guzzle 3 to 4?
-====================================
-
-See https://github.com/guzzle/guzzle/blob/master/UPGRADING.md#3x-to-40.
-
-What is this Maximum function nesting error?
-============================================
-
-    Maximum function nesting level of '100' reached, aborting
+Does Guzzle require cURL?
+=========================
 
-You could run into this error if you have the XDebug extension installed and
-you execute a lot of requests in callbacks.  This error message comes
-specifically from the XDebug extension. PHP itself does not have a function
-nesting limit. Change this setting in your php.ini to increase the limit::
+No. Guzzle can use any HTTP handler to send requests. This means that Guzzle
+can be used with cURL, PHP's stream wrapper, sockets, and non-blocking libraries
+like `React <http://reactphp.org/>`_. You just need to configure a
+`RingPHP <http://guzzle-ring.readthedocs.org/en/latest/>`_ handler to use a
+different method of sending requests.
 
-    xdebug.max_nesting_level = 1000
+.. note::
 
-[`source <http://stackoverflow.com/a/4293870/151504>`_]
+    Guzzle has historically only utilized cURL to send HTTP requests. cURL is
+    an amazing HTTP client (arguably the best), and Guzzle will continue to use
+    it by default when it is available. It is rare, but some developers don't
+    have cURL installed on their systems or run into version specific issues.
+    By allowing swappable HTTP handlers, Guzzle is now much more customizable
+    and able to adapt to fit the needs of more developers.
 
-Why am I getting a 417 error response?
+Can Guzzle send asynchronous requests?
 ======================================
 
-This can occur for a number of reasons, but if you are sending PUT, POST, or
-PATCH requests with an ``Expect: 100-Continue`` header, a server that does not
-support this header will return a 417 response. You can work around this by
-setting the ``expect`` request option to ``false``:
+Yes. Pass the ``future`` true request option to a request to send it
+asynchronously. Guzzle will then return a ``GuzzleHttp\Message\FutureResponse``
+object that can be used synchronously by accessing the response object like a
+normal response, and it can be used asynchronoulsy using a promise that is
+notified when the response is resolved with a real response or rejected with an
+exception.
 
 .. code-block:: php
 
-    $client = new GuzzleHttp\Client();
+    $request = $client->createRequest('GET', ['future' => true']);
+    $client->send($request)->then(function ($response) {
+        echo 'Got a response! ' . $response;
+    });
 
-    // Disable the expect header on a single request
-    $response = $client->put('/', [], 'the body', [
-        'expect' => false
-    ]);
+You can force an asynchronous response to complete using the ``wait()`` method
+of a response.
 
-    // Disable the expect header on all client requests
-    $client->setDefaultOption('expect', false)
+.. code-block:: php
+
+    $request = $client->createRequest('GET', ['future' => true']);
+    $futureResponse = $client->send($request);
+    $futureResponse->wait();
 
 How can I add custom cURL options?
 ==================================
 
 cURL offer a huge number of `customizable options <http://us1.php.net/curl_setopt>`_.
-While Guzzle normalizes many of these options across different adapters, there
+While Guzzle normalizes many of these options across different handlers, there
 are times when you need to set custom cURL options. This can be accomplished
 by passing an associative array of cURL settings in the **curl** key of the
 **config** request option.
@@ -189,3 +159,41 @@ used with a client and allow self-signed certificates.
             ]
         ]
     ]);
+
+Why am I getting an SSL verification error?
+===========================================
+
+You need to specify the path on disk to the CA bundle used by Guzzle for
+verifying the peer certificate. See :ref:`verify-option`.
+
+What is this Maximum function nesting error?
+============================================
+
+    Maximum function nesting level of '100' reached, aborting
+
+You could run into this error if you have the XDebug extension installed and
+you execute a lot of requests in callbacks.  This error message comes
+specifically from the XDebug extension. PHP itself does not have a function
+nesting limit. Change this setting in your php.ini to increase the limit::
+
+    xdebug.max_nesting_level = 1000
+
+Why am I getting a 417 error response?
+======================================
+
+This can occur for a number of reasons, but if you are sending PUT, POST, or
+PATCH requests with an ``Expect: 100-Continue`` header, a server that does not
+support this header will return a 417 response. You can work around this by
+setting the ``expect`` request option to ``false``:
+
+.. code-block:: php
+
+    $client = new GuzzleHttp\Client();
+
+    // Disable the expect header on a single request
+    $response = $client->put('/', [], 'the body', [
+        'expect' => false
+    ]);
+
+    // Disable the expect header on all client requests
+    $client->setDefaultOption('expect', false)
diff --git a/core/vendor/guzzlehttp/guzzle/docs/handlers.rst b/core/vendor/guzzlehttp/guzzle/docs/handlers.rst
new file mode 100644
index 0000000000000000000000000000000000000000..af0b9232e757cb343a91c349db04e7a5285690b1
--- /dev/null
+++ b/core/vendor/guzzlehttp/guzzle/docs/handlers.rst
@@ -0,0 +1,43 @@
+================
+RingPHP Handlers
+================
+
+Guzzle uses RingPHP handlers to send HTTP requests over the wire.
+RingPHP provides a low-level library that can be used to "glue" Guzzle with
+any transport method you choose. By default, Guzzle utilizes cURL and PHP's
+stream wrappers to send HTTP requests.
+
+RingPHP handlers makes it extremely simple to integrate Guzzle with any
+HTTP transport. For example, you could quite easily bridge Guzzle and React
+to use Guzzle in React's event loop.
+
+Using a handler
+---------------
+
+You can change the handler used by a client using the ``handler`` option in the
+``GuzzleHttp\Client`` constructor.
+
+.. code-block:: php
+
+    use GuzzleHttp\Client;
+    use GuzzleHttp\Ring\Client\MockHandler;
+
+    // Create a mock handler that always returns a 200 response.
+    $handler = new MockHandler(['status' => 200]);
+
+    // Configure to client to use the mock handler.
+    $client = new Client(['handler' => $handler]);
+
+At its core, handlers are simply PHP callables that accept a request array
+and return a ``GuzzleHttp\Ring\Future\FutureArrayInterface``. This future array
+can be used just like a normal PHP array, causing it to block, or you can use
+the promise interface using the ``then()`` method of the future. Guzzle hooks
+up to the RingPHP project using a very simple bridge class
+(``GuzzleHttp\RingBridge``).
+
+Creating a handler
+------------------
+
+See the `RingPHP <http://guzzle-ring.readthedocs.org>`_ project
+documentation for more information on creating custom handlers that can be
+used with Guzzle clients.
diff --git a/core/vendor/guzzlehttp/guzzle/docs/http-messages.rst b/core/vendor/guzzlehttp/guzzle/docs/http-messages.rst
index 73db70c7c1049d4362f469cda83bae06a65e2646..4144dc4bb1cdd3129c27bee1da940ec030da9ff7 100644
--- a/core/vendor/guzzlehttp/guzzle/docs/http-messages.rst
+++ b/core/vendor/guzzlehttp/guzzle/docs/http-messages.rst
@@ -32,17 +32,20 @@ headers:
     ]);
 
     $parsed = Request::parseHeader($request, 'Link');
-    echo json_encode($parsed, JSON_PRETTY_PRINT);
+    var_export($parsed);
 
-::
+Will output:
+
+.. code-block:: php
 
-    [
-        {
-            "0": "<http:\/...\/front.jpeg>",
-            "rel": "front",
-            "type": "image\/jpeg"
-        }
-    ]
+    array (
+      0 =>
+      array (
+        0 => '<http:/.../front.jpeg>',
+        'rel' => 'front',
+        'type' => 'image/jpeg',
+      ),
+    )
 
 The result contains a hash of key value pairs. Header values that have no key
 (i.e., the link) are indexed numerically while headers parts that form a key
@@ -120,7 +123,7 @@ You create requests with a client using the ``createRequest()`` method.
 
 .. code-block:: php
 
-    // Create a request but don't sent it immediately
+    // Create a request but don't send it immediately
     $request = $client->createRequest('GET', 'http://httpbin.org/get');
 
 Request Methods
@@ -128,7 +131,7 @@ Request Methods
 
 When creating a request, you are expected to provide the HTTP method you wish
 to perform. You can specify any method you'd like, including a custom method
-that might not be part of RFC 2616 (like "MOVE").
+that might not be part of RFC 7231 (like "MOVE").
 
 .. code-block:: php
 
@@ -335,10 +338,10 @@ Request Config
 --------------
 
 Request messages contain a configuration collection that can be used by
-event listeners and HTTP adapters to modify how a request behaves or is
+event listeners and HTTP handlers to modify how a request behaves or is
 transferred over the wire. For example, many of the request options that are
 specified when creating a request are actually set as config options that are
-only acted upon by adapters and listeners when the request is sent.
+only acted upon by handlers and listeners when the request is sent.
 
 You can get access to the request's config object using the ``getConfig()``
 method of a request.
@@ -368,9 +371,9 @@ access. You can also modify and remove values using array like access.
     var_export($config['foo']);
     // NULL
 
-HTTP adapters and event listeners can expose additional customization options
+HTTP handlers and event listeners can expose additional customization options
 through request config settings. For example, in order to specify custom cURL
-options to the cURL adapter, you need to specify an associative array in the
+options to the cURL handler, you need to specify an associative array in the
 ``curl`` ``config`` request option.
 
 .. code-block:: php
@@ -384,7 +387,7 @@ options to the cURL adapter, you need to specify an associative array in the
         ]
     ]);
 
-Consult the HTTP adapters and event listeners you are using to see if they
+Consult the HTTP handlers and event listeners you are using to see if they
 allow customization through request configuration options.
 
 Event Emitter
@@ -466,7 +469,7 @@ Effective URL
 
 The URL that was ultimately accessed that returned a response can be accessed
 using the ``getEffectiveUrl()`` method of a response. This method will return
-the URL of a reqeust or the URL of the last redirected URL if any redirects
+the URL of a request or the URL of the last redirected URL if any redirects
 occurred while transferring a request.
 
 .. code-block:: php
diff --git a/core/vendor/guzzlehttp/guzzle/docs/index.rst b/core/vendor/guzzlehttp/guzzle/docs/index.rst
index 500b1001fb8bf195c8e51b58a7c1ee075e07638f..d456a5f08788af48ad6ef56d5bcb7872aedb1738 100644
--- a/core/vendor/guzzlehttp/guzzle/docs/index.rst
+++ b/core/vendor/guzzlehttp/guzzle/docs/index.rst
@@ -4,29 +4,39 @@
 Guzzle
 ======
 
-Guzzle is a PHP HTTP client that makes it easy to work with HTTP/1.1 and takes
-the pain out of consuming web services.
-
-- Pluggable HTTP adapters that can send requests serially or in parallel
-- Doesn't require cURL, but uses cURL by default
-- Streams data for both uploads and downloads
-- Provides event hooks & plugins for cookies, caching, logging, OAuth, mocks, etc.
-- Keep-Alive & connection pooling
-- SSL Verification
-- Automatic decompression of response bodies
-- Streaming multipart file uploads
-- Connection timeouts
+Guzzle is a PHP HTTP client that makes it easy to send HTTP requests and
+trivial to integrate with web services.
+
+- Manages things like persistent connections, represents query strings as
+  collections, simplifies sending streaming POST requests with fields and
+  files, and abstracts away the underlying HTTP transport layer.
+- Can send both synchronous and asynchronous requests using the same interface
+  without requiring a dependency on a specific event loop.
+- Pluggable HTTP handlers allows Guzzle to integrate with any method you choose
+  for sending HTTP requests over the wire (e.g., cURL, sockets, PHP's stream
+  wrapper, non-blocking event loops like `React <http://reactphp.org/>`_, etc.).
+- Guzzle makes it so that you no longer need to fool around with cURL options,
+  stream contexts, or sockets.
 
 .. code-block:: php
 
     $client = new GuzzleHttp\Client();
-    $res = $client->get('https://api.github.com/user', [
-        'auth' =>  ['user', 'pass']
-    ]);
-    echo $res->getStatusCode();           // 200
-    echo $res->getHeader('content-type'); // 'application/json; charset=utf8'
-    echo $res->getBody();                 // {"type":"User"...'
-    var_export($res->json());             // Outputs the JSON decoded data
+    $response = $client->get('http://guzzlephp.org');
+    $res = $client->get('https://api.github.com/user', ['auth' =>  ['user', 'pass']]);
+    echo $res->getStatusCode();
+    // "200"
+    echo $res->getHeader('content-type');
+    // 'application/json; charset=utf8'
+    echo $res->getBody();
+    // {"type":"User"...'
+    var_export($res->json());
+    // Outputs the JSON decoded data
+
+    // Send an asynchronous request.
+    $req = $client->createRequest('GET', 'http://httpbin.org', ['future' => true]);
+    $client->send($req)->then(function ($response) {
+        echo 'I completed! ' . $response;
+    });
 
 User guide
 ----------
@@ -40,7 +50,7 @@ User guide
     http-messages
     events
     streams
-    adapters
+    handlers
     testing
     faq
 
@@ -57,9 +67,6 @@ layer to add capabilities to the client.
 `OAuth Subscriber <https://github.com/guzzle/oauth-subscriber>`_
     Signs requests using OAuth 1.0.
 
-`Progress Subscriber <https://github.com/guzzle/progress-subscriber>`_
-    Emits progress events when uploading and downloading data.
-
 `Cache Subscriber <https://github.com/guzzle/cache-subscriber>`_
     Implements a private transparent proxy cache that caches HTTP responses.
 
diff --git a/core/vendor/guzzlehttp/guzzle/docs/overview.rst b/core/vendor/guzzlehttp/guzzle/docs/overview.rst
index 35c74d86ce116545805c38cf4b6a6e3ed424acb4..1355afa12275ed05249ba12be71d6993cfe03bb5 100644
--- a/core/vendor/guzzlehttp/guzzle/docs/overview.rst
+++ b/core/vendor/guzzlehttp/guzzle/docs/overview.rst
@@ -6,16 +6,16 @@ Requirements
 ============
 
 #. PHP 5.4.0
-#. To use the PHP stream adapter, ``allow_url_fopen`` must be enabled in your
+#. To use the PHP stream handler, ``allow_url_fopen`` must be enabled in your
    system's php.ini.
-#. To use the cURL adapter, you must have a recent version of cURL >= 7.16.2
+#. To use the cURL handler, you must have a recent version of cURL >= 7.16.2
    compiled with OpenSSL and zlib.
 
 .. note::
 
     Guzzle no longer requires cURL in order to send HTTP requests. Guzzle will
     use the PHP stream wrapper to send HTTP requests if cURL is not installed.
-    Alternatively, you can provide your own HTTP adapter used to send requests.
+    Alternatively, you can provide your own HTTP handler used to send requests.
 
 .. _installation:
 
@@ -35,7 +35,7 @@ You can add Guzzle as a dependency using the composer.phar CLI:
 
 .. code-block:: bash
 
-    php composer.phar require guzzlehttp/guzzle:~4
+    php composer.phar require guzzlehttp/guzzle:~5.0
 
 Alternatively, you can specify Guzzle as a dependency in your project's
 existing composer.json file:
@@ -44,7 +44,7 @@ existing composer.json file:
 
     {
       "require": {
-         "guzzlehttp/guzzle": "4.*"
+         "guzzlehttp/guzzle": "~5.0"
       }
    }
 
@@ -61,13 +61,13 @@ Bleeding edge
 -------------
 
 During your development, you can keep up with the latest changes on the master
-branch by setting the version requirement for Guzzle to ``dev-master``.
+branch by setting the version requirement for Guzzle to ``~5.0@dev``.
 
 .. code-block:: js
 
    {
       "require": {
-         "guzzlehttp/guzzle": "dev-master"
+         "guzzlehttp/guzzle": "~5.0@dev"
       }
    }
 
@@ -130,7 +130,7 @@ binary:
 .. note::
 
     You'll need to install node.js v0.5.0 or newer in order to perform
-    integration tests on Guzzle's HTTP adapters.
+    integration tests on Guzzle's HTTP handlers.
 
 Reporting a security vulnerability
 ==================================
diff --git a/core/vendor/guzzlehttp/guzzle/docs/quickstart.rst b/core/vendor/guzzlehttp/guzzle/docs/quickstart.rst
index 0687ca283922c5db15e2dbf2b868cd15742ab136..65a70ed230363ed160b76a60d8f91e3f48fcc1d8 100644
--- a/core/vendor/guzzlehttp/guzzle/docs/quickstart.rst
+++ b/core/vendor/guzzlehttp/guzzle/docs/quickstart.rst
@@ -9,34 +9,8 @@ page.
 Make a Request
 ==============
 
-You can send requests with Guzzle in one of two ways: through the procedural
-API or using a ``GuzzleHttp\ClientInterface`` object. Using the procedural API
-is an easy way to send a quick HTTP request. Using a Client object provides
-much more flexibility in how requests are transferred and allows you to more
-easily test the client.
-
-Procedural API
---------------
-
-Here's an example of sending a ``POST`` request using the procedural API.
-
-.. code-block:: php
-
-    $response = GuzzleHttp\post('http://httpbin.org/post', [
-        'headers' => ['X-Foo' => 'Bar'],
-        'body'    => ['field_name' => 'value']
-    ]);
-
-You can send all kinds of HTTP requests with the procedural API. Just call
-the function that maps to the HTTP method name.
-
-.. code-block:: php
-
-    $response = GuzzleHttp\head('http://httpbin.org/get');
-    $response = GuzzleHttp\post('http://httpbin.org/post');
-    $response = GuzzleHttp\put('http://httpbin.org/put');
-    $response = GuzzleHttp\delete('http://httpbin.org/delete');
-    $response = GuzzleHttp\options('http://httpbin.org/get');
+You can send requests with Guzzle using a ``GuzzleHttp\ClientInterface``
+object.
 
 Creating a Client
 -----------------
@@ -91,6 +65,16 @@ You can get the status code and reason phrase of the response.
     $reason = $response->getReasonPhrase();
     // OK
 
+By providing the ``future`` request option to a request, you can send requests
+asynchronously using the promise interface of a future response.
+
+.. code-block:: php
+
+    $client->get('http://httpbin.org', ['future' => true])
+        ->then(function ($response) {
+            echo $response->getStatusCode();
+        });
+
 Response Body
 -------------
 
@@ -459,9 +443,6 @@ Guzzle throws exceptions for errors that occur during a transfer.
   exception extends from ``GuzzleHttp\Exception\BadResponseException``.
 - A ``GuzzleHttp\Exception\TooManyRedirectsException`` is thrown when too
   many redirects are followed. This exception extends from ``GuzzleHttp\Exception\RequestException``.
-- A ``GuzzleHttp\Exception\AdapterException`` is thrown when an error occurs
-  in an HTTP adapter during a parallel request. This exception is only thrown
-  when using the ``sendAll()`` method of a client.
 
 All of the above exceptions extend from
 ``GuzzleHttp\Exception\TransferException``.
diff --git a/core/vendor/guzzlehttp/guzzle/docs/streams.rst b/core/vendor/guzzlehttp/guzzle/docs/streams.rst
index c743e2c4bb4ff9d74d7dc70c7c2e428142cddbb0..8fe9a6984c6b516495e1b0fc611ea0c4a44b67c5 100644
--- a/core/vendor/guzzlehttp/guzzle/docs/streams.rst
+++ b/core/vendor/guzzlehttp/guzzle/docs/streams.rst
@@ -30,17 +30,17 @@ case of a socket or pipe).
 Creating Streams
 ================
 
-The best way to create a stream is using the
-``GuzzleHttp\Stream\create()`` function. This function accepts strings,
+The best way to create a stream is using the static factory method,
+``GuzzleHttp\Stream\Stream::factory()``. This factory accepts strings,
 resources returned from ``fopen()``, an object that implements
 ``__toString()``, and an object that implements
 ``GuzzleHttp\Stream\StreamInterface``.
 
 .. code-block:: php
 
-    use GuzzleHttp\Stream;
+    use GuzzleHttp\Stream\Stream;
 
-    $stream = Stream\create('string data');
+    $stream = Stream::factory('string data');
     echo $stream;
     // string data
     echo $stream->read(3);
@@ -52,28 +52,20 @@ resources returned from ``fopen()``, an object that implements
     var_export($stream->tell());
     // 11
 
-.. note::
+Metadata
+========
 
-    You can use this ``create()`` function or use the static ``factory()``
-    method of the ``GuzzleHttp\Stream\Stream`` class via
-    ``GuzzleHttp\Stream\Stream::factory()``. This static factory method has the
-    same method signature as the ``create()`` function. Actually, the static
-    factory method is just a convenience method for the ``create()`` function.
-
-Metadata Streams
-================
-
-Guzzle streams that implement ``GuzzleHttp\Stream\MetadataStreamInterface``
-expose stream metadata through the ``getMetadata()`` method. This method
-provides the data you would retrieve when calling PHP's
-`stream_get_meta_data() function <http://php.net/manual/en/function.stream-get-meta-data.php>`_.
+Guzzle streams expose stream metadata through the ``getMetadata()`` method.
+This method provides the data you would retrieve when calling PHP's
+`stream_get_meta_data() function <http://php.net/manual/en/function.stream-get-meta-data.php>`_,
+and can optionally expose other custom data.
 
 .. code-block:: php
 
-    use GuzzleHttp\Stream;
+    use GuzzleHttp\Stream\Stream;
 
     $resource = fopen('/path/to/file', 'r');
-    $stream = Stream\create($resource);
+    $stream = Stream::factory($resource);
     echo $stream->getMetadata('uri');
     // /path/to/file
     var_export($stream->isReadable());
@@ -83,12 +75,6 @@ provides the data you would retrieve when calling PHP's
     var_export($stream->isSeekable());
     // true
 
-.. note::
-
-    Streams created using ``GuzzleHttp\Stream\create()`` and
-    ``GuzzleHttp\Stream\Stream::factory()`` all implement
-    ``GuzzleHttp\Stream\MetadataStreamInterface``.
-
 Stream Decorators
 =================
 
@@ -108,10 +94,10 @@ then on disk.
 
 .. code-block:: php
 
-    use GuzzleHttp\Stream;
+    use GuzzleHttp\Stream\Stream;
     use GuzzleHttp\Stream\CachingStream;
 
-    $original = Stream\create(fopen('http://www.google.com', 'r'));
+    $original = Stream::factory(fopen('http://www.google.com', 'r'));
     $stream = new CachingStream($original);
 
     $stream->read(1024);
@@ -131,10 +117,10 @@ chunks (e.g. Amazon S3's multipart upload API).
 
 .. code-block:: php
 
-    use GuzzleHttp\Stream;
+    use GuzzleHttp\Stream\Stream;
     use GuzzleHttp\Stream\LimitStream;
 
-    $original = Stream\create(fopen('/tmp/test.txt', 'r+'));
+    $original = Stream::factory(fopen('/tmp/test.txt', 'r+'));
     echo $original->getSize();
     // >>> 1048576
 
@@ -152,10 +138,10 @@ NoSeekStream wraps a stream and does not allow seeking.
 
 .. code-block:: php
 
-    use GuzzleHttp\Stream;
+    use GuzzleHttp\Stream\Stream;
     use GuzzleHttp\Stream\LimitStream;
 
-    $original = Stream\create('foo');
+    $original = Stream::factory('foo');
     $noSeek = new NoSeekStream($original);
 
     echo $noSeek->read(3);
@@ -183,7 +169,7 @@ byte is read from a stream. This could be implemented by overriding the
 
     use GuzzleHttp\Stream\StreamDecoratorTrait;
 
-    class EofCallbackStream implements StreamInterface, MetadataStreamInterface
+    class EofCallbackStream implements StreamInterface
     {
         use StreamDecoratorTrait;
 
@@ -212,9 +198,9 @@ This decorator could be added to any existing stream and used like so:
 
 .. code-block:: php
 
-    use GuzzleHttp\Stream;
+    use GuzzleHttp\Stream\Stream;
 
-    $original = Stream\create('foo');
+    $original = Stream::factory('foo');
     $eofStream = new EofCallbackStream($original, function () {
         echo 'EOF!';
     });
diff --git a/core/vendor/guzzlehttp/guzzle/docs/testing.rst b/core/vendor/guzzlehttp/guzzle/docs/testing.rst
index 55015ab5b30b93c1b48287470d8a3d78ebacd53d..e7098be45551553f4319c1a2f13d6a76a4921ee9 100644
--- a/core/vendor/guzzlehttp/guzzle/docs/testing.rst
+++ b/core/vendor/guzzlehttp/guzzle/docs/testing.rst
@@ -6,7 +6,7 @@ Guzzle provides several tools that will enable you to easily mock the HTTP
 layer without needing to send requests over the internet.
 
 * Mock subscriber
-* Mock adapter
+* Mock handler
 * Node.js web server for integration testing
 
 Mock Subscriber
@@ -134,32 +134,16 @@ Mock Adapter
 ============
 
 In addition to using the Mock subscriber, you can use the
-``GuzzleHttp\Adapter\MockAdapter`` as the adapter of a client to return the
+``GuzzleHttp\Ring\Client\MockAdapter`` as the handler of a client to return the
 same response over and over or return the result of a callable function.
 
-.. code-block:: php
-
-    use GuzzleHttp\Client;
-    use GuzzleHttp\Adapter\MockAdapter;
-    use GuzzleHttp\Adapter\TransactionInterface;
-    use GuzzleHttp\Message\Response;
-
-    $mockAdapter = new MockAdapter(function (TransactionInterface $trans) {
-        // You have access to the request
-        $request = $trans->getRequest();
-        // Return a response
-        return new Response(200);
-    });
-
-    $client = new Client(['adapter' => $mockAdapter]);
-
 Test Web Server
 ===============
 
-Using mock responses is usually enough when testing a web service client. When
-implementing custom :doc:`HTTP adapters <adapters>`, you'll need to send actual
-HTTP requests in order to sufficiently test the adapter. However, a best
-practice is to contact a local web server rather than a server over the
+Using mock responses is almost always enough when testing a web service client.
+When implementing custom :doc:`HTTP handlers <handlers>`, you'll need to send
+actual HTTP requests in order to sufficiently test the handler. However, a
+best practice is to contact a local web server rather than a server over the
 internet.
 
 - Tests are more reliable
@@ -169,6 +153,22 @@ internet.
 Using the test server
 ---------------------
 
+.. warning::
+
+    The following functionality is provided to help developers of Guzzle
+    develop HTTP handlers. There is no promise of backwards compatibility
+    when it comes to the node.js test server or the ``GuzzleHttp\Tests\Server``
+    class. If you are using the test server or ``Server`` class outside of
+    guzzlehttp/guzzle, then you will need to configure autoloading and
+    ensure the web server is started manually.
+
+.. hint::
+
+    You almost never need to use this test web server. You should only ever
+    consider using it when developing HTTP handlers. The test web server
+    is not necessary for mocking requests. For that, please use the
+    Mock subcribers and History subscriber.
+
 Guzzle ships with a node.js test server that receives requests and returns
 responses from a queue. The test server exposes a simple API that is used to
 enqueue responses and inspect the requests that it has received.
diff --git a/core/vendor/guzzlehttp/guzzle/phpunit.xml.dist b/core/vendor/guzzlehttp/guzzle/phpunit.xml.dist
index d75d0ba878b148eb4ea4a9691bd10de79d4bca14..500cd53a0ff1ed22ee88658e4fbcec6ea4e9040f 100644
--- a/core/vendor/guzzlehttp/guzzle/phpunit.xml.dist
+++ b/core/vendor/guzzlehttp/guzzle/phpunit.xml.dist
@@ -9,6 +9,9 @@
   <filter>
     <whitelist>
       <directory suffix=".php">src</directory>
+      <exclude>
+        <directory suffix="Interface.php">src/</directory>
+      </exclude>
     </whitelist>
   </filter>
 </phpunit>
diff --git a/core/vendor/guzzlehttp/guzzle/src/Adapter/AdapterInterface.php b/core/vendor/guzzlehttp/guzzle/src/Adapter/AdapterInterface.php
deleted file mode 100644
index f3c035e2b46683f47f0278c5e51530b3aa311404..0000000000000000000000000000000000000000
--- a/core/vendor/guzzlehttp/guzzle/src/Adapter/AdapterInterface.php
+++ /dev/null
@@ -1,23 +0,0 @@
-<?php
-
-namespace GuzzleHttp\Adapter;
-
-use GuzzleHttp\Message\ResponseInterface;
-
-/**
- * Adapter interface used to transfer HTTP requests.
- *
- * @link http://docs.guzzlephp.org/en/guzzle4/adapters.html for a full
- *     explanation of adapters and their responsibilities.
- */
-interface AdapterInterface
-{
-    /**
-     * Transfers an HTTP request and populates a response
-     *
-     * @param TransactionInterface $transaction Transaction abject to populate
-     *
-     * @return ResponseInterface
-     */
-    public function send(TransactionInterface $transaction);
-}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Adapter/Curl/BatchContext.php b/core/vendor/guzzlehttp/guzzle/src/Adapter/Curl/BatchContext.php
deleted file mode 100644
index 2fccbb2a126d4d8678e45d5a78905ed2e1978b57..0000000000000000000000000000000000000000
--- a/core/vendor/guzzlehttp/guzzle/src/Adapter/Curl/BatchContext.php
+++ /dev/null
@@ -1,167 +0,0 @@
-<?php
-
-namespace GuzzleHttp\Adapter\Curl;
-
-use GuzzleHttp\Adapter\TransactionInterface;
-use GuzzleHttp\Exception\AdapterException;
-
-/**
- * Provides context for a Curl transaction, including active handles,
- * pending transactions, and whether or not this is a batch or single
- * transaction.
- */
-class BatchContext
-{
-    /** @var resource Curl multi resource */
-    private $multi;
-
-    /** @var \SplObjectStorage Map of transactions to curl resources */
-    private $handles;
-
-    /** @var \Iterator Yields pending transactions */
-    private $pending;
-
-    /** @var bool Whether or not to throw transactions */
-    private $throwsExceptions;
-
-    /**
-     * @param resource  $multiHandle      Initialized curl_multi resource
-     * @param bool      $throwsExceptions Whether or not exceptions are thrown
-     * @param \Iterator $pending          Iterator yielding pending transactions
-     */
-    public function __construct(
-        $multiHandle,
-        $throwsExceptions,
-        \Iterator $pending = null
-    ) {
-        $this->multi = $multiHandle;
-        $this->handles = new \SplObjectStorage();
-        $this->throwsExceptions = $throwsExceptions;
-        $this->pending = $pending;
-    }
-
-    /**
-     * Find a transaction for a given curl handle
-     *
-     * @param resource $handle Curl handle
-     *
-     * @return TransactionInterface
-     * @throws AdapterException if a transaction is not found
-     */
-    public function findTransaction($handle)
-    {
-        foreach ($this->handles as $transaction) {
-            if ($this->handles[$transaction] === $handle) {
-                return $transaction;
-            }
-        }
-
-        throw new AdapterException('No curl handle was found');
-    }
-
-    /**
-     * Returns true if there are any active requests.
-     *
-     * @return bool
-     */
-    public function isActive()
-    {
-        return count($this->handles) > 0;
-    }
-
-    /**
-     * Returns true if there are any remaining pending transactions
-     *
-     * @return bool
-     */
-    public function hasPending()
-    {
-        return $this->pending && $this->pending->valid();
-    }
-
-    /**
-     * Pop the next transaction from the transaction queue
-     *
-     * @return TransactionInterface|null
-     */
-    public function nextPending()
-    {
-        if (!$this->hasPending()) {
-            return null;
-        }
-
-        $current = $this->pending->current();
-        $this->pending->next();
-
-        return $current;
-    }
-
-    /**
-     * Checks if the batch is to throw exceptions on error
-     *
-     * @return bool
-     */
-    public function throwsExceptions()
-    {
-        return $this->throwsExceptions;
-    }
-
-    /**
-     * Get the curl_multi handle
-     *
-     * @return resource
-     */
-    public function getMultiHandle()
-    {
-        return $this->multi;
-    }
-
-    /**
-     * Add a transaction to the multi handle
-     *
-     * @param TransactionInterface $transaction Transaction to add
-     * @param resource             $handle      Resource to use with the handle
-     *
-     * @throws AdapterException If the handle is already registered
-     */
-    public function addTransaction(TransactionInterface $transaction, $handle)
-    {
-        if (isset($this->handles[$transaction])) {
-            throw new AdapterException('Transaction already registered');
-        }
-
-        $code = curl_multi_add_handle($this->multi, $handle);
-        if ($code != CURLM_OK) {
-            MultiAdapter::throwMultiError($code);
-        }
-
-        $this->handles[$transaction] = $handle;
-    }
-
-    /**
-     * Remove a transaction and associated handle from the context
-     *
-     * @param TransactionInterface $transaction Transaction to remove
-     *
-     * @return array Returns the curl_getinfo array
-     * @throws AdapterException if the transaction is not found
-     */
-    public function removeTransaction(TransactionInterface $transaction)
-    {
-        if (!isset($this->handles[$transaction])) {
-            throw new AdapterException('Transaction not registered');
-        }
-
-        $handle = $this->handles[$transaction];
-        $this->handles->detach($transaction);
-        $info = curl_getinfo($handle);
-        $code = curl_multi_remove_handle($this->multi, $handle);
-        curl_close($handle);
-
-        if ($code !== CURLM_OK) {
-            MultiAdapter::throwMultiError($code);
-        }
-
-        return $info;
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Adapter/Curl/CurlAdapter.php b/core/vendor/guzzlehttp/guzzle/src/Adapter/Curl/CurlAdapter.php
deleted file mode 100644
index 0f12035317157ba60d1f158a981a5c45b671f51d..0000000000000000000000000000000000000000
--- a/core/vendor/guzzlehttp/guzzle/src/Adapter/Curl/CurlAdapter.php
+++ /dev/null
@@ -1,142 +0,0 @@
-<?php
-
-namespace GuzzleHttp\Adapter\Curl;
-
-use GuzzleHttp\Adapter\AdapterInterface;
-use GuzzleHttp\Adapter\TransactionInterface;
-use GuzzleHttp\Event\RequestEvents;
-use GuzzleHttp\Exception\AdapterException;
-use GuzzleHttp\Message\MessageFactoryInterface;
-
-/**
- * HTTP adapter that uses cURL easy handles as a transport layer.
- *
- * Requires PHP 5.5+
- *
- * When using the CurlAdapter, custom curl options can be specified as an
- * associative array of curl option constants mapping to values in the
- * **curl** key of a request's configuration options.
- */
-class CurlAdapter implements AdapterInterface
-{
-    /** @var CurlFactory */
-    private $curlFactory;
-
-    /** @var MessageFactoryInterface */
-    private $messageFactory;
-
-    /** @var array Array of curl easy handles */
-    private $handles = [];
-
-    /** @var array Array of owned curl easy handles */
-    private $ownedHandles = [];
-
-    /** @var int Total number of idle handles to keep in cache */
-    private $maxHandles;
-
-    /**
-     * Accepts an associative array of options:
-     *
-     * - handle_factory: Optional callable factory used to create cURL handles.
-     *   The callable is invoked with the following arguments:
-     *   TransactionInterface, MessageFactoryInterface, and an optional cURL
-     *   handle to modify. The factory method must then return a cURL resource.
-     * - max_handles: Maximum number of idle handles (defaults to 5).
-     *
-     * @param MessageFactoryInterface $messageFactory
-     * @param array $options Array of options to use with the adapter
-     */
-    public function __construct(
-        MessageFactoryInterface $messageFactory,
-        array $options = []
-    ) {
-        $this->handles = $this->ownedHandles = [];
-        $this->messageFactory = $messageFactory;
-        $this->curlFactory = isset($options['handle_factory'])
-            ? $options['handle_factory']
-            : new CurlFactory();
-        $this->maxHandles = isset($options['max_handles'])
-            ? $options['max_handles']
-            : 5;
-    }
-
-    public function __destruct()
-    {
-        foreach ($this->handles as $handle) {
-            if (is_resource($handle)) {
-                curl_close($handle);
-            }
-        }
-    }
-
-    public function send(TransactionInterface $transaction)
-    {
-        RequestEvents::emitBefore($transaction);
-        if ($response = $transaction->getResponse()) {
-            return $response;
-        }
-
-        $factory = $this->curlFactory;
-        $handle = $factory(
-            $transaction,
-            $this->messageFactory,
-            $this->checkoutEasyHandle()
-        );
-
-        curl_exec($handle);
-        $info = curl_getinfo($handle);
-        $info['curl_result'] = curl_errno($handle);
-
-        if ($info['curl_result']) {
-            $this->handleError($transaction, $info, $handle);
-        } else {
-            $this->releaseEasyHandle($handle);
-            RequestEvents::emitComplete($transaction, $info);
-        }
-
-        return $transaction->getResponse();
-    }
-
-    private function handleError(
-        TransactionInterface $transaction,
-        $info,
-        $handle
-    ) {
-        $error = curl_error($handle);
-        $this->releaseEasyHandle($handle);
-        RequestEvents::emitError(
-            $transaction,
-            new AdapterException("cURL error {$info['curl_result']}: {$error}"),
-            $info
-        );
-    }
-
-    private function checkoutEasyHandle()
-    {
-        // Find an unused handle in the cache
-        if (false !== ($key = array_search(false, $this->ownedHandles, true))) {
-            $this->ownedHandles[$key] = true;
-            return $this->handles[$key];
-        }
-
-        // Add a new handle
-        $handle = curl_init();
-        $id = (int) $handle;
-        $this->handles[$id] = $handle;
-        $this->ownedHandles[$id] = true;
-
-        return $handle;
-    }
-
-    private function releaseEasyHandle($handle)
-    {
-        $id = (int) $handle;
-        if (count($this->ownedHandles) > $this->maxHandles) {
-            curl_close($this->handles[$id]);
-            unset($this->handles[$id], $this->ownedHandles[$id]);
-        } else {
-            curl_reset($handle);
-            $this->ownedHandles[$id] = false;
-        }
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Adapter/Curl/CurlFactory.php b/core/vendor/guzzlehttp/guzzle/src/Adapter/Curl/CurlFactory.php
deleted file mode 100644
index 5ae85941824165b753f47deb678c00b79f259567..0000000000000000000000000000000000000000
--- a/core/vendor/guzzlehttp/guzzle/src/Adapter/Curl/CurlFactory.php
+++ /dev/null
@@ -1,356 +0,0 @@
-<?php
-
-namespace GuzzleHttp\Adapter\Curl;
-
-use GuzzleHttp\Adapter\TransactionInterface;
-use GuzzleHttp\Message\MessageFactoryInterface;
-use GuzzleHttp\Message\RequestInterface;
-use GuzzleHttp\Stream;
-use GuzzleHttp\Exception\AdapterException;
-
-/**
- * Creates curl resources from a request and response object
- */
-class CurlFactory
-{
-    /**
-     * Creates a cURL handle based on a transaction.
-     *
-     * @param TransactionInterface $transaction Holds a request and response
-     * @param MessageFactoryInterface $messageFactory Used to create responses
-     * @param null|resource $handle Optionally provide a curl handle to modify
-     *
-     * @return resource Returns a prepared cURL handle
-     * @throws AdapterException when an option cannot be applied
-     */
-    public function __invoke(
-        TransactionInterface $transaction,
-        MessageFactoryInterface $messageFactory,
-        $handle = null
-    ) {
-        $request = $transaction->getRequest();
-        $mediator = new RequestMediator($transaction, $messageFactory);
-        $options = $this->getDefaultOptions($request, $mediator);
-        $this->applyMethod($request, $options);
-        $this->applyTransferOptions($request, $mediator, $options);
-        $this->applyHeaders($request, $options);
-        unset($options['_headers']);
-
-        // Add adapter options from the request's configuration options
-        if ($config = $request->getConfig()['curl']) {
-            $options = $this->applyCustomCurlOptions($config, $options);
-        }
-
-        if (!$handle) {
-            $handle = curl_init();
-        }
-
-        curl_setopt_array($handle, $options);
-
-        return $handle;
-    }
-
-    protected function getDefaultOptions(
-        RequestInterface $request,
-        RequestMediator $mediator
-    ) {
-        $url = $request->getUrl();
-
-        // Strip fragment from URL. See:
-        // https://github.com/guzzle/guzzle/issues/453
-        if (($pos = strpos($url, '#')) !== false) {
-            $url = substr($url, 0, $pos);
-        }
-
-        $config = $request->getConfig();
-        $options = array(
-            CURLOPT_URL            => $url,
-            CURLOPT_CONNECTTIMEOUT => $config['connect_timeout'] ?: 150,
-            CURLOPT_RETURNTRANSFER => false,
-            CURLOPT_HEADER         => false,
-            CURLOPT_WRITEFUNCTION  => array($mediator, 'writeResponseBody'),
-            CURLOPT_HEADERFUNCTION => array($mediator, 'receiveResponseHeader'),
-            CURLOPT_READFUNCTION   => array($mediator, 'readRequestBody'),
-            CURLOPT_HTTP_VERSION   => $request->getProtocolVersion() === '1.0'
-                ? CURL_HTTP_VERSION_1_0 : CURL_HTTP_VERSION_1_1,
-            CURLOPT_SSL_VERIFYPEER => 1,
-            CURLOPT_SSL_VERIFYHOST => 2,
-            '_headers'             => $request->getHeaders()
-        );
-
-        if (defined('CURLOPT_PROTOCOLS')) {
-            // Allow only HTTP and HTTPS protocols
-            $options[CURLOPT_PROTOCOLS] = CURLPROTO_HTTP | CURLPROTO_HTTPS;
-        }
-
-        // Add CURLOPT_ENCODING if Accept-Encoding header is provided
-        if ($request->hasHeader('Accept-Encoding')) {
-            $options[CURLOPT_ENCODING] = $request->getHeader('Accept-Encoding');
-            // Let cURL set the Accept-Encoding header. Without this change
-            // curl could add a duplicate value.
-            $this->removeHeader('Accept-Encoding', $options);
-        }
-
-        // cURL sometimes adds a content-type by default. Prevent this.
-        if (!$request->hasHeader('Content-Type')) {
-            $options[CURLOPT_HTTPHEADER][] = 'Content-Type:';
-        }
-
-        return $options;
-    }
-
-    private function applyMethod(RequestInterface $request, array &$options)
-    {
-        $method = $request->getMethod();
-        if ($method == 'HEAD') {
-            $options[CURLOPT_NOBODY] = true;
-            unset($options[CURLOPT_WRITEFUNCTION], $options[CURLOPT_READFUNCTION]);
-        } else {
-            $options[CURLOPT_CUSTOMREQUEST] = $method;
-            if (!$request->getBody()) {
-                unset($options[CURLOPT_READFUNCTION]);
-            } else {
-                $this->applyBody($request, $options);
-            }
-        }
-    }
-
-    private function applyBody(RequestInterface $request, array &$options)
-    {
-        if ($request->hasHeader('Content-Length')) {
-            $size = (int) $request->getHeader('Content-Length');
-        } else {
-            $size = null;
-        }
-
-        $request->getBody()->seek(0);
-
-        // You can send the body as a string using curl's CURLOPT_POSTFIELDS
-        if (($size !== null && $size < 32768) ||
-            isset($request->getConfig()['curl']['body_as_string'])
-        ) {
-            $options[CURLOPT_POSTFIELDS] = $request->getBody()->getContents();
-            // Don't duplicate the Content-Length header
-            $this->removeHeader('Content-Length', $options);
-            $this->removeHeader('Transfer-Encoding', $options);
-        } else {
-            $options[CURLOPT_UPLOAD] = true;
-            // Let cURL handle setting the Content-Length header
-            if ($size !== null) {
-                $options[CURLOPT_INFILESIZE] = $size;
-                $this->removeHeader('Content-Length', $options);
-            }
-        }
-
-        // If the Expect header is not present, prevent curl from adding it
-        if (!$request->hasHeader('Expect')) {
-            $options[CURLOPT_HTTPHEADER][] = 'Expect:';
-        }
-    }
-
-    private function applyHeaders(RequestInterface $request, array &$options)
-    {
-        foreach ($options['_headers'] as $name => $values) {
-            $options[CURLOPT_HTTPHEADER][] = $name . ': ' . implode(', ', $values);
-        }
-
-        // Remove the Expect header if one was not set
-        if (!$request->hasHeader('Accept')) {
-            $options[CURLOPT_HTTPHEADER][] = 'Accept:';
-        }
-    }
-
-    private function applyTransferOptions(
-        RequestInterface $request,
-        RequestMediator $mediator,
-        array &$options
-    ) {
-        static $methods;
-        if (!$methods) {
-            $methods = array_flip(get_class_methods(__CLASS__));
-        }
-
-        foreach ($request->getConfig()->toArray() as $key => $value) {
-            $method = "add_{$key}";
-            if (isset($methods[$method])) {
-                $this->{$method}($request, $mediator, $options, $value);
-            }
-        }
-    }
-
-    private function add_debug(
-        RequestInterface $request,
-        RequestMediator $mediator,
-        &$options,
-        $value
-    ) {
-        if ($value) {
-            $options[CURLOPT_STDERR] = is_resource($value) ? $value : STDOUT;
-            $options[CURLOPT_VERBOSE] = true;
-        }
-    }
-
-    private function add_proxy(
-        RequestInterface $request,
-        RequestMediator $mediator,
-        &$options,
-        $value
-    ) {
-        if (!is_array($value)) {
-            $options[CURLOPT_PROXY] = $value;
-        } else {
-            $scheme = $request->getScheme();
-            if (isset($value[$scheme])) {
-                $options[CURLOPT_PROXY] = $value[$scheme];
-            }
-        }
-    }
-
-    private function add_timeout(
-        RequestInterface $request,
-        RequestMediator $mediator,
-        &$options,
-        $value
-    ) {
-        $options[CURLOPT_TIMEOUT_MS] = $value * 1000;
-    }
-
-    private function add_connect_timeout(
-        RequestInterface $request,
-        RequestMediator $mediator,
-        &$options,
-        $value
-    ) {
-        $options[CURLOPT_CONNECTTIMEOUT_MS] = $value * 1000;
-    }
-
-    private function add_verify(
-        RequestInterface $request,
-        RequestMediator $mediator,
-        &$options,
-        $value
-    ) {
-        if ($value === false) {
-            unset($options[CURLOPT_CAINFO]);
-            $options[CURLOPT_SSL_VERIFYHOST] = 0;
-            $options[CURLOPT_SSL_VERIFYPEER] = false;
-        } elseif ($value === true || is_string($value)) {
-            $options[CURLOPT_SSL_VERIFYHOST] = 2;
-            $options[CURLOPT_SSL_VERIFYPEER] = true;
-            if ($value !== true) {
-                if (!file_exists($value)) {
-                    throw new AdapterException('SSL certificate authority file'
-                        . " not found: {$value}");
-                }
-                $options[CURLOPT_CAINFO] = $value;
-            }
-        }
-    }
-
-    private function add_cert(
-        RequestInterface $request,
-        RequestMediator $mediator,
-        &$options,
-        $value
-    ) {
-        if (!file_exists($value)) {
-            throw new AdapterException("SSL certificate not found: {$value}");
-        }
-
-        $options[CURLOPT_SSLCERT] = $value;
-    }
-
-    private function add_ssl_key(
-        RequestInterface $request,
-        RequestMediator $mediator,
-        &$options,
-        $value
-    ) {
-        if (is_array($value)) {
-            $options[CURLOPT_SSLKEYPASSWD] = $value[1];
-            $value = $value[0];
-        }
-
-        if (!file_exists($value)) {
-            throw new AdapterException("SSL private key not found: {$value}");
-        }
-
-        $options[CURLOPT_SSLKEY] = $value;
-    }
-
-    private function add_stream(
-        RequestInterface $request,
-        RequestMediator $mediator,
-        &$options,
-        $value
-    ) {
-        if ($value === false) {
-            return;
-        }
-
-        throw new AdapterException('cURL adapters do not support the "stream"'
-            . ' request option. This error is typically encountered when trying'
-            . ' to send requests with the "stream" option set to true in '
-            . ' parallel. You will either need to send these one at a time or'
-            . ' implement a custom ParallelAdapterInterface that supports'
-            . ' sending these types of requests in parallel. This error can'
-            . ' also occur if the StreamAdapter is not available on your'
-            . ' system (e.g., allow_url_fopen is disabled in your php.ini).');
-    }
-
-    private function add_save_to(
-        RequestInterface $request,
-        RequestMediator $mediator,
-        &$options,
-        $value
-    ) {
-        $mediator->setResponseBody(is_string($value)
-            ? new Stream\LazyOpenStream($value, 'w')
-            : Stream\create($value));
-    }
-
-    /**
-     * Takes an array of curl options specified in the 'curl' option of a
-     * request's configuration array and maps them to CURLOPT_* options.
-     *
-     * This method is only called when a  request has a 'curl' config setting.
-     * Array key strings that start with CURL that have a matching constant
-     * value will be automatically converted to the matching constant.
-     *
-     * @param array $config  Configuration array of custom curl option
-     * @param array $options Array of existing curl options
-     *
-     * @return array Returns a new array of curl options
-     */
-    private function applyCustomCurlOptions(array $config, array $options)
-    {
-        unset($config['body_as_string']);
-        $curlOptions = [];
-
-        // Map curl constant strings to defined values
-        foreach ($config as $key => $value) {
-            if (defined($key) && substr($key, 0, 4) === 'CURL') {
-                $key = constant($key);
-            }
-            $curlOptions[$key] = $value;
-        }
-
-        return $curlOptions + $options;
-    }
-
-    /**
-     * Remove a header from the options array
-     *
-     * @param string $name    Case-insensitive header to remove
-     * @param array  $options Array of options to modify
-     */
-    private function removeHeader($name, array &$options)
-    {
-        foreach (array_keys($options['_headers']) as $key) {
-            if (!strcasecmp($key, $name)) {
-                unset($options['_headers'][$key]);
-                return;
-            }
-        }
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Adapter/Curl/MultiAdapter.php b/core/vendor/guzzlehttp/guzzle/src/Adapter/Curl/MultiAdapter.php
deleted file mode 100644
index 9b2da4db2ddd74835aedc55f8ef1c9e0f89eb137..0000000000000000000000000000000000000000
--- a/core/vendor/guzzlehttp/guzzle/src/Adapter/Curl/MultiAdapter.php
+++ /dev/null
@@ -1,362 +0,0 @@
-<?php
-
-namespace GuzzleHttp\Adapter\Curl;
-
-use GuzzleHttp\Adapter\AdapterInterface;
-use GuzzleHttp\Adapter\ParallelAdapterInterface;
-use GuzzleHttp\Adapter\TransactionInterface;
-use GuzzleHttp\Event\RequestEvents;
-use GuzzleHttp\Exception\AdapterException;
-use GuzzleHttp\Exception\RequestException;
-use GuzzleHttp\Message\MessageFactoryInterface;
-
-/**
- * HTTP adapter that uses cURL multi as a transport layer
- *
- * When using the CurlAdapter, custom curl options can be specified as an
- * associative array of curl option constants mapping to values in the
- * **curl** key of a request's configuration options.
- *
- * In addition to being able to supply configuration options via the curl
- * request config, you can also specify the select_timeout variable using the
- * `GUZZLE_CURL_SELECT_TIMEOUT` environment variable.
- */
-class MultiAdapter implements AdapterInterface, ParallelAdapterInterface
-{
-    const ERROR_STR = 'See http://curl.haxx.se/libcurl/c/libcurl-errors.html for an explanation of cURL errors';
-    const ENV_SELECT_TIMEOUT = 'GUZZLE_CURL_SELECT_TIMEOUT';
-
-    /** @var CurlFactory */
-    private $curlFactory;
-
-    /** @var MessageFactoryInterface */
-    private $messageFactory;
-
-    /** @var array Array of curl multi handles */
-    private $multiHandles = [];
-
-    /** @var array Array of curl multi handles */
-    private $multiOwned = [];
-
-    /** @var double */
-    private $selectTimeout;
-
-    /**
-     * Accepts an associative array of options:
-     *
-     * - handle_factory: Optional callable factory used to create cURL handles.
-     *   The callable is invoked with the following arguments:
-     *   TransactionInterface, MessageFactoryInterface, and an optional cURL
-     *   handle to modify. The factory method must then return a cURL resource.
-     * - select_timeout: Specify a float in seconds to use for a
-     *   curl_multi_select timeout.
-     *
-     * @param MessageFactoryInterface $messageFactory
-     * @param array $options Array of options to use with the adapter:
-     */
-    public function __construct(
-        MessageFactoryInterface $messageFactory,
-        array $options = []
-    ) {
-        $this->messageFactory = $messageFactory;
-        $this->curlFactory = isset($options['handle_factory'])
-            ? $options['handle_factory']
-            : new CurlFactory();
-
-        if (isset($options['select_timeout'])) {
-            $this->selectTimeout = $options['select_timeout'];
-        } elseif (isset($_SERVER[self::ENV_SELECT_TIMEOUT])) {
-            $this->selectTimeout = $_SERVER[self::ENV_SELECT_TIMEOUT];
-        } else {
-            $this->selectTimeout = 1;
-        }
-    }
-
-    public function __destruct()
-    {
-        foreach ($this->multiHandles as $handle) {
-            if (is_resource($handle)) {
-                curl_multi_close($handle);
-            }
-        }
-    }
-
-    /**
-     * Throw an exception for a cURL multi response
-     *
-     * @param int $code Curl response code
-     * @throws AdapterException
-     */
-    public static function throwMultiError($code)
-    {
-        $buffer = function_exists('curl_multi_strerror')
-            ? curl_multi_strerror($code)
-            : self::ERROR_STR;
-
-        throw new AdapterException(sprintf('cURL error %s: %s', $code, $buffer));
-    }
-
-    public function send(TransactionInterface $transaction)
-    {
-        $context = new BatchContext($this->checkoutMultiHandle(), true);
-        $this->addHandle($transaction, $context);
-        $this->perform($context);
-
-        return $transaction->getResponse();
-    }
-
-    public function sendAll(\Iterator $transactions, $parallel)
-    {
-        $context = new BatchContext(
-            $this->checkoutMultiHandle(),
-            false,
-            $transactions
-        );
-
-        foreach (new \LimitIterator($transactions, 0, $parallel) as $trans) {
-            $this->addHandle($trans, $context);
-        }
-
-        $this->perform($context);
-    }
-
-    private function perform(BatchContext $context)
-    {
-        // The first curl_multi_select often times out no matter what, but is
-        // usually required for fast transfers.
-        $active = false;
-        $multi = $context->getMultiHandle();
-
-        do {
-            do {
-                $mrc = curl_multi_exec($multi, $active);
-            } while ($mrc === CURLM_CALL_MULTI_PERFORM);
-
-            if ($mrc != CURLM_OK) {
-                self::throwMultiError($mrc);
-            }
-
-            $this->processMessages($context);
-
-            if ($active &&
-                curl_multi_select($multi, $this->selectTimeout) === -1
-            ) {
-                // Perform a usleep if a select returns -1.
-                // See: https://bugs.php.net/bug.php?id=61141
-                usleep(250);
-            }
-
-        } while ($context->isActive() || $active);
-
-        $this->releaseMultiHandle($multi);
-    }
-
-    private function processMessages(BatchContext $context)
-    {
-        $multi = $context->getMultiHandle();
-
-        while ($done = curl_multi_info_read($multi)) {
-            $transaction = $context->findTransaction($done['handle']);
-            $this->processResponse($transaction, $done, $context);
-            // Add the next transaction if there are more in the queue
-            if ($next = $context->nextPending()) {
-                $this->addHandle($next, $context);
-            }
-        }
-    }
-
-    private function processResponse(
-        TransactionInterface $transaction,
-        array $curl,
-        BatchContext $context
-    ) {
-        $info = $context->removeTransaction($transaction);
-
-        try {
-            if (!$this->isCurlException($transaction, $curl, $context, $info) &&
-                $this->validateResponseWasSet($transaction, $context)
-            ) {
-                RequestEvents::emitComplete($transaction, $info);
-            }
-        } catch (RequestException $e) {
-            $this->throwException($e, $context);
-        }
-    }
-
-    private function addHandle(
-        TransactionInterface $transaction,
-        BatchContext $context
-    ) {
-        try {
-            RequestEvents::emitBefore($transaction);
-            // Only transfer if the request was not intercepted
-            if (!$transaction->getResponse()) {
-                $factory = $this->curlFactory;
-                $context->addTransaction(
-                    $transaction,
-                    $factory($transaction, $this->messageFactory)
-                );
-            }
-        } catch (RequestException $e) {
-            $this->throwException($e, $context);
-        }
-    }
-
-    private function isCurlException(
-        TransactionInterface $transaction,
-        array $curl,
-        BatchContext $context,
-        array $info
-    ) {
-        if (CURLM_OK == $curl['result'] ||
-            CURLM_CALL_MULTI_PERFORM == $curl['result']
-        ) {
-            return false;
-        }
-
-        $request = $transaction->getRequest();
-        try {
-            // Send curl stats along if they are available
-            $stats = ['curl_result' => $curl['result']] + $info;
-            RequestEvents::emitError(
-                $transaction,
-                new RequestException(
-                    sprintf(
-                        '[curl] (#%s) %s [url] %s',
-                        $curl['result'],
-                        function_exists('curl_strerror')
-                            ? curl_strerror($curl['result'])
-                            : self::ERROR_STR,
-                        $request->getUrl()
-                    ),
-                    $request
-                ),
-                $stats
-            );
-        } catch (RequestException $e) {
-            $this->throwException($e, $context);
-        }
-
-        return true;
-    }
-
-    private function throwException(RequestException $e, BatchContext $context)
-    {
-        if ($context->throwsExceptions()) {
-            $this->releaseMultiHandle($context->getMultiHandle());
-            throw $e;
-        }
-    }
-
-    /**
-     * Returns a curl_multi handle from the cache or creates a new one
-     *
-     * @return resource
-     */
-    private function checkoutMultiHandle()
-    {
-        // Find an unused handle in the cache
-        $key = array_search(false, $this->multiOwned, true);
-        if (false !== $key) {
-            $this->multiOwned[$key] = true;
-            return $this->multiHandles[$key];
-        }
-
-        // Add a new handle
-        $handle = curl_multi_init();
-        $id = (int) $handle;
-        $this->multiHandles[$id] = $handle;
-        $this->multiOwned[$id] = true;
-
-        return $handle;
-    }
-
-    /**
-     * Releases a curl_multi handle back into the cache and removes excess cache
-     *
-     * @param resource $handle Curl multi handle to remove
-     */
-    private function releaseMultiHandle($handle)
-    {
-        $id = (int) $handle;
-
-        if (count($this->multiHandles) <= 3) {
-            $this->multiOwned[$id] = false;
-        } else {
-            // Prune excessive handles
-            curl_multi_close($this->multiHandles[$id]);
-            unset($this->multiHandles[$id], $this->multiOwned[$id]);
-        }
-    }
-
-    /**
-     * This function ensures that a response was set on a transaction. If one
-     * was not set, then the request is retried if possible. This error
-     * typically means you are sending a payload, curl encountered a
-     * "Connection died, retrying a fresh connect" error, tried to rewind the
-     * stream, and then encountered a "necessary data rewind wasn't possible"
-     * error, causing the request to be sent through curl_multi_info_read()
-     * without an error status.
-     *
-     * @param TransactionInterface $transaction
-     * @param BatchContext         $context
-     *
-     * @return bool Returns true if it's OK, and false if it failed.
-     * @throws \GuzzleHttp\Exception\RequestException If it failed and cannot
-     *                                                recover.
-     */
-    private function validateResponseWasSet(
-        TransactionInterface $transaction,
-        BatchContext $context
-    ) {
-        if ($transaction->getResponse()) {
-            return true;
-        }
-
-        $body = $transaction->getRequest()->getBody();
-
-        if (!$body) {
-            // This is weird and should probably never happen.
-            RequestEvents::emitError(
-                $transaction,
-                new RequestException(
-                    'No response was received for a request with no body. This'
-                    . ' could mean that you are saturating your network.',
-                    $transaction->getRequest()
-                )
-            );
-        } elseif (!$body->isSeekable() || !$body->seek(0)) {
-            // Nothing we can do with this. Sorry!
-            RequestEvents::emitError(
-                $transaction,
-                new RequestException(
-                    'The connection was unexpectedly closed. The request would'
-                    . ' have been retried, but attempting to rewind the'
-                    . ' request body failed. Consider wrapping your request'
-                    . ' body in a CachingStream decorator to work around this'
-                    . ' issue if necessary.',
-                    $transaction->getRequest()
-                )
-            );
-        } else {
-            $this->retryFailedConnection($transaction, $context);
-        }
-
-        return false;
-    }
-
-    private function retryFailedConnection(
-        TransactionInterface $transaction,
-        BatchContext $context
-    ) {
-        // Add the request back to the batch to retry automatically.
-        $context->addTransaction(
-            $transaction,
-            call_user_func(
-                $this->curlFactory,
-                $transaction,
-                $this->messageFactory
-            )
-        );
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Adapter/Curl/RequestMediator.php b/core/vendor/guzzlehttp/guzzle/src/Adapter/Curl/RequestMediator.php
deleted file mode 100644
index 19cbcfd090cbf9211f6d393f4d8e8ced5d264eb7..0000000000000000000000000000000000000000
--- a/core/vendor/guzzlehttp/guzzle/src/Adapter/Curl/RequestMediator.php
+++ /dev/null
@@ -1,130 +0,0 @@
-<?php
-
-namespace GuzzleHttp\Adapter\Curl;
-
-use GuzzleHttp\Adapter\TransactionInterface;
-use GuzzleHttp\Event\RequestEvents;
-use GuzzleHttp\Message\MessageFactoryInterface;
-use GuzzleHttp\Stream\Stream;
-use GuzzleHttp\Stream\StreamInterface;
-
-/**
- * Mediator between curl handles and request objects
- */
-class RequestMediator
-{
-    /** @var TransactionInterface */
-    private $transaction;
-    /** @var MessageFactoryInterface */
-    private $messageFactory;
-    private $statusCode;
-    private $reasonPhrase;
-    private $body;
-    private $protocolVersion;
-    private $headers;
-
-    /**
-     * @param TransactionInterface    $transaction    Transaction to populate
-     * @param MessageFactoryInterface $messageFactory Creates responses
-     */
-    public function __construct(
-        TransactionInterface $transaction,
-        MessageFactoryInterface $messageFactory
-    ) {
-        $this->transaction = $transaction;
-        $this->messageFactory = $messageFactory;
-    }
-
-    /**
-     * Set the body that will hold the response body
-     *
-     * @param StreamInterface $body Response body
-     */
-    public function setResponseBody(StreamInterface $body = null)
-    {
-        $this->body = $body;
-    }
-
-    /**
-     * Receive a response header from curl
-     *
-     * @param resource $curl   Curl handle
-     * @param string   $header Received header
-     *
-     * @return int
-     */
-    public function receiveResponseHeader($curl, $header)
-    {
-        static $normalize = ["\r", "\n"];
-        $length = strlen($header);
-        $header = str_replace($normalize, '', $header);
-
-        if (strpos($header, 'HTTP/') === 0) {
-            $startLine = explode(' ', $header, 3);
-            // Only download the body to a target body when a successful
-            // response is received.
-            if ($startLine[1][0] != '2') {
-                $this->body = null;
-            }
-            $this->statusCode = $startLine[1];
-            $this->reasonPhrase = isset($startLine[2]) ? $startLine[2] : null;
-            $this->protocolVersion = substr($startLine[0], -3);
-            $this->headers = [];
-        } elseif ($pos = strpos($header, ':')) {
-            $this->headers[substr($header, 0, $pos)][] = substr($header, $pos + 1);
-        } elseif ($header == '' && $this->statusCode >= 200) {
-            $response = $this->messageFactory->createResponse(
-                $this->statusCode,
-                $this->headers,
-                $this->body,
-                [
-                    'protocol_version' => $this->protocolVersion,
-                    'reason_phrase'    => $this->reasonPhrase
-                ]
-            );
-            $this->headers = $this->body = null;
-            $this->transaction->setResponse($response);
-            // Allows events to react before downloading any of the body
-            RequestEvents::emitHeaders($this->transaction);
-        }
-
-        return $length;
-    }
-
-    /**
-     * Write data to the response body of a request
-     *
-     * @param resource $curl
-     * @param string   $write
-     *
-     * @return int
-     */
-    public function writeResponseBody($curl, $write)
-    {
-        if (!($response = $this->transaction->getResponse())) {
-            return 0;
-        }
-
-        // Add a default body on the response if one was not found
-        if (!($body = $response->getBody())) {
-            $body = new Stream(fopen('php://temp', 'r+'));
-            $response->setBody($body);
-        }
-
-        return $body->write($write);
-    }
-
-    /**
-     * Read data from the request body and send it to curl
-     *
-     * @param resource $ch     Curl handle
-     * @param resource $fd     File descriptor
-     * @param int      $length Amount of data to read
-     *
-     * @return string
-     */
-    public function readRequestBody($ch, $fd, $length)
-    {
-        return (string) $this->transaction->getRequest()->getBody()->read($length);
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Adapter/FakeParallelAdapter.php b/core/vendor/guzzlehttp/guzzle/src/Adapter/FakeParallelAdapter.php
deleted file mode 100644
index 302656837f1956a9181780d9ea319e753fe8eb30..0000000000000000000000000000000000000000
--- a/core/vendor/guzzlehttp/guzzle/src/Adapter/FakeParallelAdapter.php
+++ /dev/null
@@ -1,34 +0,0 @@
-<?php
-
-namespace GuzzleHttp\Adapter;
-
-use GuzzleHttp\Exception\RequestException;
-
-/**
- * Decorates a regular AdapterInterface object and creates a
- * ParallelAdapterInterface object that sends multiple HTTP requests serially.
- */
-class FakeParallelAdapter implements ParallelAdapterInterface
-{
-    /** @var AdapterInterface */
-    private $adapter;
-
-    /**
-     * @param AdapterInterface $adapter Adapter used to send requests
-     */
-    public function __construct(AdapterInterface $adapter)
-    {
-        $this->adapter = $adapter;
-    }
-
-    public function sendAll(\Iterator $transactions, $parallel)
-    {
-        foreach ($transactions as $transaction) {
-            try {
-                $this->adapter->send($transaction);
-            } catch (RequestException $e) {
-                // no op for batch transaction
-            }
-        }
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Adapter/MockAdapter.php b/core/vendor/guzzlehttp/guzzle/src/Adapter/MockAdapter.php
deleted file mode 100644
index 3e8020e69842da49d331b8b5c68396b681b55fa7..0000000000000000000000000000000000000000
--- a/core/vendor/guzzlehttp/guzzle/src/Adapter/MockAdapter.php
+++ /dev/null
@@ -1,60 +0,0 @@
-<?php
-
-namespace GuzzleHttp\Adapter;
-
-use GuzzleHttp\Event\RequestEvents;
-use GuzzleHttp\Message\ResponseInterface;
-
-/**
- * Adapter that can be used to associate mock responses with a transaction
- * while still emulating the event workflow of real adapters.
- */
-class MockAdapter implements AdapterInterface
-{
-    private $response;
-
-    /**
-     * @param ResponseInterface|callable $response Response to serve or function
-     *     to invoke that handles a transaction
-     */
-    public function __construct($response = null)
-    {
-        $this->setResponse($response);
-    }
-
-    /**
-     * Set the response that will be served by the adapter
-     *
-     * @param ResponseInterface|callable $response Response to serve or
-     *     function to invoke that handles a transaction
-     */
-    public function setResponse($response)
-    {
-        $this->response = $response;
-    }
-
-    public function send(TransactionInterface $transaction)
-    {
-        RequestEvents::emitBefore($transaction);
-        if (!$transaction->getResponse()) {
-
-            // Read the request body if it is present
-            if ($transaction->getRequest()->getBody()) {
-                $transaction->getRequest()->getBody()->__toString();
-            }
-
-            $response = is_callable($this->response)
-                ? call_user_func($this->response, $transaction)
-                : $this->response;
-            if (!$response instanceof ResponseInterface) {
-                throw new \RuntimeException('Invalid mocked response');
-            }
-
-            $transaction->setResponse($response);
-            RequestEvents::emitHeaders($transaction);
-            RequestEvents::emitComplete($transaction);
-        }
-
-        return $transaction->getResponse();
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Adapter/ParallelAdapterInterface.php b/core/vendor/guzzlehttp/guzzle/src/Adapter/ParallelAdapterInterface.php
deleted file mode 100644
index 79a25b7e0dc3a6591f1a15d080f8e489489ab689..0000000000000000000000000000000000000000
--- a/core/vendor/guzzlehttp/guzzle/src/Adapter/ParallelAdapterInterface.php
+++ /dev/null
@@ -1,23 +0,0 @@
-<?php
-
-namespace GuzzleHttp\Adapter;
-
-/**
- * Adapter interface used to transfer multiple HTTP requests in parallel.
- *
- * Parallel adapters follow the same rules as AdapterInterface except that
- * RequestExceptions are never thrown in a parallel transfer and parallel
- * adapters do not return responses.
- */
-interface ParallelAdapterInterface
-{
-    /**
-     * Transfers multiple HTTP requests in parallel.
-     *
-     * RequestExceptions MUST not be thrown from a parallel transfer.
-     *
-     * @param \Iterator $transactions Iterator that yields TransactionInterface
-     * @param int       $parallel     Max number of requests to send in parallel
-     */
-    public function sendAll(\Iterator $transactions, $parallel);
-}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Adapter/StreamAdapter.php b/core/vendor/guzzlehttp/guzzle/src/Adapter/StreamAdapter.php
deleted file mode 100644
index 4cf434ad4e593e4406e72f7e77aa3b5966abaa3f..0000000000000000000000000000000000000000
--- a/core/vendor/guzzlehttp/guzzle/src/Adapter/StreamAdapter.php
+++ /dev/null
@@ -1,352 +0,0 @@
-<?php
-
-namespace GuzzleHttp\Adapter;
-
-use GuzzleHttp\Event\RequestEvents;
-use GuzzleHttp\Exception\AdapterException;
-use GuzzleHttp\Exception\RequestException;
-use GuzzleHttp\Message\MessageFactoryInterface;
-use GuzzleHttp\Message\RequestInterface;
-use GuzzleHttp\Stream;
-
-/**
- * HTTP adapter that uses PHP's HTTP stream wrapper.
- *
- * When using the StreamAdapter, custom stream context options can be specified
- * using the **stream_context** option in a request's **config** option. The
- * structure of the "stream_context" option is an associative array where each
- * key is a transport name and each option is an associative array of options.
- */
-class StreamAdapter implements AdapterInterface
-{
-    /** @var MessageFactoryInterface */
-    private $messageFactory;
-
-    /**
-     * @param MessageFactoryInterface $messageFactory
-     */
-    public function __construct(MessageFactoryInterface $messageFactory)
-    {
-        $this->messageFactory = $messageFactory;
-    }
-
-    public function send(TransactionInterface $transaction)
-    {
-        // HTTP/1.1 streams using the PHP stream wrapper require a
-        // Connection: close header. Setting here so that it is added before
-        // emitting the request.before_send event.
-        $request = $transaction->getRequest();
-        if ($request->getProtocolVersion() == '1.1' &&
-            !$request->hasHeader('Connection')
-        ) {
-            $transaction->getRequest()->setHeader('Connection', 'close');
-        }
-
-        RequestEvents::emitBefore($transaction);
-        if (!$transaction->getResponse()) {
-            $this->createResponse($transaction);
-            RequestEvents::emitComplete($transaction);
-        }
-
-        return $transaction->getResponse();
-    }
-
-    private function createResponse(TransactionInterface $transaction)
-    {
-        $request = $transaction->getRequest();
-        $stream = $this->createStream($request, $http_response_header);
-
-        if (!$request->getConfig()['stream']) {
-            $stream = $this->getSaveToBody($request, $stream);
-        }
-
-        // Track the response headers of the request
-        $this->createResponseObject($http_response_header, $transaction, $stream);
-    }
-
-    /**
-     * Drain the steam into the destination stream
-     */
-    private function getSaveToBody(RequestInterface $request, $stream)
-    {
-        if ($saveTo = $request->getConfig()['save_to']) {
-            // Stream the response into the destination stream
-            $saveTo = is_string($saveTo)
-                ? new Stream\LazyOpenStream($saveTo, 'r+')
-                : Stream\create($saveTo);
-        } else {
-            // Stream into the default temp stream
-            $saveTo = Stream\create();
-        }
-
-        while (!feof($stream)) {
-            $saveTo->write(fread($stream, 8096));
-        }
-
-        fclose($stream);
-        $saveTo->seek(0);
-
-        return $saveTo;
-    }
-
-    private function createResponseObject(
-        array $headers,
-        TransactionInterface $transaction,
-        $stream
-    ) {
-        $parts = explode(' ', array_shift($headers), 3);
-        $options = ['protocol_version' => substr($parts[0], -3)];
-        if (isset($parts[2])) {
-            $options['reason_phrase'] = $parts[2];
-        }
-
-        $response = $this->messageFactory->createResponse(
-            $parts[1],
-            $this->headersFromLines($headers),
-            $stream,
-            $options
-        );
-
-        $transaction->setResponse($response);
-        RequestEvents::emitHeaders($transaction);
-
-        return $response;
-    }
-
-    private function headersFromLines(array $lines)
-    {
-        $responseHeaders = [];
-
-        foreach ($lines as $line) {
-            $headerParts = explode(':', $line, 2);
-            $responseHeaders[$headerParts[0]][] = isset($headerParts[1])
-                ? trim($headerParts[1])
-                : '';
-        }
-
-        return $responseHeaders;
-    }
-
-    /**
-     * Create a resource and check to ensure it was created successfully
-     *
-     * @param callable         $callback Callable that returns stream resource
-     * @param RequestInterface $request  Request used when throwing exceptions
-     * @param array            $options  Options used when throwing exceptions
-     *
-     * @return resource
-     * @throws RequestException on error
-     */
-    private function createResource(callable $callback, RequestInterface $request, $options)
-    {
-        // Turn off error reporting while we try to initiate the request
-        $level = error_reporting(0);
-        $resource = call_user_func($callback);
-        error_reporting($level);
-
-        // If the resource could not be created, then grab the last error and
-        // throw an exception.
-        if (!is_resource($resource)) {
-            $message = 'Error creating resource. [url] ' . $request->getUrl() . ' ';
-            if (isset($options['http']['proxy'])) {
-                $message .= "[proxy] {$options['http']['proxy']} ";
-            }
-            foreach ((array) error_get_last() as $key => $value) {
-                $message .= "[{$key}] {$value} ";
-            }
-            throw new RequestException(trim($message), $request);
-        }
-
-        return $resource;
-    }
-
-    /**
-     * Create the stream for the request with the context options.
-     *
-     * @param RequestInterface $request              Request being sent
-     * @param mixed            $http_response_header Populated by stream wrapper
-     *
-     * @return resource
-     */
-    private function createStream(
-        RequestInterface $request,
-        &$http_response_header
-    ) {
-        static $methods;
-        if (!$methods) {
-            $methods = array_flip(get_class_methods(__CLASS__));
-        }
-
-        $params = [];
-        $options = $this->getDefaultOptions($request);
-        foreach ($request->getConfig()->toArray() as $key => $value) {
-            $method = "add_{$key}";
-            if (isset($methods[$method])) {
-                $this->{$method}($request, $options, $value, $params);
-            }
-        }
-
-        $this->applyCustomOptions($request, $options);
-        $context = $this->createStreamContext($request, $options, $params);
-
-        return $this->createStreamResource(
-            $request,
-            $options,
-            $context,
-            $http_response_header
-        );
-    }
-
-    private function getDefaultOptions(RequestInterface $request)
-    {
-        $headers = '';
-        foreach ($request->getHeaders() as $name => $values) {
-            $headers .= $name . ': ' . implode(', ', $values) . "\r\n";
-        }
-
-        return [
-            'http' => [
-                'method'           => $request->getMethod(),
-                'header'           => trim($headers),
-                'protocol_version' => $request->getProtocolVersion(),
-                'ignore_errors'    => true,
-                'follow_location'  => 0,
-                'content'          => (string) $request->getBody()
-            ]
-        ];
-    }
-
-    private function add_proxy(RequestInterface $request, &$options, $value, &$params)
-    {
-        if (!is_array($value)) {
-            $options['http']['proxy'] = $value;
-            $options['http']['request_fulluri'] = true;
-        } else {
-            $scheme = $request->getScheme();
-            if (isset($value[$scheme])) {
-                $options['http']['proxy'] = $value[$scheme];
-                $options['http']['request_fulluri'] = true;
-            }
-        }
-    }
-
-    private function add_timeout(RequestInterface $request, &$options, $value, &$params)
-    {
-        $options['http']['timeout'] = $value;
-    }
-
-    private function add_verify(RequestInterface $request, &$options, $value, &$params)
-    {
-        if ($value === true || is_string($value)) {
-            $options['http']['verify_peer'] = true;
-            if ($value !== true) {
-                if (!file_exists($value)) {
-                    throw new \RuntimeException("SSL certificate authority file not found: {$value}");
-                }
-                $options['http']['allow_self_signed'] = true;
-                $options['http']['cafile'] = $value;
-            }
-        } elseif ($value === false) {
-            $options['http']['verify_peer'] = false;
-        }
-    }
-
-    private function add_cert(RequestInterface $request, &$options, $value, &$params)
-    {
-        if (is_array($value)) {
-            $options['http']['passphrase'] = $value[1];
-            $value = $value[0];
-        }
-
-        if (!file_exists($value)) {
-            throw new \RuntimeException("SSL certificate not found: {$value}");
-        }
-
-        $options['http']['local_cert'] = $value;
-    }
-
-    private function add_debug(RequestInterface $request, &$options, $value, &$params)
-    {
-        static $map = [
-            STREAM_NOTIFY_CONNECT       => 'CONNECT',
-            STREAM_NOTIFY_AUTH_REQUIRED => 'AUTH_REQUIRED',
-            STREAM_NOTIFY_AUTH_RESULT   => 'AUTH_RESULT',
-            STREAM_NOTIFY_MIME_TYPE_IS  => 'MIME_TYPE_IS',
-            STREAM_NOTIFY_FILE_SIZE_IS  => 'FILE_SIZE_IS',
-            STREAM_NOTIFY_REDIRECTED    => 'REDIRECTED',
-            STREAM_NOTIFY_PROGRESS      => 'PROGRESS',
-            STREAM_NOTIFY_FAILURE       => 'FAILURE',
-            STREAM_NOTIFY_COMPLETED     => 'COMPLETED',
-            STREAM_NOTIFY_RESOLVE       => 'RESOLVE'
-        ];
-
-        static $args = ['severity', 'message', 'message_code',
-            'bytes_transferred', 'bytes_max'];
-
-        if (!is_resource($value)) {
-            $value = fopen('php://output', 'w');
-        }
-
-        $params['notification'] = function () use ($request, $value, $map, $args) {
-            $passed = func_get_args();
-            $code = array_shift($passed);
-            fprintf($value, '<%s> [%s] ', $request->getUrl(), $map[$code]);
-            foreach (array_filter($passed) as $i => $v) {
-                fwrite($value, $args[$i] . ': "' . $v . '" ');
-            }
-            fwrite($value, "\n");
-        };
-    }
-
-    private function applyCustomOptions(
-        RequestInterface $request,
-        array &$options
-    ) {
-        // Overwrite any generated options with custom options
-        if ($custom = $request->getConfig()['stream_context']) {
-            if (!is_array($custom)) {
-                throw new AdapterException('stream_context must be an array');
-            }
-            $options = array_replace_recursive($options, $custom);
-        }
-    }
-
-    private function createStreamContext(
-        RequestInterface $request,
-        array $options,
-        array $params
-    ) {
-        return $this->createResource(
-            function () use ($request, $options, $params) {
-                return stream_context_create($options, $params);
-            },
-            $request,
-            $options
-        );
-    }
-
-    private function createStreamResource(
-        RequestInterface $request,
-        array $options,
-        $context,
-        &$http_response_header
-    ) {
-        $url = $request->getUrl();
-        // Add automatic gzip decompression
-        if (strpos($request->getHeader('Accept-Encoding'), 'gzip') !== false) {
-            $url = 'compress.zlib://' . $url;
-        }
-
-        return $this->createResource(
-            function () use ($url, &$http_response_header, $context) {
-                if (false === strpos($url, 'http')) {
-                    trigger_error("URL is invalid: {$url}", E_USER_WARNING);
-                    return null;
-                }
-                return fopen($url, 'r', null, $context);
-            },
-            $request,
-            $options
-        );
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Adapter/StreamingProxyAdapter.php b/core/vendor/guzzlehttp/guzzle/src/Adapter/StreamingProxyAdapter.php
deleted file mode 100644
index 128eb1d1e12c5a31dadf64c77f1cd6ed4fe66c3b..0000000000000000000000000000000000000000
--- a/core/vendor/guzzlehttp/guzzle/src/Adapter/StreamingProxyAdapter.php
+++ /dev/null
@@ -1,36 +0,0 @@
-<?php
-
-namespace GuzzleHttp\Adapter;
-
-/**
- * Sends streaming requests to a streaming compatible adapter while sending all
- * other requests to a default adapter.
- *
- * This, for example, could be useful for taking advantage of the performance
- * benefits of the CurlAdapter while still supporting true streaming through
- * the StreamAdapter.
- */
-class StreamingProxyAdapter implements AdapterInterface
-{
-    private $defaultAdapter;
-    private $streamingAdapter;
-
-    /**
-     * @param AdapterInterface $defaultAdapter   Adapter used for non-streaming responses
-     * @param AdapterInterface $streamingAdapter Adapter used for streaming responses
-     */
-    public function __construct(
-        AdapterInterface $defaultAdapter,
-        AdapterInterface $streamingAdapter
-    ) {
-        $this->defaultAdapter = $defaultAdapter;
-        $this->streamingAdapter = $streamingAdapter;
-    }
-
-    public function send(TransactionInterface $transaction)
-    {
-        return $transaction->getRequest()->getConfig()['stream']
-            ? $this->streamingAdapter->send($transaction)
-            : $this->defaultAdapter->send($transaction);
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Adapter/Transaction.php b/core/vendor/guzzlehttp/guzzle/src/Adapter/Transaction.php
deleted file mode 100644
index 74bb6b44234e0564c20fe2f557f7ffb0f182f3cd..0000000000000000000000000000000000000000
--- a/core/vendor/guzzlehttp/guzzle/src/Adapter/Transaction.php
+++ /dev/null
@@ -1,49 +0,0 @@
-<?php
-
-namespace GuzzleHttp\Adapter;
-
-use GuzzleHttp\ClientInterface;
-use GuzzleHttp\Message\RequestInterface;
-use GuzzleHttp\Message\ResponseInterface;
-
-class Transaction implements TransactionInterface
-{
-    /** @var ClientInterface */
-    private $client;
-    /** @var RequestInterface */
-    private $request;
-    /** @var ResponseInterface */
-    private $response;
-
-    /**
-     * @param ClientInterface  $client  Client that is used to send the requests
-     * @param RequestInterface $request
-     */
-    public function __construct(
-        ClientInterface $client,
-        RequestInterface $request
-    ) {
-        $this->client = $client;
-        $this->request = $request;
-    }
-
-    public function getRequest()
-    {
-        return $this->request;
-    }
-
-    public function getResponse()
-    {
-        return $this->response;
-    }
-
-    public function setResponse(ResponseInterface $response)
-    {
-        $this->response = $response;
-    }
-
-    public function getClient()
-    {
-        return $this->client;
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Adapter/TransactionInterface.php b/core/vendor/guzzlehttp/guzzle/src/Adapter/TransactionInterface.php
deleted file mode 100644
index b9bf50cbaccb276b488d2699f5e510e1b154e06a..0000000000000000000000000000000000000000
--- a/core/vendor/guzzlehttp/guzzle/src/Adapter/TransactionInterface.php
+++ /dev/null
@@ -1,35 +0,0 @@
-<?php
-
-namespace GuzzleHttp\Adapter;
-
-use GuzzleHttp\ClientInterface;
-use GuzzleHttp\Message\RequestInterface;
-use GuzzleHttp\Message\ResponseInterface;
-
-/**
- * Represents a transactions that consists of a request, response, and client
- */
-interface TransactionInterface
-{
-    /**
-     * @return RequestInterface
-     */
-    public function getRequest();
-
-    /**
-     * @return ResponseInterface|null
-     */
-    public function getResponse();
-
-    /**
-     * Set a response on the transaction
-     *
-     * @param ResponseInterface $response Response to set
-     */
-    public function setResponse(ResponseInterface $response);
-
-    /**
-     * @return ClientInterface
-     */
-    public function getClient();
-}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Adapter/TransactionIterator.php b/core/vendor/guzzlehttp/guzzle/src/Adapter/TransactionIterator.php
deleted file mode 100644
index f1a11f8635b954d3fb6edf00fe16ea573316bec3..0000000000000000000000000000000000000000
--- a/core/vendor/guzzlehttp/guzzle/src/Adapter/TransactionIterator.php
+++ /dev/null
@@ -1,78 +0,0 @@
-<?php
-
-namespace GuzzleHttp\Adapter;
-
-use GuzzleHttp\ClientInterface;
-use GuzzleHttp\Event\ListenerAttacherTrait;
-use GuzzleHttp\Message\RequestInterface;
-
-/**
- * Converts a sequence of request objects into a transaction.
- * @internal
- */
-class TransactionIterator implements \Iterator
-{
-    use ListenerAttacherTrait;
-
-    /** @var \Iterator */
-    private $source;
-
-    /** @var ClientInterface */
-    private $client;
-
-    /** @var array Listeners to attach to each request */
-    private $eventListeners = [];
-
-    public function __construct(
-        $source,
-        ClientInterface $client,
-        array $options
-    ) {
-        $this->client = $client;
-        $this->eventListeners = $this->prepareListeners(
-            $options,
-            ['before', 'complete', 'error']
-        );
-        if ($source instanceof \Iterator) {
-            $this->source = $source;
-        } elseif (is_array($source)) {
-            $this->source = new \ArrayIterator($source);
-        } else {
-            throw new \InvalidArgumentException('Expected an Iterator or array');
-        }
-    }
-
-    public function current()
-    {
-        $request = $this->source->current();
-        if (!$request instanceof RequestInterface) {
-            throw new \RuntimeException('All must implement RequestInterface');
-        }
-
-        $this->attachListeners($request, $this->eventListeners);
-
-        return new Transaction($this->client, $request);
-    }
-
-    public function next()
-    {
-        $this->source->next();
-    }
-
-    public function key()
-    {
-        return $this->source->key();
-    }
-
-    public function valid()
-    {
-        return $this->source->valid();
-    }
-
-    public function rewind()
-    {
-        if (!($this->source instanceof \Generator)) {
-            $this->source->rewind();
-        }
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/src/BatchResults.php b/core/vendor/guzzlehttp/guzzle/src/BatchResults.php
new file mode 100644
index 0000000000000000000000000000000000000000..e5af433ddf18b34a4c30c281a262b4a9dd030988
--- /dev/null
+++ b/core/vendor/guzzlehttp/guzzle/src/BatchResults.php
@@ -0,0 +1,148 @@
+<?php
+namespace GuzzleHttp;
+
+/**
+ * Represents the result of a batch operation. This result container is
+ * iterable, countable, and you can can get a result by value using the
+ * getResult function.
+ *
+ * Successful results are anything other than exceptions. Failure results are
+ * exceptions.
+ *
+ * @package GuzzleHttp
+ */
+class BatchResults implements \Countable, \IteratorAggregate, \ArrayAccess
+{
+    private $hash;
+
+    /**
+     * @param \SplObjectStorage $hash Hash of key objects to result values.
+     */
+    public function __construct(\SplObjectStorage $hash)
+    {
+        $this->hash = $hash;
+    }
+
+    /**
+     * Get the keys that are available on the batch result.
+     *
+     * @return array
+     */
+    public function getKeys()
+    {
+        return iterator_to_array($this->hash);
+    }
+
+    /**
+     * Gets a result from the container for the given object. When getting
+     * results for a batch of requests, provide the request object.
+     *
+     * @param object $forObject Object to retrieve the result for.
+     *
+     * @return mixed|null
+     */
+    public function getResult($forObject)
+    {
+        return isset($this->hash[$forObject]) ? $this->hash[$forObject] : null;
+    }
+
+    /**
+     * Get an array of successful results.
+     *
+     * @return array
+     */
+    public function getSuccessful()
+    {
+        $results = [];
+        foreach ($this->hash as $key) {
+            if (!($this->hash[$key] instanceof \Exception)) {
+                $results[] = $this->hash[$key];
+            }
+        }
+
+        return $results;
+    }
+
+    /**
+     * Get an array of failed results.
+     *
+     * @return array
+     */
+    public function getFailures()
+    {
+        $results = [];
+        foreach ($this->hash as $key) {
+            if ($this->hash[$key] instanceof \Exception) {
+                $results[] = $this->hash[$key];
+            }
+        }
+
+        return $results;
+    }
+
+    /**
+     * Allows iteration over all batch result values.
+     *
+     * @return \ArrayIterator
+     */
+    public function getIterator()
+    {
+        $results = [];
+        foreach ($this->hash as $key) {
+            $results[] = $this->hash[$key];
+        }
+
+        return new \ArrayIterator($results);
+    }
+
+    /**
+     * Counts the number of elements in the batch result.
+     *
+     * @return int
+     */
+    public function count()
+    {
+        return count($this->hash);
+    }
+
+    /**
+     * Checks if the batch contains a specific numerical array index.
+     *
+     * @param int $key Index to access
+     *
+     * @return bool
+     */
+    public function offsetExists($key)
+    {
+        return $key < count($this->hash);
+    }
+
+    /**
+     * Allows access of the batch using a numerical array index.
+     *
+     * @param int $key Index to access.
+     *
+     * @return mixed|null
+     */
+    public function offsetGet($key)
+    {
+        $i = -1;
+        foreach ($this->hash as $obj) {
+            if ($key === ++$i) {
+                return $this->hash[$obj];
+            }
+        }
+
+        return null;
+    }
+
+    public function offsetUnset($key)
+    {
+        throw new \RuntimeException('Not implemented');
+    }
+
+    public function offsetSet($key, $value)
+    {
+        throw new \RuntimeException('Not implemented');
+    }
+}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Client.php b/core/vendor/guzzlehttp/guzzle/src/Client.php
index 898157e1809aec499451c0b8ba50a08dbd7906ff..c8045a14d4222929237c3c0295bce75af9f2eee5 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Client.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Client.php
@@ -1,21 +1,20 @@
 <?php
-
 namespace GuzzleHttp;
 
-use GuzzleHttp\Adapter\Curl\MultiAdapter;
 use GuzzleHttp\Event\HasEmitterTrait;
-use GuzzleHttp\Adapter\FakeParallelAdapter;
-use GuzzleHttp\Adapter\ParallelAdapterInterface;
-use GuzzleHttp\Adapter\AdapterInterface;
-use GuzzleHttp\Adapter\StreamAdapter;
-use GuzzleHttp\Adapter\StreamingProxyAdapter;
-use GuzzleHttp\Adapter\Curl\CurlAdapter;
-use GuzzleHttp\Adapter\Transaction;
-use GuzzleHttp\Adapter\TransactionIterator;
-use GuzzleHttp\Exception\RequestException;
 use GuzzleHttp\Message\MessageFactory;
 use GuzzleHttp\Message\MessageFactoryInterface;
 use GuzzleHttp\Message\RequestInterface;
+use GuzzleHttp\Message\FutureResponse;
+use GuzzleHttp\Ring\Client\Middleware;
+use GuzzleHttp\Ring\Client\CurlMultiHandler;
+use GuzzleHttp\Ring\Client\CurlHandler;
+use GuzzleHttp\Ring\Client\StreamHandler;
+use GuzzleHttp\Ring\Core;
+use GuzzleHttp\Ring\Future\FutureInterface;
+use GuzzleHttp\Exception\RequestException;
+use React\Promise\FulfilledPromise;
+use React\Promise\RejectedPromise;
 
 /**
  * HTTP client
@@ -24,23 +23,18 @@ class Client implements ClientInterface
 {
     use HasEmitterTrait;
 
-    const DEFAULT_CONCURRENCY = 25;
-
     /** @var MessageFactoryInterface Request factory used by the client */
     private $messageFactory;
 
-    /** @var AdapterInterface */
-    private $adapter;
-
-    /** @var ParallelAdapterInterface */
-    private $parallelAdapter;
-
     /** @var Url Base URL of the client */
     private $baseUrl;
 
     /** @var array Default request options */
     private $defaults;
 
+    /** @var callable Request state machine */
+    private $fsm;
+
     /**
      * Clients accept an array of constructor parameters.
      *
@@ -65,20 +59,84 @@ class Client implements ClientInterface
      *       Can be a string or an array that contains a URI template followed
      *       by an associative array of expansion variables to inject into the
      *       URI template.
-     *     - adapter: Adapter used to transfer requests
-     *     - parallel_adapter: Adapter used to transfer requests in parallel
+     *     - handler: callable RingPHP handler used to transfer requests
      *     - message_factory: Factory used to create request and response object
      *     - defaults: Default request options to apply to each request
      *     - emitter: Event emitter used for request events
+     *     - fsm: (internal use only) The request finite state machine. A
+     *       function that accepts a transaction and optional final state. The
+     *       function is responsible for transitioning a request through its
+     *       lifecycle events.
      */
     public function __construct(array $config = [])
     {
         $this->configureBaseUrl($config);
         $this->configureDefaults($config);
-        $this->configureAdapter($config);
+
         if (isset($config['emitter'])) {
             $this->emitter = $config['emitter'];
         }
+
+        $this->messageFactory = isset($config['message_factory'])
+            ? $config['message_factory']
+            : new MessageFactory();
+
+        if (isset($config['fsm'])) {
+            $this->fsm = $config['fsm'];
+        } else {
+            if (isset($config['handler'])) {
+                $handler = $config['handler'];
+            } elseif (isset($config['adapter'])) {
+                $handler = $config['adapter'];
+            } else {
+                $handler = static::getDefaultHandler();
+            }
+            $this->fsm = new RequestFsm($handler, $this->messageFactory);
+        }
+    }
+
+    /**
+     * Create a default handler to use based on the environment
+     *
+     * @throws \RuntimeException if no viable Handler is available.
+     */
+    public static function getDefaultHandler()
+    {
+        $default = $future = $streaming = null;
+
+        if (extension_loaded('curl')) {
+            $config = [
+                'select_timeout' => getenv('GUZZLE_CURL_SELECT_TIMEOUT') ?: 1
+            ];
+            if ($maxHandles = getenv('GUZZLE_CURL_MAX_HANDLES')) {
+                $config['max_handles'] = $maxHandles;
+            }
+            $future = new CurlMultiHandler($config);
+            if (function_exists('curl_reset')) {
+                $default = new CurlHandler();
+            }
+        }
+
+        if (ini_get('allow_url_fopen')) {
+            $streaming = new StreamHandler();
+        }
+
+        if (!($default = ($default ?: $future) ?: $streaming)) {
+            throw new \RuntimeException('Guzzle requires cURL, the '
+                . 'allow_url_fopen ini setting, or a custom HTTP handler.');
+        }
+
+        $handler = $default;
+
+        if ($streaming && $streaming !== $default) {
+            $handler = Middleware::wrapStreaming($default, $streaming);
+        }
+
+        if ($future) {
+            $handler = Middleware::wrapFuture($handler, $future);
+        }
+
+        return $handler;
     }
 
     /**
@@ -100,26 +158,16 @@ public static function getDefaultUserAgent()
         return $defaultAgent;
     }
 
-    public function __call($name, $arguments)
-    {
-        return \GuzzleHttp\deprecation_proxy(
-            $this,
-            $name,
-            $arguments,
-            ['getEventDispatcher' => 'getEmitter']
-        );
-    }
-
     public function getDefaultOption($keyOrPath = null)
     {
         return $keyOrPath === null
             ? $this->defaults
-            : \GuzzleHttp\get_path($this->defaults, $keyOrPath);
+            : Utils::getPath($this->defaults, $keyOrPath);
     }
 
     public function setDefaultOption($keyOrPath, $value)
     {
-        \GuzzleHttp\set_path($this->defaults, $keyOrPath, $value);
+        Utils::setPath($this->defaults, $keyOrPath, $value);
     }
 
     public function getBaseUrl()
@@ -129,9 +177,7 @@ public function getBaseUrl()
 
     public function createRequest($method, $url = null, array $options = [])
     {
-        // Merge in default options
-        $options = array_replace_recursive($this->defaults, $options);
-
+        $headers = $this->mergeDefaults($options);
         // Use a clone of the client's emitter
         $options['config']['emitter'] = clone $this->getEmitter();
 
@@ -141,6 +187,15 @@ public function createRequest($method, $url = null, array $options = [])
             $options
         );
 
+        // Merge in default headers
+        if ($headers) {
+            foreach ($headers as $key => $value) {
+                if (!$request->hasHeader($key)) {
+                    $request->setHeader($key, $value);
+                }
+            }
+        }
+
         return $request;
     }
 
@@ -181,32 +236,31 @@ public function options($url = null, array $options = [])
 
     public function send(RequestInterface $request)
     {
-        $transaction = new Transaction($this, $request);
-        try {
-            if ($response = $this->adapter->send($transaction)) {
-                return $response;
+        $trans = new Transaction($this, $request);
+        $fn = $this->fsm;
+
+        // Ensure a future response is returned if one was requested.
+        if ($request->getConfig()->get('future')) {
+            try {
+                $fn($trans);
+                // Turn the normal response into a future if needed.
+                return $trans->response instanceof FutureInterface
+                    ? $trans->response
+                    : new FutureResponse(new FulfilledPromise($trans->response));
+            } catch (RequestException $e) {
+                // Wrap the exception in a promise if the user asked for a future.
+                return new FutureResponse(new RejectedPromise($e));
+            }
+        } else {
+            try {
+                $fn($trans);
+                return $trans->response instanceof FutureInterface
+                    ? $trans->response->wait()
+                    : $trans->response;
+            } catch (\Exception $e) {
+                throw RequestException::wrapException($trans->request, $e);
             }
-            throw new \LogicException('No response was associated with the transaction');
-        } catch (RequestException $e) {
-            throw $e;
-        } catch (\Exception $e) {
-            // Wrap exceptions in a RequestException to adhere to the interface
-            throw new RequestException($e->getMessage(), $request, null, $e);
-        }
-    }
-
-    public function sendAll($requests, array $options = [])
-    {
-        if (!($requests instanceof TransactionIterator)) {
-            $requests = new TransactionIterator($requests, $this, $options);
         }
-
-        $this->parallelAdapter->sendAll(
-            $requests,
-            isset($options['parallel'])
-                ? $options['parallel']
-                : self::DEFAULT_CONCURRENCY
-        );
     }
 
     /**
@@ -219,24 +273,17 @@ protected function getDefaultOptions()
         $settings = [
             'allow_redirects' => true,
             'exceptions'      => true,
-            'verify'          => __DIR__ . '/cacert.pem'
+            'decode_content'  => true,
+            'verify'          => true
         ];
 
-        // Use the bundled cacert if it is a regular file, or set to true if
-        // using a phar file (because curL and the stream wrapper can't read
-        // cacerts from the phar stream wrapper). Favor the ini setting over
-        // the system's cacert.
-        if (substr(__FILE__, 0, 7) == 'phar://') {
-            $settings['verify'] = ini_get('openssl.cafile') ?: true;
-        }
-
         // Use the standard Linux HTTP_PROXY and HTTPS_PROXY if set
-        if (isset($_SERVER['HTTP_PROXY'])) {
-            $settings['proxy']['http'] = $_SERVER['HTTP_PROXY'];
+        if ($proxy = getenv('HTTP_PROXY')) {
+            $settings['proxy']['http'] = $proxy;
         }
 
-        if (isset($_SERVER['HTTPS_PROXY'])) {
-            $settings['proxy']['https'] = $_SERVER['HTTPS_PROXY'];
+        if ($proxy = getenv('HTTPS_PROXY')) {
+            $settings['proxy']['https'] = $proxy;
         }
 
         return $settings;
@@ -251,64 +298,31 @@ protected function getDefaultOptions()
      */
     private function buildUrl($url)
     {
+        // URI template (absolute or relative)
         if (!is_array($url)) {
-            if (strpos($url, '://')) {
-                return (string) $url;
-            }
-            return (string) $this->baseUrl->combine($url);
-        } elseif (strpos($url[0], '://')) {
-            return \GuzzleHttp\uri_template($url[0], $url[1]);
+            return strpos($url, '://')
+                ? (string) $url
+                : (string) $this->baseUrl->combine($url);
         }
 
+        // Absolute URL
+        if (strpos($url[0], '://')) {
+            return Utils::uriTemplate($url[0], $url[1]);
+        }
+
+        // Combine the relative URL with the base URL
         return (string) $this->baseUrl->combine(
-            \GuzzleHttp\uri_template($url[0], $url[1])
+            Utils::uriTemplate($url[0], $url[1])
         );
     }
 
-    /**
-     * Get a default parallel adapter to use based on the environment
-     *
-     * @return ParallelAdapterInterface
-     */
-    private function getDefaultParallelAdapter()
-    {
-        return extension_loaded('curl')
-            ? new MultiAdapter($this->messageFactory)
-            : new FakeParallelAdapter($this->adapter);
-    }
-
-    /**
-     * Create a default adapter to use based on the environment
-     * @throws \RuntimeException
-     */
-    private function getDefaultAdapter()
-    {
-        if (extension_loaded('curl')) {
-            $this->parallelAdapter = new MultiAdapter($this->messageFactory);
-            $this->adapter = function_exists('curl_reset')
-                ? new CurlAdapter($this->messageFactory)
-                : $this->parallelAdapter;
-            if (ini_get('allow_url_fopen')) {
-                $this->adapter = new StreamingProxyAdapter(
-                    $this->adapter,
-                    new StreamAdapter($this->messageFactory)
-                );
-            }
-        } elseif (ini_get('allow_url_fopen')) {
-            $this->adapter = new StreamAdapter($this->messageFactory);
-        } else {
-            throw new \RuntimeException('Guzzle requires cURL, the '
-                . 'allow_url_fopen ini setting, or a custom HTTP adapter.');
-        }
-    }
-
     private function configureBaseUrl(&$config)
     {
         if (!isset($config['base_url'])) {
             $this->baseUrl = new Url('', '');
         } elseif (is_array($config['base_url'])) {
             $this->baseUrl = Url::fromString(
-                \GuzzleHttp\uri_template(
+                Utils::uriTemplate(
                     $config['base_url'][0],
                     $config['base_url'][1]
                 )
@@ -335,30 +349,42 @@ private function configureDefaults($config)
             $this->defaults['headers'] = [
                 'User-Agent' => static::getDefaultUserAgent()
             ];
-        } elseif (!isset(array_change_key_case($this->defaults['headers'])['user-agent'])) {
+        } elseif (!Core::hasHeader($this->defaults, 'User-Agent')) {
             // Add the User-Agent header if one was not already set
             $this->defaults['headers']['User-Agent'] = static::getDefaultUserAgent();
         }
     }
 
-    private function configureAdapter(&$config)
+    /**
+     * Merges default options into the array passed by reference and returns
+     * an array of headers that need to be merged in after the request is
+     * created.
+     *
+     * @param array $options Options to modify by reference
+     *
+     * @return array|null
+     */
+    private function mergeDefaults(&$options)
     {
-        if (isset($config['message_factory'])) {
-            $this->messageFactory = $config['message_factory'];
-        } else {
-            $this->messageFactory = new MessageFactory();
-        }
-        if (isset($config['adapter'])) {
-            $this->adapter = $config['adapter'];
-        } else {
-            $this->getDefaultAdapter();
-        }
-        // If no parallel adapter was explicitly provided and one was not
-        // defaulted when creating the default adapter, then create one now.
-        if (isset($config['parallel_adapter'])) {
-            $this->parallelAdapter = $config['parallel_adapter'];
-        } elseif (!$this->parallelAdapter) {
-            $this->parallelAdapter = $this->getDefaultParallelAdapter();
+        // Merging optimization for when no headers are present
+        if (!isset($options['headers']) || !isset($this->defaults['headers'])) {
+            $options = array_replace_recursive($this->defaults, $options);
+            return null;
         }
+
+        $defaults = $this->defaults;
+        unset($defaults['headers']);
+        $options = array_replace_recursive($defaults, $options);
+
+        return $this->defaults['headers'];
+    }
+
+    /**
+     * @deprecated Use {@see GuzzleHttp\Pool} instead.
+     * @see GuzzleHttp\Pool
+     */
+    public function sendAll($requests, array $options = [])
+    {
+        (new Pool($this, $requests, $options))->wait();
     }
 }
diff --git a/core/vendor/guzzlehttp/guzzle/src/ClientInterface.php b/core/vendor/guzzlehttp/guzzle/src/ClientInterface.php
index 8082e321232d1b5ec669143a02593994da651d8d..d750e02cf9c1ed8c009df595f5e1cb0b9b823224 100644
--- a/core/vendor/guzzlehttp/guzzle/src/ClientInterface.php
+++ b/core/vendor/guzzlehttp/guzzle/src/ClientInterface.php
@@ -1,19 +1,17 @@
 <?php
-
 namespace GuzzleHttp;
 
 use GuzzleHttp\Event\HasEmitterInterface;
+use GuzzleHttp\Exception\RequestException;
 use GuzzleHttp\Message\RequestInterface;
 use GuzzleHttp\Message\ResponseInterface;
-use GuzzleHttp\Exception\RequestException;
-use GuzzleHttp\Exception\AdapterException;
 
 /**
  * Client interface for sending HTTP requests
  */
 interface ClientInterface extends HasEmitterInterface
 {
-    const VERSION = '4.1.8';
+    const VERSION = '5.0.0';
 
     /**
      * Create and return a new {@see RequestInterface} object.
@@ -114,38 +112,11 @@ public function options($url = null, array $options = []);
      * @param RequestInterface $request Request to send
      *
      * @return \GuzzleHttp\Message\ResponseInterface
-     * @throws \LogicException When the adapter does not populate a response
+     * @throws \LogicException When the handler does not populate a response
      * @throws RequestException When an error is encountered
      */
     public function send(RequestInterface $request);
 
-    /**
-     * Sends multiple requests in parallel.
-     *
-     * Exceptions are not thrown for failed requests. Callers are expected to
-     * register an "error" option to handle request errors OR directly register
-     * an event handler for the "error" event of a request's
-     * event emitter.
-     *
-     * The option values for 'before', 'after', and 'error' can be a callable,
-     * an associative array containing event data, or an array of event data
-     * arrays. Event data arrays contain the following keys:
-     *
-     * - fn: callable to invoke that receives the event
-     * - priority: Optional event priority (defaults to 0)
-     * - once: Set to true so that the event is removed after it is triggered
-     *
-     * @param array|\Iterator $requests Requests to send in parallel
-     * @param array           $options  Associative array of options
-     *     - parallel: (int) Maximum number of requests to send in parallel
-     *     - before: (callable|array) Receives a BeforeEvent
-     *     - after: (callable|array) Receives a CompleteEvent
-     *     - error: (callable|array) Receives a ErrorEvent
-     *
-     * @throws AdapterException When an error occurs in the HTTP adapter.
-     */
-    public function sendAll($requests, array $options = []);
-
     /**
      * Get default request options of the client.
      *
diff --git a/core/vendor/guzzlehttp/guzzle/src/Collection.php b/core/vendor/guzzlehttp/guzzle/src/Collection.php
index bd66df64b00dcf839f35157d6eb5fa2951e3898c..4aabd20b00eef7fd95f75a2af21da3c5bf161145 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Collection.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Collection.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp;
 
 /**
@@ -50,14 +49,10 @@ public static function fromConfig(
 
     /**
      * Removes all key value pairs
-     *
-     * @return Collection
      */
     public function clear()
     {
         $this->data = [];
-
-        return $this;
     }
 
     /**
@@ -77,14 +72,10 @@ public function get($key)
      *
      * @param string $key   Key to set
      * @param mixed  $value Value to set
-     *
-     * @return Collection Returns a reference to the object
      */
     public function set($key, $value)
     {
         $this->data[$key] = $value;
-
-        return $this;
     }
 
     /**
@@ -94,8 +85,6 @@ public function set($key, $value)
      *
      * @param string $key   Key to add
      * @param mixed  $value Value to add to the key
-     *
-     * @return Collection Returns a reference to the object.
      */
     public function add($key, $value)
     {
@@ -106,22 +95,16 @@ public function add($key, $value)
         } else {
             $this->data[$key] = array($this->data[$key], $value);
         }
-
-        return $this;
     }
 
     /**
      * Remove a specific key value pair
      *
      * @param string $key A key to remove
-     *
-     * @return Collection
      */
     public function remove($key)
     {
         unset($this->data[$key]);
-
-        return $this;
     }
 
     /**
@@ -163,39 +146,29 @@ public function hasValue($value)
      * Replace the data of the object with the value of an array
      *
      * @param array $data Associative array of data
-     *
-     * @return Collection Returns a reference to the object
      */
     public function replace(array $data)
     {
         $this->data = $data;
-
-        return $this;
     }
 
     /**
      * Add and merge in a Collection or array of key value pair data.
      *
      * @param Collection|array $data Associative array of key value pair data
-     *
-     * @return Collection Returns a reference to the object.
      */
     public function merge($data)
     {
         foreach ($data as $key => $value) {
             $this->add($key, $value);
         }
-
-        return $this;
     }
 
     /**
-     * Over write key value pairs in this collection with all of the data from
+     * Overwrite key value pairs in this collection with all of the data from
      * an array or collection.
      *
      * @param array|\Traversable $data Values to override over this config
-     *
-     * @return self
      */
     public function overwriteWith($data)
     {
@@ -208,8 +181,6 @@ public function overwriteWith($data)
                 $this->data[$key] = $value;
             }
         }
-
-        return $this;
     }
 
     /**
diff --git a/core/vendor/guzzlehttp/guzzle/src/Cookie/CookieJar.php b/core/vendor/guzzlehttp/guzzle/src/Cookie/CookieJar.php
index 4134857827c5f00aff84f7136b1e5129feaf4cc8..f8ac7dd350fc32653801d6a6cc7dd0ab0142adb9 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Cookie/CookieJar.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Cookie/CookieJar.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp\Cookie;
 
 use GuzzleHttp\Message\RequestInterface;
@@ -28,7 +27,7 @@ public function __construct($strictMode = false, $cookieArray = [])
         $this->strictMode = $strictMode;
 
         foreach ($cookieArray as $cookie) {
-            if (!($cookieArray instanceof SetCookie)) {
+            if (!($cookie instanceof SetCookie)) {
                 $cookie = new SetCookie($cookie);
             }
             $this->setCookie($cookie);
@@ -195,7 +194,7 @@ public function extractCookies(
         RequestInterface $request,
         ResponseInterface $response
     ) {
-        if ($cookieHeader = $response->getHeader('Set-Cookie', true)) {
+        if ($cookieHeader = $response->getHeaderAsArray('Set-Cookie')) {
             foreach ($cookieHeader as $cookie) {
                 $sc = SetCookie::fromString($cookie);
                 if (!$sc->getDomain()) {
@@ -225,7 +224,7 @@ public function addCookieHeader(RequestInterface $request)
         }
 
         if ($values) {
-            $request->setHeader('Cookie', implode(';', $values));
+            $request->setHeader('Cookie', implode('; ', $values));
         }
     }
 
diff --git a/core/vendor/guzzlehttp/guzzle/src/Cookie/CookieJarInterface.php b/core/vendor/guzzlehttp/guzzle/src/Cookie/CookieJarInterface.php
index 6cafce8cc3b99151a74c212da1006389674b70e7..4ea8567e8778979285a6b623b22e599a90728a00 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Cookie/CookieJarInterface.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Cookie/CookieJarInterface.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp\Cookie;
 
 use GuzzleHttp\Message\RequestInterface;
diff --git a/core/vendor/guzzlehttp/guzzle/src/Cookie/FileCookieJar.php b/core/vendor/guzzlehttp/guzzle/src/Cookie/FileCookieJar.php
index 1980a963a97195a8396f0f067bbab94019837122..e43185172d8bcc7226a395d896d4448e4b50626b 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Cookie/FileCookieJar.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Cookie/FileCookieJar.php
@@ -1,7 +1,8 @@
 <?php
-
 namespace GuzzleHttp\Cookie;
 
+use GuzzleHttp\Utils;
+
 /**
  * Persists non-session cookies using a JSON formatted file
  */
@@ -73,9 +74,9 @@ public function load($filename)
             // @codeCoverageIgnoreEnd
         }
 
-        $data = \GuzzleHttp\json_decode($json, true);
+        $data = Utils::jsonDecode($json, true);
         if (is_array($data)) {
-            foreach (\GuzzleHttp\json_decode($json, true) as $cookie) {
+            foreach (Utils::jsonDecode($json, true) as $cookie) {
                 $this->setCookie(new SetCookie($cookie));
             }
         } elseif (strlen($data)) {
diff --git a/core/vendor/guzzlehttp/guzzle/src/Cookie/SessionCookieJar.php b/core/vendor/guzzlehttp/guzzle/src/Cookie/SessionCookieJar.php
index 2f708d74ed4e70114eabfea86b62ac4c8fa486cc..71a02d56dce5b3fe917f573f2d2ba953e9ca5195 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Cookie/SessionCookieJar.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Cookie/SessionCookieJar.php
@@ -1,7 +1,8 @@
 <?php
-
 namespace GuzzleHttp\Cookie;
 
+use GuzzleHttp\Utils;
+
 /**
  * Persists cookies in the client session
  */
@@ -53,7 +54,7 @@ protected function load()
             ? $_SESSION[$this->sessionKey]
             : null;
 
-        $data = \GuzzleHttp\json_decode($cookieJar, true);
+        $data = Utils::jsonDecode($cookieJar, true);
         if (is_array($data)) {
             foreach ($data as $cookie) {
                 $this->setCookie(new SetCookie($cookie));
diff --git a/core/vendor/guzzlehttp/guzzle/src/Cookie/SetCookie.php b/core/vendor/guzzlehttp/guzzle/src/Cookie/SetCookie.php
index 76f6f8d15c989c7617def57159b100c4161bfe2a..ac9a890813ebf478503c57b4f6af25732dc17231 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Cookie/SetCookie.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Cookie/SetCookie.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp\Cookie;
 
 use GuzzleHttp\ToArrayInterface;
@@ -89,7 +88,7 @@ public function __toString()
     {
         $str = $this->data['Name'] . '=' . $this->data['Value'] . '; ';
         foreach ($this->data as $k => $v) {
-            if ($k != 'Name' && $k != 'Value'&& $v !== null && $v !== false) {
+            if ($k != 'Name' && $k != 'Value' && $v !== null && $v !== false) {
                 if ($k == 'Expires') {
                     $str .= 'Expires=' . gmdate('D, d M Y H:i:s \G\M\T', $v) . '; ';
                 } else {
@@ -120,14 +119,10 @@ public function getName()
      * Set the cookie name
      *
      * @param string $name Cookie name
-     *
-     * @return self
      */
     public function setName($name)
     {
         $this->data['Name'] = $name;
-
-        return $this;
     }
 
     /**
@@ -144,14 +139,10 @@ public function getValue()
      * Set the cookie value
      *
      * @param string $value Cookie value
-     *
-     * @return self
      */
     public function setValue($value)
     {
         $this->data['Value'] = $value;
-
-        return $this;
     }
 
     /**
@@ -168,14 +159,10 @@ public function getDomain()
      * Set the domain of the cookie
      *
      * @param string $domain
-     *
-     * @return self
      */
     public function setDomain($domain)
     {
         $this->data['Domain'] = $domain;
-
-        return $this;
     }
 
     /**
@@ -192,14 +179,10 @@ public function getPath()
      * Set the path of the cookie
      *
      * @param string $path Path of the cookie
-     *
-     * @return self
      */
     public function setPath($path)
     {
         $this->data['Path'] = $path;
-
-        return $this;
     }
 
     /**
@@ -216,14 +199,10 @@ public function getMaxAge()
      * Set the max-age of the cookie
      *
      * @param int $maxAge Max age of the cookie in seconds
-     *
-     * @return self
      */
     public function setMaxAge($maxAge)
     {
         $this->data['Max-Age'] = $maxAge;
-
-        return $this;
     }
 
     /**
@@ -240,16 +219,12 @@ public function getExpires()
      * Set the unix timestamp for which the cookie will expire
      *
      * @param int $timestamp Unix timestamp
-     *
-     * @return self
      */
     public function setExpires($timestamp)
     {
         $this->data['Expires'] = is_numeric($timestamp)
             ? (int) $timestamp
             : strtotime($timestamp);
-
-        return $this;
     }
 
     /**
@@ -266,14 +241,10 @@ public function getSecure()
      * Set whether or not the cookie is secure
      *
      * @param bool $secure Set to true or false if secure
-     *
-     * @return self
      */
     public function setSecure($secure)
     {
         $this->data['Secure'] = $secure;
-
-        return $this;
     }
 
     /**
@@ -290,14 +261,10 @@ public function getDiscard()
      * Set whether or not this is a session cookie
      *
      * @param bool $discard Set to true or false if this is a session cookie
-     *
-     * @return self
      */
     public function setDiscard($discard)
     {
         $this->data['Discard'] = $discard;
-
-        return $this;
     }
 
     /**
@@ -314,14 +281,10 @@ public function getHttpOnly()
      * Set whether or not this is an HTTP only cookie
      *
      * @param bool $httpOnly Set to true or false if this is HTTP only
-     *
-     * @return self
      */
     public function setHttpOnly($httpOnly)
     {
         $this->data['HttpOnly'] = $httpOnly;
-
-        return $this;
     }
 
     /**
diff --git a/core/vendor/guzzlehttp/guzzle/src/Event/AbstractEvent.php b/core/vendor/guzzlehttp/guzzle/src/Event/AbstractEvent.php
index fa1453c84206fc035c9ce2324ec68fa59e686f33..0d2f4dbf0ce4706bd3558b26df47485e4382ff15 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Event/AbstractEvent.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Event/AbstractEvent.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp\Event;
 
 /**
diff --git a/core/vendor/guzzlehttp/guzzle/src/Event/AbstractRequestEvent.php b/core/vendor/guzzlehttp/guzzle/src/Event/AbstractRequestEvent.php
index d188248ac6f495779cafe37bea3b18a086eb2e57..53383f4b3be05baa0f96ec2312ece1d1f82665a7 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Event/AbstractRequestEvent.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Event/AbstractRequestEvent.php
@@ -1,32 +1,34 @@
 <?php
-
 namespace GuzzleHttp\Event;
 
-use GuzzleHttp\Adapter\TransactionInterface;
+use GuzzleHttp\Transaction;
 use GuzzleHttp\ClientInterface;
 use GuzzleHttp\Message\RequestInterface;
 
+/**
+ * Base class for request events, providing a request and client getter.
+ */
 abstract class AbstractRequestEvent extends AbstractEvent
 {
-    /** @var TransactionInterface */
-    private $transaction;
+    /** @var Transaction */
+    protected $transaction;
 
     /**
-     * @param TransactionInterface $transaction
+     * @param Transaction $transaction
      */
-    public function __construct(TransactionInterface $transaction)
+    public function __construct(Transaction $transaction)
     {
         $this->transaction = $transaction;
     }
 
     /**
-     * Get the client associated with the event
+     * Get the HTTP client associated with the event.
      *
      * @return ClientInterface
      */
     public function getClient()
     {
-        return $this->transaction->getClient();
+        return $this->transaction->client;
     }
 
     /**
@@ -36,11 +38,11 @@ public function getClient()
      */
     public function getRequest()
     {
-        return $this->transaction->getRequest();
+        return $this->transaction->request;
     }
 
     /**
-     * @return TransactionInterface
+     * @return Transaction
      */
     protected function getTransaction()
     {
diff --git a/core/vendor/guzzlehttp/guzzle/src/Event/AbstractRetryableEvent.php b/core/vendor/guzzlehttp/guzzle/src/Event/AbstractRetryableEvent.php
new file mode 100644
index 0000000000000000000000000000000000000000..828d315847ecbe594f87c791772e2f14e60b57ad
--- /dev/null
+++ b/core/vendor/guzzlehttp/guzzle/src/Event/AbstractRetryableEvent.php
@@ -0,0 +1,40 @@
+<?php
+namespace GuzzleHttp\Event;
+
+/**
+ * Abstract request event that can be retried.
+ */
+class AbstractRetryableEvent extends AbstractTransferEvent
+{
+    /**
+     * Mark the request as needing a retry and stop event propagation.
+     *
+     * This action allows you to retry a request without emitting the "end"
+     * event multiple times for a given request. When retried, the request
+     * emits a before event and is then sent again using the client that sent
+     * the original request.
+     *
+     * When retrying, it is important to limit the number of retries you allow
+     * to prevent infinite loops.
+     *
+     * This action can only be taken during the "complete" and "error" events.
+     *
+     * @param int $afterDelay If specified, the amount of time in milliseconds
+     *                        to delay before retrying. Note that this must
+     *                        be supported by the underlying RingPHP handler
+     *                        to work properly. Set to 0 or provide no value
+     *                        to retry immediately.
+     */
+    public function retry($afterDelay = 0)
+    {
+        $this->transaction->response = null;
+        $this->transaction->exception = null;
+        $this->transaction->state = 'before';
+
+        if ($afterDelay) {
+            $this->transaction->request->getConfig()->set('delay', $afterDelay);
+        }
+
+        $this->stopPropagation();
+    }
+}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Event/AbstractTransferEvent.php b/core/vendor/guzzlehttp/guzzle/src/Event/AbstractTransferEvent.php
index dba1f98eb70c137cf2d27625a38db28003e18d58..b6c79661689e15ea22ef3ea61accde7b57706977 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Event/AbstractTransferEvent.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Event/AbstractTransferEvent.php
@@ -1,52 +1,13 @@
 <?php
-
 namespace GuzzleHttp\Event;
 
-use GuzzleHttp\Adapter\TransactionInterface;
 use GuzzleHttp\Message\ResponseInterface;
 
 /**
- * Event that contains transaction statistics (time over the wire, lookup time,
- * etc.).
- *
- * Adapters that create this event SHOULD add, at a minimum, the 'total_time'
- * transfer statistic that measures the amount of time, in seconds, taken to
- * complete a transfer for the current request/response cycle. Each event
- * pertains to a single request/response transaction, NOT the entire
- * transaction (e.g. redirects).
- *
- * Adapters that add transaction statistics SHOULD follow the same string
- * attribute names that are provided by cURL listed at
- * http://php.net/manual/en/function.curl-getinfo.php. However, not all
- * adapters will have access to the advanced statistics provided by cURL. The
- * most useful transfer statistics are as follows:
- *
- * - total_time: Total transaction time in seconds for last transfer
- * - namelookup_time: Time in seconds until name resolving was complete
- * - connect_time: Time in seconds it took to establish the connection
- * - pretransfer_time: Time in seconds from start until just before file
- *   transfer begins.
- * - starttransfer_time: Time in seconds until the first byte is about to be
- *   transferred.
- * - speed_download: Average download speed
- * - speed_upload: Average upload speed
+ * Event that contains transfer statistics, and can be intercepted.
  */
 abstract class AbstractTransferEvent extends AbstractRequestEvent
 {
-    private $transferInfo;
-
-    /**
-     * @param TransactionInterface $transaction  Transaction
-     * @param array                $transferInfo Transfer statistics
-     */
-    public function __construct(
-        TransactionInterface $transaction,
-        $transferInfo = []
-    ) {
-        parent::__construct($transaction);
-        $this->transferInfo = $transferInfo;
-    }
-
     /**
      * Get all transfer information as an associative array if no $name
      * argument is supplied, or gets a specific transfer statistic if
@@ -58,13 +19,11 @@ public function __construct(
      */
     public function getTransferInfo($name = null)
     {
-        if (!$name) {
-            return $this->transferInfo;
-        }
-
-        return isset($this->transferInfo[$name])
-            ? $this->transferInfo[$name]
-            : null;
+        return !$name
+            ? $this->transaction->transferInfo
+            : (isset($this->transaction->transferInfo[$name])
+                ? $this->transaction->transferInfo[$name]
+                : null);
     }
 
     /**
@@ -72,12 +31,20 @@ public function getTransferInfo($name = null)
      *
      * @return ResponseInterface|null
      */
-    abstract public function getResponse();
+    public function getResponse()
+    {
+        return $this->transaction->response;
+    }
 
     /**
      * Intercept the request and associate a response
      *
      * @param ResponseInterface $response Response to set
      */
-    abstract public function intercept(ResponseInterface $response);
+    public function intercept(ResponseInterface $response)
+    {
+        $this->transaction->response = $response;
+        $this->transaction->exception = null;
+        $this->stopPropagation();
+    }
 }
diff --git a/core/vendor/guzzlehttp/guzzle/src/Event/BeforeEvent.php b/core/vendor/guzzlehttp/guzzle/src/Event/BeforeEvent.php
index 34a7811d6dce263594215f2e8213b91b285bdb4e..f313c37561dc7797f9af786171547e96b48646d1 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Event/BeforeEvent.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Event/BeforeEvent.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp\Event;
 
 use GuzzleHttp\Message\ResponseInterface;
@@ -7,7 +6,8 @@
 /**
  * Event object emitted before a request is sent.
  *
- * You may change the Response associated with the request using the
+ * This event MAY be emitted multiple times (i.e., if a request is retried).
+ * You MAY change the Response associated with the request using the
  * intercept() method of the event.
  */
 class BeforeEvent extends AbstractRequestEvent
@@ -19,8 +19,8 @@ class BeforeEvent extends AbstractRequestEvent
      */
     public function intercept(ResponseInterface $response)
     {
-        $this->getTransaction()->setResponse($response);
+        $this->transaction->response = $response;
+        $this->transaction->exception = null;
         $this->stopPropagation();
-        RequestEvents::emitComplete($this->getTransaction());
     }
 }
diff --git a/core/vendor/guzzlehttp/guzzle/src/Event/CompleteEvent.php b/core/vendor/guzzlehttp/guzzle/src/Event/CompleteEvent.php
index 344576001ae151b398c682c90804021970e4c156..56cc557e3e5ca0452cef00a4af7a0bf6e4ed6149 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Event/CompleteEvent.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Event/CompleteEvent.php
@@ -1,35 +1,14 @@
 <?php
-
 namespace GuzzleHttp\Event;
 
-use GuzzleHttp\Message\ResponseInterface;
-
 /**
  * Event object emitted after a request has been completed.
  *
- * You may change the Response associated with the request using the
- * intercept() method of the event.
+ * This event MAY be emitted multiple times for a single request. You MAY
+ * change the Response associated with the request using the intercept()
+ * method of the event.
+ *
+ * This event allows the request to be retried if necessary using the retry()
+ * method of the event.
  */
-class CompleteEvent extends AbstractTransferEvent
-{
-    /**
-     * Intercept the request and associate a response
-     *
-     * @param ResponseInterface $response Response to set
-     */
-    public function intercept(ResponseInterface $response)
-    {
-        $this->stopPropagation();
-        $this->getTransaction()->setResponse($response);
-    }
-
-    /**
-     * Get the response of the request
-     *
-     * @return ResponseInterface
-     */
-    public function getResponse()
-    {
-        return $this->getTransaction()->getResponse();
-    }
-}
+class CompleteEvent extends AbstractRetryableEvent {}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Event/Emitter.php b/core/vendor/guzzlehttp/guzzle/src/Event/Emitter.php
index 71e88d162a31969088f29bc6ecad74c8106bbf7d..536317a9c90afac1f8bd0b0a24eabeb555970bc1 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Event/Emitter.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Event/Emitter.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp\Event;
 
 /**
@@ -56,7 +55,7 @@ public function once($eventName, callable $listener, $priority = 0)
 
     public function removeListener($eventName, callable $listener)
     {
-        if (!isset($this->listeners[$eventName])) {
+        if (empty($this->listeners[$eventName])) {
             return;
         }
 
@@ -75,7 +74,7 @@ public function listeners($eventName = null)
         // Return all events in a sorted priority order
         if ($eventName === null) {
             foreach (array_keys($this->listeners) as $eventName) {
-                if (!isset($this->sorted[$eventName])) {
+                if (empty($this->sorted[$eventName])) {
                     $this->listeners($eventName);
                 }
             }
@@ -83,21 +82,26 @@ public function listeners($eventName = null)
         }
 
         // Return the listeners for a specific event, sorted in priority order
-        if (!isset($this->sorted[$eventName])) {
-            if (!isset($this->listeners[$eventName])) {
-                return [];
-            } else {
-                krsort($this->listeners[$eventName]);
-                $this->sorted[$eventName] = call_user_func_array(
-                    'array_merge',
-                    $this->listeners[$eventName]
-                );
+        if (empty($this->sorted[$eventName])) {
+            $this->sorted[$eventName] = [];
+            if (isset($this->listeners[$eventName])) {
+                krsort($this->listeners[$eventName], SORT_NUMERIC);
+                foreach ($this->listeners[$eventName] as $listeners) {
+                    foreach ($listeners as $listener) {
+                        $this->sorted[$eventName][] = $listener;
+                    }
+                }
             }
         }
 
         return $this->sorted[$eventName];
     }
 
+    public function hasListeners($eventName)
+    {
+        return !empty($this->listeners[$eventName]);
+    }
+
     public function emit($eventName, EventInterface $event)
     {
         if (isset($this->listeners[$eventName])) {
@@ -136,22 +140,7 @@ public function attach(SubscriberInterface $subscriber)
     public function detach(SubscriberInterface $subscriber)
     {
         foreach ($subscriber->getEvents() as $eventName => $listener) {
-            $this->removeListener($eventName, array($subscriber, $listener[0]));
+            $this->removeListener($eventName, [$subscriber, $listener[0]]);
         }
     }
-
-    public function __call($name, $arguments)
-    {
-        return \GuzzleHttp\deprecation_proxy(
-            $this,
-            $name,
-            $arguments,
-            [
-                'addSubscriber'    => 'attach',
-                'removeSubscriber' => 'detach',
-                'addListener'      => 'on',
-                'dispatch'         => 'emit'
-            ]
-        );
-    }
 }
diff --git a/core/vendor/guzzlehttp/guzzle/src/Event/EmitterInterface.php b/core/vendor/guzzlehttp/guzzle/src/Event/EmitterInterface.php
index 0181e7fe713aaa2cff9d40a5f0cb8ce7c2fd1083..9783efd15ae4a7d984431ffeecf44ab6fbdc2095 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Event/EmitterInterface.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Event/EmitterInterface.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp\Event;
 
 /**
@@ -56,6 +55,15 @@ public function removeListener($eventName, callable $listener);
      */
     public function listeners($eventName = null);
 
+    /**
+     * Checks if the emitter has listeners by the given name.
+     *
+     * @param string $eventName The name of the event to check.
+     *
+     * @return bool
+     */
+    public function hasListeners($eventName);
+
     /**
      * Emits an event to all registered listeners.
      *
diff --git a/core/vendor/guzzlehttp/guzzle/src/Event/EndEvent.php b/core/vendor/guzzlehttp/guzzle/src/Event/EndEvent.php
new file mode 100644
index 0000000000000000000000000000000000000000..c89432b02d7ac1b85a080bfcea4eba794dadb235
--- /dev/null
+++ b/core/vendor/guzzlehttp/guzzle/src/Event/EndEvent.php
@@ -0,0 +1,28 @@
+<?php
+namespace GuzzleHttp\Event;
+
+/**
+ * A terminal event that is emitted when a request transaction has ended.
+ *
+ * This event is emitted for both successful responses and responses that
+ * encountered an exception. You need to check if an exception is present
+ * in your listener to know the difference.
+ *
+ * You MAY intercept the response associated with the event if needed, but keep
+ * in mind that the "complete" event will not be triggered as a result.
+ */
+class EndEvent extends AbstractTransferEvent
+{
+    /**
+     * Get the exception that was encountered (if any).
+     *
+     * This method should be used to check if the request was sent successfully
+     * or if it encountered errors.
+     *
+     * @return \Exception|null
+     */
+    public function getException()
+    {
+        return $this->transaction->exception;
+    }
+}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Event/ErrorEvent.php b/core/vendor/guzzlehttp/guzzle/src/Event/ErrorEvent.php
index 02d4dff269ea9ae3b07c4b4c74825830a3e511c4..7432134d03e935ee71af57e1e3743166a46c1c87 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Event/ErrorEvent.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Event/ErrorEvent.php
@@ -1,48 +1,20 @@
 <?php
-
 namespace GuzzleHttp\Event;
 
 use GuzzleHttp\Exception\RequestException;
-use GuzzleHttp\Message\ResponseInterface;
-use GuzzleHttp\Adapter\TransactionInterface;
 
 /**
- * Event object emitted after a request has been sent and an error was
- * encountered.
+ * Event emitted when an error occurs while sending a request.
+ *
+ * This event MAY be emitted multiple times. You MAY intercept the exception
+ * and inject a response into the event to rescue the request using the
+ * intercept() method of the event.
  *
- * You may intercept the exception and inject a response into the event to
- * rescue the request.
+ * This event allows the request to be retried using the "retry" method of the
+ * event.
  */
-class ErrorEvent extends AbstractTransferEvent
+class ErrorEvent extends AbstractRetryableEvent
 {
-    private $exception;
-
-    /**
-     * @param TransactionInterface $transaction   Transaction that contains the request
-     * @param RequestException     $e             Exception encountered
-     * @param array                $transferStats Array of transfer statistics
-     */
-    public function __construct(
-        TransactionInterface $transaction,
-        RequestException $e,
-        $transferStats = []
-    ) {
-        parent::__construct($transaction, $transferStats);
-        $this->exception = $e;
-    }
-
-    /**
-     * Intercept the exception and inject a response
-     *
-     * @param ResponseInterface $response Response to set
-     */
-    public function intercept(ResponseInterface $response)
-    {
-        $this->stopPropagation();
-        $this->getTransaction()->setResponse($response);
-        RequestEvents::emitComplete($this->getTransaction());
-    }
-
     /**
      * Get the exception that was encountered
      *
@@ -50,16 +22,6 @@ public function intercept(ResponseInterface $response)
      */
     public function getException()
     {
-        return $this->exception;
-    }
-
-    /**
-     * Get the response the was received (if any)
-     *
-     * @return ResponseInterface|null
-     */
-    public function getResponse()
-    {
-        return $this->getException()->getResponse();
+        return $this->transaction->exception;
     }
 }
diff --git a/core/vendor/guzzlehttp/guzzle/src/Event/EventInterface.php b/core/vendor/guzzlehttp/guzzle/src/Event/EventInterface.php
index bf58f8b5146b93894fe687311ded6b012651b80d..97247e84c65610b8e6afa9d8fb4cd3ac9e34e428 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Event/EventInterface.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Event/EventInterface.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp\Event;
 
 /**
diff --git a/core/vendor/guzzlehttp/guzzle/src/Event/HasEmitterInterface.php b/core/vendor/guzzlehttp/guzzle/src/Event/HasEmitterInterface.php
index 4503dbb0b209acb6c016fb4f9462cb611dbbf490..a1a86124997870c6e1774f2d2092cfeb710967af 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Event/HasEmitterInterface.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Event/HasEmitterInterface.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp\Event;
 
 /**
diff --git a/core/vendor/guzzlehttp/guzzle/src/Event/HasEmitterTrait.php b/core/vendor/guzzlehttp/guzzle/src/Event/HasEmitterTrait.php
index 8c9be214f5b04085eff89ac8c662f3f8bbb2a3fc..8e36ce385c454aaee132869c5c6384890aafeea2 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Event/HasEmitterTrait.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Event/HasEmitterTrait.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp\Event;
 
 /**
diff --git a/core/vendor/guzzlehttp/guzzle/src/Event/HeadersEvent.php b/core/vendor/guzzlehttp/guzzle/src/Event/HeadersEvent.php
deleted file mode 100644
index 81274ff84a670d48f65a8e51cd2b3793cd1844cf..0000000000000000000000000000000000000000
--- a/core/vendor/guzzlehttp/guzzle/src/Event/HeadersEvent.php
+++ /dev/null
@@ -1,39 +0,0 @@
-<?php
-
-namespace GuzzleHttp\Event;
-
-use GuzzleHttp\Message\ResponseInterface;
-use GuzzleHttp\Adapter\TransactionInterface;
-
-/**
- * Event object emitted after the response headers of a request have been
- * received.
- *
- * You may intercept the exception and inject a response into the event to
- * rescue the request.
- */
-class HeadersEvent extends AbstractRequestEvent
-{
-    /**
-     * @param TransactionInterface $transaction Transaction that contains the
-     *     request and response.
-     * @throws \RuntimeException
-     */
-    public function __construct(TransactionInterface $transaction)
-    {
-        parent::__construct($transaction);
-        if (!$transaction->getResponse()) {
-            throw new \RuntimeException('A response must be present');
-        }
-    }
-
-    /**
-     * Get the response the was received
-     *
-     * @return ResponseInterface
-     */
-    public function getResponse()
-    {
-        return $this->getTransaction()->getResponse();
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Event/ListenerAttacherTrait.php b/core/vendor/guzzlehttp/guzzle/src/Event/ListenerAttacherTrait.php
index 637cdaea6ab9af312f9adc97e3900117037fde18..407dc92dd5e7bede72121563e4038e21152debe1 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Event/ListenerAttacherTrait.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Event/ListenerAttacherTrait.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp\Event;
 
 /**
diff --git a/core/vendor/guzzlehttp/guzzle/src/Event/ProgressEvent.php b/core/vendor/guzzlehttp/guzzle/src/Event/ProgressEvent.php
new file mode 100644
index 0000000000000000000000000000000000000000..3fd0de4ac0544fb66fcadd31c5b2003ed8889440
--- /dev/null
+++ b/core/vendor/guzzlehttp/guzzle/src/Event/ProgressEvent.php
@@ -0,0 +1,51 @@
+<?php
+namespace GuzzleHttp\Event;
+
+use GuzzleHttp\Transaction;
+
+/**
+ * Event object emitted when upload or download progress is made.
+ *
+ * You can access the progress values using their corresponding public
+ * properties:
+ *
+ * - $downloadSize: The number of bytes that will be downloaded (if known)
+ * - $downloaded: The number of bytes that have been downloaded
+ * - $uploadSize: The number of bytes that will be uploaded (if known)
+ * - $uploaded: The number of bytes that have been uploaded
+ */
+class ProgressEvent extends AbstractRequestEvent
+{
+    /** @var int Amount of data to be downloaded */
+    public $downloadSize;
+
+    /** @var int Amount of data that has been downloaded */
+    public $downloaded;
+
+    /** @var int Amount of data to upload */
+    public $uploadSize;
+
+    /** @var int Amount of data that has been uploaded */
+    public $uploaded;
+
+    /**
+     * @param Transaction $transaction  Transaction being sent.
+     * @param int         $downloadSize Amount of data to download (if known)
+     * @param int         $downloaded   Amount of data that has been downloaded
+     * @param int         $uploadSize   Amount of data to upload (if known)
+     * @param int         $uploaded     Amount of data that had been uploaded
+     */
+    public function __construct(
+        Transaction $transaction,
+        $downloadSize,
+        $downloaded,
+        $uploadSize,
+        $uploaded
+    ) {
+        parent::__construct($transaction);
+        $this->downloadSize = $downloadSize;
+        $this->downloaded = $downloaded;
+        $this->uploadSize = $uploadSize;
+        $this->uploaded = $uploaded;
+    }
+}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Event/RequestEvents.php b/core/vendor/guzzlehttp/guzzle/src/Event/RequestEvents.php
index 12e6ba28e6660b21117024cc1187d23065fbf204..f51d420654aec2dd12770b0773b835e9aefad539 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Event/RequestEvents.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Event/RequestEvents.php
@@ -1,10 +1,6 @@
 <?php
-
 namespace GuzzleHttp\Event;
 
-use GuzzleHttp\Adapter\TransactionInterface;
-use GuzzleHttp\Exception\RequestException;
-
 /**
  * Contains methods used to manage the request event lifecycle.
  */
@@ -22,112 +18,6 @@ final class RequestEvents
     const VERIFY_RESPONSE = 100;
     const REDIRECT_RESPONSE = 200;
 
-    /**
-     * Emits the before send event for a request and emits an error
-     * event if an error is encountered during the before send.
-     *
-     * @param TransactionInterface $transaction
-     *
-     * @throws RequestException
-     */
-    public static function emitBefore(TransactionInterface $transaction) {
-        $request = $transaction->getRequest();
-        try {
-            $request->getEmitter()->emit(
-                'before',
-                new BeforeEvent($transaction)
-            );
-        } catch (RequestException $e) {
-            // When a RequestException has been emitted through emitError, the
-            // exception is marked as "emitted". This means that the exception
-            // had a chance to be rescued but was not. In this case, this method
-            // must not emit the error again, but rather throw the exception.
-            // This prevents RequestExceptions encountered during the before
-            // event from being emitted to listeners twice.
-            if ($e->emittedError()) {
-                throw $e;
-            }
-            self::emitError($transaction, $e);
-        } catch (\Exception $e) {
-            self::emitError($transaction, $e);
-        }
-    }
-
-    /**
-     * Emits the complete event for a request and emits an error
-     * event if an error is encountered during the after send.
-     *
-     * @param TransactionInterface $transaction Transaction to emit for
-     * @param array                $stats       Transfer stats
-     *
-     * @throws RequestException
-     */
-    public static function emitComplete(
-        TransactionInterface $transaction,
-        array $stats = []
-    ) {
-        $request = $transaction->getRequest();
-        $transaction->getResponse()->setEffectiveUrl($request->getUrl());
-        try {
-            $request->getEmitter()->emit(
-                'complete',
-                new CompleteEvent($transaction, $stats)
-            );
-        } catch (RequestException $e) {
-            self::emitError($transaction, $e, $stats);
-        }
-    }
-
-    /**
-     * Emits the headers event for a request.
-     *
-     * @param TransactionInterface $transaction Transaction to emit for
-     */
-    public static function emitHeaders(TransactionInterface $transaction)
-    {
-        $transaction->getRequest()->getEmitter()->emit(
-            'headers',
-            new HeadersEvent($transaction)
-        );
-    }
-
-    /**
-     * Emits an error event for a request and accounts for the propagation
-     * of an error event being stopped to prevent the exception from being
-     * thrown.
-     *
-     * @param TransactionInterface $transaction
-     * @param \Exception           $e
-     * @param array                $stats
-     *
-     * @throws \GuzzleHttp\Exception\RequestException
-     */
-    public static function emitError(
-        TransactionInterface $transaction,
-        \Exception $e,
-        array $stats = []
-    ) {
-        $request = $transaction->getRequest();
-
-        // Convert non-request exception to a wrapped exception
-        if (!($e instanceof RequestException)) {
-            $e = new RequestException($e->getMessage(), $request, null, $e);
-        }
-
-        // Mark the exception as having been emitted for an error event. This
-        // works in tandem with the emitBefore method to prevent the error
-        // event from being triggered twice for the same exception.
-        $e->emittedError(true);
-
-        // Dispatch an event and allow interception
-        if (!$request->getEmitter()->emit(
-            'error',
-            new ErrorEvent($transaction, $e, $stats)
-        )->isPropagationStopped()) {
-            throw $e;
-        }
-    }
-
     /**
      * Converts an array of event options into a formatted array of valid event
      * configuration.
diff --git a/core/vendor/guzzlehttp/guzzle/src/Event/SubscriberInterface.php b/core/vendor/guzzlehttp/guzzle/src/Event/SubscriberInterface.php
index 223c23a0079855c0bc787147d8c819089d4dcf45..33d77021301841aabc7277d6a293957a2006f66d 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Event/SubscriberInterface.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Event/SubscriberInterface.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp\Event;
 
 /**
diff --git a/core/vendor/guzzlehttp/guzzle/src/Exception/AdapterException.php b/core/vendor/guzzlehttp/guzzle/src/Exception/AdapterException.php
deleted file mode 100644
index 55334c464c2132daaba5a7d6c463f6675d6c14e5..0000000000000000000000000000000000000000
--- a/core/vendor/guzzlehttp/guzzle/src/Exception/AdapterException.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-namespace GuzzleHttp\Exception;
-
-class AdapterException extends TransferException {}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Exception/BadResponseException.php b/core/vendor/guzzlehttp/guzzle/src/Exception/BadResponseException.php
index c4ee1d8235ec72031463f6fc81a9c7a64e7bf516..fd78431ea7c1c12f0b8e17cefd8e239665271451 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Exception/BadResponseException.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Exception/BadResponseException.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp\Exception;
 
 /**
diff --git a/core/vendor/guzzlehttp/guzzle/src/Exception/ClientException.php b/core/vendor/guzzlehttp/guzzle/src/Exception/ClientException.php
index d7f15c0895d3fb81544505ab9ae19c2868a3f66e..f95c09f2b1a50923056acbf108e1695e2a148bfa 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Exception/ClientException.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Exception/ClientException.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp\Exception;
 
 /**
diff --git a/core/vendor/guzzlehttp/guzzle/src/Exception/ConnectException.php b/core/vendor/guzzlehttp/guzzle/src/Exception/ConnectException.php
new file mode 100644
index 0000000000000000000000000000000000000000..a91c5a68ed933706c97328d727c9775cc63f51ac
--- /dev/null
+++ b/core/vendor/guzzlehttp/guzzle/src/Exception/ConnectException.php
@@ -0,0 +1,4 @@
+<?php
+namespace GuzzleHttp\Exception;
+
+class ConnectException extends RequestException {}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Exception/CouldNotRewindStreamException.php b/core/vendor/guzzlehttp/guzzle/src/Exception/CouldNotRewindStreamException.php
index c3a0964597d493220861f5d21ffdd726d465c905..fbe2dcd7cc908a99b7c89673cb049fd09db50693 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Exception/CouldNotRewindStreamException.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Exception/CouldNotRewindStreamException.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp\Exception;
 
 class CouldNotRewindStreamException extends RequestException {}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Exception/ParseException.php b/core/vendor/guzzlehttp/guzzle/src/Exception/ParseException.php
index 378b9c07dff2550fc5c8b78b00ffea9a3ea52ed5..e593e3d5e5ddb0b006b763498b5a5ac30f04ff02 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Exception/ParseException.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Exception/ParseException.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp\Exception;
 
 use GuzzleHttp\Message\ResponseInterface;
diff --git a/core/vendor/guzzlehttp/guzzle/src/Exception/RequestException.php b/core/vendor/guzzlehttp/guzzle/src/Exception/RequestException.php
index ee953a9c742d580453d73e9178aa3965aa1ffcb2..293e217a8ec6833e39c2bd9321c1d7c6fd4ab214 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Exception/RequestException.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Exception/RequestException.php
@@ -1,18 +1,17 @@
 <?php
-
 namespace GuzzleHttp\Exception;
 
 use GuzzleHttp\Message\RequestInterface;
 use GuzzleHttp\Message\ResponseInterface;
+use GuzzleHttp\Ring\Exception\ConnectException;
+use GuzzleHttp\Exception\ConnectException as HttpConnectException;
+use GuzzleHttp\Ring\Future\FutureInterface;
 
 /**
  * HTTP Request exception
  */
 class RequestException extends TransferException
 {
-    /** @var bool */
-    private $emittedErrorEvent = false;
-
     /** @var RequestInterface */
     private $request;
 
@@ -20,17 +19,39 @@ class RequestException extends TransferException
     private $response;
 
     public function __construct(
-        $message = '',
+        $message,
         RequestInterface $request,
         ResponseInterface $response = null,
         \Exception $previous = null
     ) {
-        $code = $response ? $response->getStatusCode() : 0;
+        // Set the code of the exception if the response is set and not future.
+        $code = $response && !($response instanceof FutureInterface)
+            ? $response->getStatusCode()
+            : 0;
         parent::__construct($message, $code, $previous);
         $this->request = $request;
         $this->response = $response;
     }
 
+    /**
+     * Wrap non-RequesExceptions with a RequestException
+     *
+     * @param RequestInterface $request
+     * @param \Exception       $e
+     *
+     * @return RequestException
+     */
+    public static function wrapException(RequestInterface $request, \Exception $e)
+    {
+        if ($e instanceof RequestException) {
+            return $e;
+        } elseif ($e instanceof ConnectException) {
+            return new HttpConnectException($e->getMessage(), $request, null, $e);
+        } else {
+            return new RequestException($e->getMessage(), $request, null, $e);
+        }
+    }
+
     /**
      * Factory method to create a new exception with a normalized error message
      *
@@ -97,28 +118,4 @@ public function hasResponse()
     {
         return $this->response !== null;
     }
-
-    /**
-     * Check or set if the exception was emitted in an error event.
-     *
-     * This value is used in the RequestEvents::emitBefore() method to check
-     * to see if an exception has already been emitted in an error event.
-     *
-     * @param bool|null Set to true to set the exception as having emitted an
-     *     error. Leave null to retrieve the current setting.
-     *
-     * @return null|bool
-     * @throws \InvalidArgumentException if you attempt to set the value to false
-     */
-    public function emittedError($value = null)
-    {
-        if ($value === null) {
-            return $this->emittedErrorEvent;
-        } elseif ($value === true) {
-            return $this->emittedErrorEvent = true;
-        } else {
-            throw new \InvalidArgumentException('You cannot set the emitted '
-                . 'error value to false.');
-        }
-    }
 }
diff --git a/core/vendor/guzzlehttp/guzzle/src/Exception/ServerException.php b/core/vendor/guzzlehttp/guzzle/src/Exception/ServerException.php
index d67ed27e3429d7e75f5290abdc1baa0087ac3943..7cdd340866b63b318e78b38981565d3e78eaacdd 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Exception/ServerException.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Exception/ServerException.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp\Exception;
 
 /**
diff --git a/core/vendor/guzzlehttp/guzzle/src/Exception/StateException.php b/core/vendor/guzzlehttp/guzzle/src/Exception/StateException.php
new file mode 100644
index 0000000000000000000000000000000000000000..a7652a384fd198eb2f07b8a73e2cb264232a1e42
--- /dev/null
+++ b/core/vendor/guzzlehttp/guzzle/src/Exception/StateException.php
@@ -0,0 +1,4 @@
+<?php
+namespace GuzzleHttp\Exception;
+
+class StateException extends TransferException {};
diff --git a/core/vendor/guzzlehttp/guzzle/src/Exception/TooManyRedirectsException.php b/core/vendor/guzzlehttp/guzzle/src/Exception/TooManyRedirectsException.php
index e7feaa53e8dddd71a7d2cff7bc878a35c243b870..b60a9678d650676bdecd6fab6740d0f9a39e7849 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Exception/TooManyRedirectsException.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Exception/TooManyRedirectsException.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp\Exception;
 
 class TooManyRedirectsException extends RequestException {}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Exception/TransferException.php b/core/vendor/guzzlehttp/guzzle/src/Exception/TransferException.php
index 72887b47506164a60edf4785ce5eb77306c56886..92d7de6917285fbd7962f82b206c8cd1e926176e 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Exception/TransferException.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Exception/TransferException.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp\Exception;
 
 class TransferException extends \RuntimeException {}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Exception/XmlParseException.php b/core/vendor/guzzlehttp/guzzle/src/Exception/XmlParseException.php
new file mode 100644
index 0000000000000000000000000000000000000000..a4a1a0af4721127535c146f3d8d6abd37e8a79da
--- /dev/null
+++ b/core/vendor/guzzlehttp/guzzle/src/Exception/XmlParseException.php
@@ -0,0 +1,34 @@
+<?php
+
+namespace GuzzleHttp\Exception;
+
+use GuzzleHttp\Message\ResponseInterface;
+
+/**
+ * Exception when a client is unable to parse the response body as XML
+ */
+class XmlParseException extends ParseException
+{
+    /** @var \LibXMLError */
+    protected $error;
+
+    public function __construct(
+        $message = '',
+        ResponseInterface $response = null,
+        \Exception $previous = null,
+        \LibXMLError $error = null
+    ) {
+        parent::__construct($message, $response, $previous);
+        $this->error = $error;
+    }
+
+    /**
+     * Get the associated error
+     *
+     * @return \LibXMLError|null
+     */
+    public function getError()
+    {
+        return $this->error;
+    }
+}
diff --git a/core/vendor/guzzlehttp/guzzle/src/HasDataTrait.php b/core/vendor/guzzlehttp/guzzle/src/HasDataTrait.php
index c4c50f2ee08ac71c2e72a47018b557b8b3af97f0..020dfc9aba2661461a142b820b6ffd8be38538e2 100644
--- a/core/vendor/guzzlehttp/guzzle/src/HasDataTrait.php
+++ b/core/vendor/guzzlehttp/guzzle/src/HasDataTrait.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp;
 
 /**
@@ -56,7 +55,7 @@ public function count()
      */
     public function getPath($path)
     {
-        return \GuzzleHttp\get_path($this->data, $path);
+        return Utils::getPath($this->data, $path);
     }
 
     /**
@@ -71,6 +70,6 @@ public function getPath($path)
      */
     public function setPath($path, $value)
     {
-        \GuzzleHttp\set_path($this->data, $path, $value);
+        Utils::setPath($this->data, $path, $value);
     }
 }
diff --git a/core/vendor/guzzlehttp/guzzle/src/Message/AbstractMessage.php b/core/vendor/guzzlehttp/guzzle/src/Message/AbstractMessage.php
index 52e306f3206298b81dd279ce483ef3523bfd8b39..0c675758dd2a029289d106d8b808676f06e8730d 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Message/AbstractMessage.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Message/AbstractMessage.php
@@ -37,33 +37,23 @@ public function setBody(StreamInterface $body = null)
     {
         if ($body === null) {
             // Setting a null body will remove the body of the request
-            $this->removeHeader('Content-Length')
-                ->removeHeader('Transfer-Encoding');
+            $this->removeHeader('Content-Length');
+            $this->removeHeader('Transfer-Encoding');
         }
 
         $this->body = $body;
-
-        return $this;
     }
 
     public function addHeader($header, $value)
     {
-        static $valid = ['string' => true, 'integer' => true,
-            'double' => true, 'array' => true];
-
-        $type = gettype($value);
-        if (!isset($valid[$type])) {
-            throw new \InvalidArgumentException('Invalid header value');
-        }
-
-        if ($type == 'array') {
-            $current = array_merge($this->getHeader($header, true), $value);
+        if (is_array($value)) {
+            $current = array_merge($this->getHeaderAsArray($header), $value);
         } else {
-            $current = $this->getHeader($header, true);
-            $current[] = $value;
+            $current = $this->getHeaderAsArray($header);
+            $current[] = (string) $value;
         }
 
-        return $this->setHeader($header, $current);
+        $this->setHeader($header, $current);
     }
 
     public function addHeaders(array $headers)
@@ -73,17 +63,18 @@ public function addHeaders(array $headers)
         }
     }
 
-    public function getHeader($header, $asArray = false)
+    public function getHeader($header)
     {
         $name = strtolower($header);
+        return isset($this->headers[$name])
+            ? implode(', ', $this->headers[$name])
+            : '';
+    }
 
-        if (!isset($this->headers[$name])) {
-            return $asArray ? [] : '';
-        }
-
-        return $asArray
-            ? $this->headers[$name]
-            : implode(', ', $this->headers[$name]);
+    public function getHeaderAsArray($header)
+    {
+        $name = strtolower($header);
+        return isset($this->headers[$name]) ? $this->headers[$name] : [];
     }
 
     public function getHeaders()
@@ -102,26 +93,14 @@ public function setHeader($header, $value)
         $name = strtolower($header);
         $this->headerNames[$name] = $header;
 
-        switch (gettype($value)) {
-            case 'string':
-                $this->headers[$name] = [trim($value)];
-                break;
-            case 'integer':
-            case 'double':
-                $this->headers[$name] = [(string) $value];
-                break;
-            case 'array':
-                foreach ($value as &$v) {
-                    $v = trim($v);
-                }
-                $this->headers[$name] = $value;
-                break;
-            default:
-                throw new \InvalidArgumentException('Invalid header value '
-                    . 'provided: ' . var_export($value, true));
+        if (is_array($value)) {
+            foreach ($value as &$v) {
+                $v = trim($v);
+            }
+            $this->headers[$name] = $value;
+        } else {
+            $this->headers[$name] = [trim($value)];
         }
-
-        return $this;
     }
 
     public function setHeaders(array $headers)
@@ -130,8 +109,6 @@ public function setHeaders(array $headers)
         foreach ($headers as $key => $value) {
             $this->setHeader($key, $value);
         }
-
-        return $this;
     }
 
     public function hasHeader($header)
@@ -143,8 +120,6 @@ public function removeHeader($header)
     {
         $name = strtolower($header);
         unset($this->headers[$name], $this->headerNames[$name]);
-
-        return $this;
     }
 
     /**
@@ -194,7 +169,7 @@ public static function parseHeader(MessageInterface $message, $header)
      */
     public static function normalizeHeader(MessageInterface $message, $header)
     {
-        $h = $message->getHeader($header, true);
+        $h = $message->getHeaderAsArray($header);
         for ($i = 0, $total = count($h); $i < $total; $i++) {
             if (strpos($h[$i], ',') === false) {
                 continue;
diff --git a/core/vendor/guzzlehttp/guzzle/src/Message/FutureResponse.php b/core/vendor/guzzlehttp/guzzle/src/Message/FutureResponse.php
new file mode 100644
index 0000000000000000000000000000000000000000..5e5037e1b921369f58846e3091a852e825ec96a9
--- /dev/null
+++ b/core/vendor/guzzlehttp/guzzle/src/Message/FutureResponse.php
@@ -0,0 +1,158 @@
+<?php
+namespace GuzzleHttp\Message;
+
+use GuzzleHttp\Ring\Future\MagicFutureTrait;
+use GuzzleHttp\Ring\Future\FutureInterface;
+use GuzzleHttp\Stream\StreamInterface;
+
+/**
+ * Represents a response that has not been fulfilled.
+ *
+ * When created, you must provide a function that is used to dereference the
+ * future result and return it's value. The function has no arguments and MUST
+ * return an instance of a {@see GuzzleHttp\Message\ResponseInterface} object.
+ *
+ * You can optionally provide a function in the constructor that can be used to
+ * cancel the future from completing if possible. This function has no
+ * arguments and returns a boolean value representing whether or not the
+ * response could be cancelled.
+ *
+ * @property ResponseInterface $_value
+ */
+class FutureResponse implements ResponseInterface, FutureInterface
+{
+    use MagicFutureTrait;
+
+    /**
+     * Returns a FutureResponse that wraps another future.
+     *
+     * @param FutureInterface $future      Future to wrap with a new future
+     * @param callable        $onFulfilled Invoked when the future fulfilled
+     * @param callable        $onRejected  Invoked when the future rejected
+     * @param callable        $onProgress  Invoked when the future progresses
+     *
+     * @return FutureResponse
+     */
+    public static function proxy(
+        FutureInterface $future,
+        callable $onFulfilled = null,
+        callable $onRejected = null,
+        callable $onProgress = null
+    ) {
+        return new FutureResponse(
+            $future->then($onFulfilled, $onRejected, $onProgress),
+            [$future, 'wait'],
+            [$future, 'cancel']
+        );
+    }
+
+    public function getStatusCode()
+    {
+        return $this->_value->getStatusCode();
+    }
+
+    public function setStatusCode($code)
+    {
+        $this->_value->setStatusCode($code);
+    }
+
+    public function getReasonPhrase()
+    {
+        return $this->_value->getReasonPhrase();
+    }
+
+    public function setReasonPhrase($phrase)
+    {
+        $this->_value->setReasonPhrase($phrase);
+    }
+
+    public function getEffectiveUrl()
+    {
+        return $this->_value->getEffectiveUrl();
+    }
+
+    public function setEffectiveUrl($url)
+    {
+        $this->_value->setEffectiveUrl($url);
+    }
+
+    public function json(array $config = [])
+    {
+        return $this->_value->json($config);
+    }
+
+    public function xml(array $config = [])
+    {
+        return $this->_value->xml($config);
+    }
+
+    public function __toString()
+    {
+        try {
+            return $this->_value->__toString();
+        } catch (\Exception $e) {
+            trigger_error($e->getMessage(), E_USER_WARNING);
+            return '';
+        }
+    }
+
+    public function getProtocolVersion()
+    {
+        return $this->_value->getProtocolVersion();
+    }
+
+    public function setBody(StreamInterface $body = null)
+    {
+        $this->_value->setBody($body);
+    }
+
+    public function getBody()
+    {
+        return $this->_value->getBody();
+    }
+
+    public function getHeaders()
+    {
+        return $this->_value->getHeaders();
+    }
+
+    public function getHeader($header)
+    {
+        return $this->_value->getHeader($header);
+    }
+
+    public function getHeaderAsArray($header)
+    {
+        return $this->_value->getHeaderAsArray($header);
+    }
+
+    public function hasHeader($header)
+    {
+        return $this->_value->hasHeader($header);
+    }
+
+    public function removeHeader($header)
+    {
+        $this->_value->removeHeader($header);
+    }
+
+    public function addHeader($header, $value)
+    {
+        $this->_value->addHeader($header, $value);
+    }
+
+    public function addHeaders(array $headers)
+    {
+        $this->_value->addHeaders($headers);
+    }
+
+    public function setHeader($header, $value)
+    {
+        $this->_value->setHeader($header, $value);
+    }
+
+    public function setHeaders(array $headers)
+    {
+        $this->_value->setHeaders($headers);
+    }
+}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Message/MessageFactory.php b/core/vendor/guzzlehttp/guzzle/src/Message/MessageFactory.php
index 015ac86e8dd990b564a5fa0afa3ff54b927cd73a..5b52ad66a8048411868da5f53588a63d19de3931 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Message/MessageFactory.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Message/MessageFactory.php
@@ -1,19 +1,19 @@
 <?php
-
 namespace GuzzleHttp\Message;
 
-use GuzzleHttp\Event\ListenerAttacherTrait;
-use GuzzleHttp\Post\PostFileInterface;
-use GuzzleHttp\Subscriber\Cookie;
 use GuzzleHttp\Cookie\CookieJar;
 use GuzzleHttp\Cookie\CookieJarInterface;
-use GuzzleHttp\Subscriber\HttpError;
+use GuzzleHttp\Event\ListenerAttacherTrait;
 use GuzzleHttp\Post\PostBody;
 use GuzzleHttp\Post\PostFile;
-use GuzzleHttp\Subscriber\Redirect;
-use GuzzleHttp\Stream;
+use GuzzleHttp\Post\PostFileInterface;
 use GuzzleHttp\Query;
+use GuzzleHttp\Stream\Stream;
+use GuzzleHttp\Subscriber\Cookie;
+use GuzzleHttp\Subscriber\HttpError;
+use GuzzleHttp\Subscriber\Redirect;
 use GuzzleHttp\Url;
+use \InvalidArgumentException as Iae;
 
 /**
  * Default HTTP request factory used to create Request and Response objects.
@@ -29,12 +29,33 @@ class MessageFactory implements MessageFactoryInterface
     private $redirectPlugin;
 
     /** @var array */
-    protected static $classMethods = [];
+    private $customOptions;
+
+    /** @var array Request options passed through to request Config object */
+    private static $configMap = [
+        'connect_timeout' => 1, 'timeout' => 1, 'verify' => 1, 'ssl_key' => 1,
+        'cert' => 1, 'proxy' => 1, 'debug' => 1, 'save_to' => 1, 'stream' => 1,
+        'expect' => 1, 'future' => 1
+    ];
+
+    /** @var array Default allow_redirects request option settings  */
+    private static $defaultRedirect = [
+        'max'     => 5,
+        'strict'  => false,
+        'referer' => false
+    ];
 
-    public function __construct()
+    /**
+     * @param array $customOptions Associative array of custom request option
+     *                             names mapping to functions used to apply
+     *                             the option. The function accepts the request
+     *                             and the option value to apply.
+     */
+    public function __construct(array $customOptions = [])
     {
         $this->errorPlugin = new HttpError();
         $this->redirectPlugin = new Redirect();
+        $this->customOptions = $customOptions;
     }
 
     public function createResponse(
@@ -44,7 +65,7 @@ public function createResponse(
         array $options = []
     ) {
         if (null !== $body) {
-            $body = Stream\create($body);
+            $body = Stream::factory($body);
         }
 
         return new Response($statusCode, $headers, $body, $options);
@@ -65,9 +86,9 @@ public function createRequest($method, $url, array $options = [])
         unset($options['config']);
 
         // Use a POST body by default
-        if ($method == 'POST' &&
-            !isset($options['body']) &&
-            !isset($options['json'])
+        if ($method == 'POST'
+            && !isset($options['body'])
+            && !isset($options['json'])
         ) {
             $options['body'] = [];
         }
@@ -157,192 +178,191 @@ protected function applyOptions(
         RequestInterface $request,
         array $options = []
     ) {
-        // Values specified in the config map are passed to request options
-        static $configMap = ['connect_timeout' => 1, 'timeout' => 1,
-            'verify' => 1, 'ssl_key' => 1, 'cert' => 1, 'proxy' => 1,
-            'debug' => 1, 'save_to' => 1, 'stream' => 1, 'expect' => 1];
-
-        // Take the class of the instance, not the parent
-        $selfClass = get_class($this);
-
-        // Check if we already took it's class methods and had them saved
-        if (!isset(self::$classMethods[$selfClass])) {
-            self::$classMethods[$selfClass] = array_flip(get_class_methods($this));
-        }
-
-        // Take class methods of this particular instance
-        $methods = self::$classMethods[$selfClass];
-
-        // Iterate over each key value pair and attempt to apply a config using
-        // double dispatch.
         $config = $request->getConfig();
+        $emitter = $request->getEmitter();
+
         foreach ($options as $key => $value) {
-            $method = "add_{$key}";
-            if (isset($methods[$method])) {
-                $this->{$method}($request, $value);
-            } elseif (isset($configMap[$key])) {
+
+            if (isset(self::$configMap[$key])) {
                 $config[$key] = $value;
-            } else {
-                throw new \InvalidArgumentException("No method is configured "
-                    . "to handle the {$key} config key");
+                continue;
             }
-        }
-    }
 
-    private function add_body(RequestInterface $request, $value)
-    {
-        if ($value !== null) {
-            if (is_array($value)) {
-                $this->addPostData($request, $value);
-            } else {
-                $request->setBody(Stream\create($value));
-            }
-        }
-    }
+            switch ($key) {
 
-    private function add_allow_redirects(RequestInterface $request, $value)
-    {
-        static $defaultRedirect = [
-            'max'     => 5,
-            'strict'  => false,
-            'referer' => false
-        ];
-
-        if ($value === false) {
-            return;
-        }
+            case 'allow_redirects':
 
-        if ($value === true) {
-            $value = $defaultRedirect;
-        } elseif (!isset($value['max'])) {
-            throw new \InvalidArgumentException('allow_redirects must be '
-                . 'true, false, or an array that contains the \'max\' key');
-        } else {
-            // Merge the default settings with the provided settings
-            $value += $defaultRedirect;
-        }
+                if ($value === false) {
+                    continue;
+                }
 
-        $request->getConfig()['redirect'] = $value;
-        $request->getEmitter()->attach($this->redirectPlugin);
-    }
+                if ($value === true) {
+                    $value = self::$defaultRedirect;
+                } elseif (!isset($value['max'])) {
+                    throw new Iae('allow_redirects must be true, false, or an '
+                        . 'array that contains the \'max\' key');
+                } else {
+                    // Merge the default settings with the provided settings
+                    $value += self::$defaultRedirect;
+                }
 
-    private function add_exceptions(RequestInterface $request, $value)
-    {
-        if ($value === true) {
-            $request->getEmitter()->attach($this->errorPlugin);
-        }
-    }
+                $config['redirect'] = $value;
+                $emitter->attach($this->redirectPlugin);
+                break;
 
-    private function add_auth(RequestInterface $request, $value)
-    {
-        if (!$value) {
-            return;
-        } elseif (is_array($value)) {
-            $authType = isset($value[2]) ? strtolower($value[2]) : 'basic';
-        } else {
-            $authType = strtolower($value);
-        }
+            case 'decode_content':
 
-        $request->getConfig()->set('auth', $value);
+                if ($value === false) {
+                    continue;
+                }
 
-        if ($authType == 'basic') {
-            $request->setHeader(
-                'Authorization',
-                'Basic ' . base64_encode("$value[0]:$value[1]")
-            );
-        } elseif ($authType == 'digest') {
-            // Currently only implemented by the cURL adapter.
-            // @todo: Need an event listener solution that does not rely on cURL
-            $config = $request->getConfig();
-            $config->setPath('curl/' . CURLOPT_HTTPAUTH, CURLAUTH_DIGEST);
-            $config->setPath('curl/' . CURLOPT_USERPWD, "$value[0]:$value[1]");
-        }
-    }
+                $config['decode_content'] = true;
+                if ($value !== true) {
+                    $request->setHeader('Accept-Encoding', $value);
+                }
+                break;
 
-    private function add_query(RequestInterface $request, $value)
-    {
-        if ($value instanceof Query) {
-            $original = $request->getQuery();
-            // Do not overwrite existing query string variables by overwriting
-            // the object with the query string data passed in the URL
-            $request->setQuery($value->overwriteWith($original->toArray()));
-        } elseif (is_array($value)) {
-            // Do not overwrite existing query string variables
-            $query = $request->getQuery();
-            foreach ($value as $k => $v) {
-                if (!isset($query[$k])) {
-                    $query[$k] = $v;
+            case 'headers':
+
+                if (!is_array($value)) {
+                    throw new Iae('header value must be an array');
                 }
-            }
-        } else {
-            throw new \InvalidArgumentException('query value must be an array '
-                . 'or Query object');
-        }
-    }
 
-    private function add_headers(RequestInterface $request, $value)
-    {
-        if (!is_array($value)) {
-            throw new \InvalidArgumentException('header value must be an array');
-        }
+                // Do not overwrite existing headers
+                foreach ($value as $k => $v) {
+                    if (!$request->hasHeader($k)) {
+                        $request->setHeader($k, $v);
+                    }
+                }
+                break;
 
-        // Do not overwrite existing headers
-        foreach ($value as $k => $v) {
-            if (!$request->hasHeader($k)) {
-                $request->setHeader($k, $v);
-            }
-        }
-    }
+            case 'exceptions':
 
-    private function add_cookies(RequestInterface $request, $value)
-    {
-        if ($value === true) {
-            static $cookie = null;
-            if (!$cookie) {
-                $cookie = new Cookie();
-            }
-            $request->getEmitter()->attach($cookie);
-        } elseif (is_array($value)) {
-            $request->getEmitter()->attach(
-                new Cookie(CookieJar::fromArray($value, $request->getHost()))
-            );
-        } elseif ($value instanceof CookieJarInterface) {
-            $request->getEmitter()->attach(new Cookie($value));
-        } elseif ($value !== false) {
-            throw new \InvalidArgumentException('cookies must be an array, '
-                . 'true, or a CookieJarInterface object');
-        }
-    }
+                if ($value === true) {
+                    $emitter->attach($this->errorPlugin);
+                }
+                break;
 
-    private function add_events(RequestInterface $request, $value)
-    {
-        if (!is_array($value)) {
-            throw new \InvalidArgumentException('events value must be an array');
-        }
+            case 'body':
 
-        $this->attachListeners($request, $this->prepareListeners($value,
-            ['before', 'complete', 'error', 'headers']
-        ));
-    }
+                if (is_array($value)) {
+                    $this->addPostData($request, $value);
+                } elseif ($value !== null) {
+                    $request->setBody(Stream::factory($value));
+                }
+                break;
 
-    private function add_subscribers(RequestInterface $request, $value)
-    {
-        if (!is_array($value)) {
-            throw new \InvalidArgumentException('subscribers must be an array');
-        }
+            case 'auth':
 
-        $emitter = $request->getEmitter();
-        foreach ($value as $subscribers) {
-            $emitter->attach($subscribers);
-        }
-    }
+                if (!$value) {
+                    continue;
+                }
 
-    private function add_json(RequestInterface $request, $value)
-    {
-        if (!$request->hasHeader('Content-Type')) {
-            $request->setHeader('Content-Type', 'application/json');
-        }
+                if (is_array($value)) {
+                    $type = isset($value[2]) ? strtolower($value[2]) : 'basic';
+                } else {
+                    $type = strtolower($value);
+                }
+
+                $config['auth'] = $value;
+
+                if ($type == 'basic') {
+                    $request->setHeader(
+                        'Authorization',
+                        'Basic ' . base64_encode("$value[0]:$value[1]")
+                    );
+                } elseif ($type == 'digest') {
+                    // @todo: Do not rely on curl
+                    $config->setPath('curl/' . CURLOPT_HTTPAUTH, CURLAUTH_DIGEST);
+                    $config->setPath('curl/' . CURLOPT_USERPWD, "$value[0]:$value[1]");
+                }
+                break;
+
+            case 'query':
+
+                if ($value instanceof Query) {
+                    $original = $request->getQuery();
+                    // Do not overwrite existing query string variables by
+                    // overwriting the object with the query string data passed
+                    // in the URL
+                    $value->overwriteWith($original->toArray());
+                    $request->setQuery($value);
+                } elseif (is_array($value)) {
+                    // Do not overwrite existing query string variables
+                    $query = $request->getQuery();
+                    foreach ($value as $k => $v) {
+                        if (!isset($query[$k])) {
+                            $query[$k] = $v;
+                        }
+                    }
+                } else {
+                    throw new Iae('query must be an array or Query object');
+                }
+                break;
+
+            case 'cookies':
+
+                if ($value === true) {
+                    static $cookie = null;
+                    if (!$cookie) {
+                        $cookie = new Cookie();
+                    }
+                    $emitter->attach($cookie);
+                } elseif (is_array($value)) {
+                    $emitter->attach(
+                        new Cookie(CookieJar::fromArray($value, $request->getHost()))
+                    );
+                } elseif ($value instanceof CookieJarInterface) {
+                    $emitter->attach(new Cookie($value));
+                } elseif ($value !== false) {
+                    throw new Iae('cookies must be an array, true, or CookieJarInterface');
+                }
+                break;
+
+            case 'events':
+
+                if (!is_array($value)) {
+                    throw new Iae('events must be an array');
+                }
+
+                $this->attachListeners($request,
+                    $this->prepareListeners(
+                        $value,
+                        ['before', 'complete', 'error', 'progress', 'end']
+                    )
+                );
+                break;
+
+            case 'subscribers':
 
-        $request->setBody(Stream\create(json_encode($value)));
+                if (!is_array($value)) {
+                    throw new Iae('subscribers must be an array');
+                }
+
+                foreach ($value as $subscribers) {
+                    $emitter->attach($subscribers);
+                }
+                break;
+
+            case 'json':
+
+                $request->setBody(Stream::factory(json_encode($value)));
+                if (!$request->hasHeader('Content-Type')) {
+                    $request->setHeader('Content-Type', 'application/json');
+                }
+                break;
+
+            default:
+
+                // Check for custom handler functions.
+                if (isset($this->customOptions[$key])) {
+                    $fn = $this->customOptions[$key];
+                    $fn($request, $value);
+                    continue;
+                }
+
+                throw new Iae("No method can handle the {$key} config key");
+            }
+        }
     }
 }
diff --git a/core/vendor/guzzlehttp/guzzle/src/Message/MessageFactoryInterface.php b/core/vendor/guzzlehttp/guzzle/src/Message/MessageFactoryInterface.php
index daab04273a2f84ae03f76879fd679e0b6bfd605b..57c43e5cd7555d0c73612b8e9708634ed593c30a 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Message/MessageFactoryInterface.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Message/MessageFactoryInterface.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp\Message;
 
 use GuzzleHttp\Url;
@@ -55,10 +54,11 @@ public function createResponse(
      * - cert: Path a SSL cert or array of (path, pwd)
      * - ssl_key: Path to a private SSL key or array of (path, pwd)
      * - proxy: Specify an HTTP proxy or hash of protocols to proxies
-     * - debug: Set to true or a resource to view adapter specific debug info
+     * - debug: Set to true or a resource to view handler specific debug info
      * - stream: Set to true to stream a response body rather than download it all up front
      * - expect: true/false/integer Controls the "Expect: 100-Continue" header
      * - config: Associative array of request config collection options
+     * - decode_content: true/false/string to control decoding content-encoding responses
      *
      * @param string     $method  HTTP method (GET, POST, PUT, etc.)
      * @param string|Url $url     HTTP URL to connect to
diff --git a/core/vendor/guzzlehttp/guzzle/src/Message/MessageInterface.php b/core/vendor/guzzlehttp/guzzle/src/Message/MessageInterface.php
index 2900d0e13ab936154edb4744bf4c43dfff485cc1..b2b472b6edddd0a3f8cd8f667d1691c9f4244fcf 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Message/MessageInterface.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Message/MessageInterface.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp\Message;
 
 use GuzzleHttp\Stream\StreamInterface;
@@ -30,8 +29,6 @@ public function getProtocolVersion();
      * remove the existing body.
      *
      * @param StreamInterface|null $body Body.
-     *
-     * @return self Returns the message.
      */
     public function setBody(StreamInterface $body = null);
 
@@ -60,19 +57,20 @@ public function getHeaders();
     /**
      * Retrieve a header by the given case-insensitive name.
      *
-     * By default, this method returns all of the header values of the given
-     * case-insensitive header name as a string concatenated together using
-     * a comma. Because some header should not be concatenated together using a
-     * comma, this method provides a Boolean argument that can be used to
-     * retrieve the associated header values as an array of strings.
+     * @param string $header Case-insensitive header name.
+     *
+     * @return string
+     */
+    public function getHeader($header);
+
+    /**
+     * Retrieves a header by the given case-insensitive name as an array of strings.
      *
-     * @param string $header  Case-insensitive header name.
-     * @param bool   $asArray Set to true to retrieve the header value as an
-     *                        array of strings.
+     * @param string $header Case-insensitive header name.
      *
-     * @return array|string
+     * @return string[]
      */
-    public function getHeader($header, $asArray = false);
+    public function getHeaderAsArray($header);
 
     /**
      * Checks if a header exists by the given case-insensitive name.
@@ -89,8 +87,6 @@ public function hasHeader($header);
      * Remove a specific header by case-insensitive name.
      *
      * @param string $header Case-insensitive header name.
-     *
-     * @return self
      */
     public function removeHeader($header);
 
@@ -100,8 +96,6 @@ public function removeHeader($header);
      *
      * @param string $header Header name to add
      * @param string $value  Value of the header
-     *
-     * @return self
      */
     public function addHeader($header, $value);
 
@@ -115,8 +109,6 @@ public function addHeader($header, $value);
      * header is added.
      *
      * @param array $headers Associative array of headers to add to the message
-     *
-     * @return self
      */
     public function addHeaders(array $headers);
 
@@ -128,8 +120,6 @@ public function addHeaders(array $headers);
      *
      * @param string       $header Header name
      * @param string|array $value  Header value(s)
-     *
-     * @return self Returns the message.
      */
     public function setHeader($header, $value);
 
@@ -141,8 +131,6 @@ public function setHeader($header, $value);
      * string or an array of strings.
      *
      * @param array $headers Headers to set.
-     *
-     * @return self Returns the message.
      */
     public function setHeaders(array $headers);
 }
diff --git a/core/vendor/guzzlehttp/guzzle/src/Message/MessageParser.php b/core/vendor/guzzlehttp/guzzle/src/Message/MessageParser.php
index 777ce26e9d7c8c5bf2c6feb7a4ceb66f87eced7d..c3cc195e3293645732fa72edfedfb3cb7486670d 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Message/MessageParser.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Message/MessageParser.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp\Message;
 
 /**
diff --git a/core/vendor/guzzlehttp/guzzle/src/Message/Request.php b/core/vendor/guzzlehttp/guzzle/src/Message/Request.php
index efc54503278ab1df06f3ed176a188abba566dbd4..4dbe32e6406878b69ea85aabe98742fef98735ee 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Message/Request.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Message/Request.php
@@ -1,8 +1,8 @@
 <?php
 namespace GuzzleHttp\Message;
 
-use GuzzleHttp\Event\HasEmitterTrait;
 use GuzzleHttp\Collection;
+use GuzzleHttp\Event\HasEmitterTrait;
 use GuzzleHttp\Subscriber\Prepare;
 use GuzzleHttp\Url;
 
@@ -69,8 +69,6 @@ public function setUrl($url)
     {
         $this->url = $url instanceof Url ? $url : Url::fromString($url);
         $this->updateHostHeaderFromUrl();
-
-        return $this;
     }
 
     public function getUrl()
@@ -81,8 +79,6 @@ public function getUrl()
     public function setQuery($query)
     {
         $this->url->setQuery($query);
-
-        return $this;
     }
 
     public function getQuery()
@@ -93,8 +89,6 @@ public function getQuery()
     public function setMethod($method)
     {
         $this->method = strtoupper($method);
-
-        return $this;
     }
 
     public function getMethod()
@@ -110,8 +104,6 @@ public function getScheme()
     public function setScheme($scheme)
     {
         $this->url->setScheme($scheme);
-
-        return $this;
     }
 
     public function getPort()
@@ -123,8 +115,6 @@ public function setPort($port)
     {
         $this->url->setPort($port);
         $this->updateHostHeaderFromUrl();
-
-        return $this;
     }
 
     public function getHost()
@@ -136,8 +126,6 @@ public function setHost($host)
     {
         $this->url->setHost($host);
         $this->updateHostHeaderFromUrl();
-
-        return $this;
     }
 
     public function getPath()
@@ -148,8 +136,6 @@ public function getPath()
     public function setPath($path)
     {
         $this->url->setPath($path);
-
-        return $this;
     }
 
     public function getResource()
diff --git a/core/vendor/guzzlehttp/guzzle/src/Message/RequestInterface.php b/core/vendor/guzzlehttp/guzzle/src/Message/RequestInterface.php
index 8cd5de7be8ff766661bf6d0b4df2cacb3b8fe2f0..f6a69d1e1f1c375e3961c37511fcb060afdcda1a 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Message/RequestInterface.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Message/RequestInterface.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp\Message;
 
 use GuzzleHttp\Event\HasEmitterInterface;
@@ -18,7 +17,6 @@ interface RequestInterface extends MessageInterface, HasEmitterInterface
      *
      * @param string $url Request URL.
      *
-     * @return self Reference to the request.
      * @throws \InvalidArgumentException If the URL is invalid.
      */
     public function setUrl($url);
@@ -50,8 +48,6 @@ public function getQuery();
      * Set the query string used by the request
      *
      * @param array|Query $query Query to set
-     *
-     * @return self
      */
     public function setQuery($query);
 
@@ -66,8 +62,6 @@ public function getMethod();
      * Set the HTTP method of the request.
      *
      * @param string $method HTTP method
-     *
-     * @return self
      */
     public function setMethod($method);
 
@@ -82,8 +76,6 @@ public function getScheme();
      * Set the URI scheme of the request (http, https, etc.).
      *
      * @param string $scheme Scheme to set
-     *
-     * @return self
      */
     public function setScheme($scheme);
 
@@ -100,8 +92,6 @@ public function getPort();
      * Setting a port modifies the Host header of a request as necessary.
      *
      * @param int $port Port to set
-     *
-     * @return self
      */
     public function setPort($port);
 
@@ -120,8 +110,6 @@ public function getHost();
      * request scheme will be utilized.
      *
      * @param string $host Host to set (e.g. www.yahoo.com, www.yahoo.com:80)
-     *
-     * @return self
      */
     public function setHost($host);
 
@@ -136,8 +124,6 @@ public function getPath();
      * Set the path of the request (e.g. '/', '/index.html').
      *
      * @param string|array $path Path to set or array of segments to implode
-     *
-     * @return self
      */
     public function setPath($path);
 
diff --git a/core/vendor/guzzlehttp/guzzle/src/Message/Response.php b/core/vendor/guzzlehttp/guzzle/src/Message/Response.php
index 1c48aab875d5b56500e49149a172a61eefbe4111..1a7319d31ec7cc21c2d8772a2ad0388c99a39de8 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Message/Response.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Message/Response.php
@@ -1,9 +1,10 @@
 <?php
-
 namespace GuzzleHttp\Message;
 
 use GuzzleHttp\Exception\ParseException;
+use GuzzleHttp\Exception\XmlParseException;
 use GuzzleHttp\Stream\StreamInterface;
+use GuzzleHttp\Utils;
 
 /**
  * Guzzle HTTP response object
@@ -11,7 +12,7 @@
 class Response extends AbstractMessage implements ResponseInterface
 {
     /** @var array Mapping of status codes to reason phrases */
-    private static $statusTexts = array(
+    private static $statusTexts = [
         100 => 'Continue',
         101 => 'Switching Protocols',
         102 => 'Processing',
@@ -70,7 +71,7 @@ class Response extends AbstractMessage implements ResponseInterface
         508 => 'Loop Detected',
         510 => 'Not Extended',
         511 => 'Network Authentication Required',
-    );
+    ];
 
     /** @var string The reason phrase of the response (human readable code) */
     private $reasonPhrase;
@@ -119,15 +120,25 @@ public function getStatusCode()
         return $this->statusCode;
     }
 
+    public function setStatusCode($code)
+    {
+        return $this->statusCode = $code;
+    }
+
     public function getReasonPhrase()
     {
         return $this->reasonPhrase;
     }
 
+    public function setReasonPhrase($phrase)
+    {
+        return $this->reasonPhrase = $phrase;
+    }
+
     public function json(array $config = [])
     {
         try {
-            return \GuzzleHttp\json_decode(
+            return Utils::jsonDecode(
                 (string) $this->getBody(),
                 isset($config['object']) ? !$config['object'] : true,
                 512,
@@ -160,9 +171,11 @@ public function xml(array $config = [])
         } catch (\Exception $e) {
             libxml_disable_entity_loader($disableEntities);
             libxml_use_internal_errors($internalErrors);
-            throw new ParseException(
+            throw new XmlParseException(
                 'Unable to parse response body into XML: ' . $e->getMessage(),
-                $this
+                $this,
+                $e,
+                (libxml_get_last_error()) ?: null
             );
         }
 
@@ -177,8 +190,6 @@ public function getEffectiveUrl()
     public function setEffectiveUrl($url)
     {
         $this->effectiveUrl = $url;
-
-        return $this;
     }
 
     /**
diff --git a/core/vendor/guzzlehttp/guzzle/src/Message/ResponseInterface.php b/core/vendor/guzzlehttp/guzzle/src/Message/ResponseInterface.php
index 55f48e7479bfe9f5855047d360ed846858f023dc..d673655e9329821ebfd5f64129ab1f438c9ff39b 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Message/ResponseInterface.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Message/ResponseInterface.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp\Message;
 
 /**
@@ -8,20 +7,45 @@
 interface ResponseInterface extends MessageInterface
 {
     /**
-     * Get the response status code (e.g. "200", "404", etc.)
+     * Gets the response Status-Code.
      *
-     * @return string
+     * The Status-Code is a 3-digit integer result code of the server's attempt
+     * to understand and satisfy the request.
+     *
+     * @return integer Status code.
      */
     public function getStatusCode();
 
     /**
-     * Get the response reason phrase- a human readable version of the numeric
-     * status code
+     * Sets the status code of this response.
      *
-     * @return string
+     * @param integer $code The 3-digit integer result code to set.
+     */
+    public function setStatusCode($code);
+
+    /**
+     * Gets the response Reason-Phrase, a short textual description of the
+     * Status-Code.
+     *
+     * Because a Reason-Phrase is not a required element in response
+     * Status-Line, the Reason-Phrase value MAY be null. Implementations MAY
+     * choose to return the default RFC 2616 recommended reason phrase for the
+     * response's Status-Code.
+     *
+     * @return string|null Reason phrase, or null if unknown.
      */
     public function getReasonPhrase();
 
+    /**
+     * Sets the Reason-Phrase of the response.
+     *
+     * If no Reason-Phrase is specified, implementations MAY choose to default
+     * to the RFC 2616 recommended reason phrase for the response's Status-Code.
+     *
+     * @param string $phrase The Reason-Phrase to set.
+     */
+    public function setReasonPhrase($phrase);
+
     /**
      * Get the effective URL that resulted in this response (e.g. the last
      * redirect URL).
@@ -35,8 +59,6 @@ public function getEffectiveUrl();
      * redirect URL).
      *
      * @param string $url Effective URL
-     *
-     * @return self
      */
     public function setEffectiveUrl($url);
 
diff --git a/core/vendor/guzzlehttp/guzzle/src/Mimetypes.php b/core/vendor/guzzlehttp/guzzle/src/Mimetypes.php
index 939c2c51d4e413394f8f729db097b1a7ea90e47e..66ac63cfa51f50224b74a35774097b59f0725969 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Mimetypes.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Mimetypes.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp;
 
 /**
diff --git a/core/vendor/guzzlehttp/guzzle/src/Pool.php b/core/vendor/guzzlehttp/guzzle/src/Pool.php
new file mode 100644
index 0000000000000000000000000000000000000000..d1f4607f198b163f1082cb5636e41a5acc9baf17
--- /dev/null
+++ b/core/vendor/guzzlehttp/guzzle/src/Pool.php
@@ -0,0 +1,264 @@
+<?php
+namespace GuzzleHttp;
+
+use GuzzleHttp\Event\RequestEvents;
+use GuzzleHttp\Message\RequestInterface;
+use GuzzleHttp\Message\ResponseInterface;
+use GuzzleHttp\Ring\Core;
+use GuzzleHttp\Ring\Future\FutureInterface;
+use GuzzleHttp\Event\ListenerAttacherTrait;
+use GuzzleHttp\Event\EndEvent;
+use React\Promise\Deferred;
+use React\Promise\PromiseInterface;
+
+/**
+ * Sends and iterator of requests concurrently using a capped pool size.
+ *
+ * The Pool object implements FutureInterface, meaning it can be used later
+ * when necessary, the requests provided to the pool can be cancelled, and
+ * you can check the state of the pool to know if it has been dereferenced
+ * (sent) or has been cancelled.
+ *
+ * When sending the pool, keep in mind that no results are returned: callers
+ * are expected to handle results asynchronously using Guzzle's event system.
+ * When requests complete, more are added to the pool to ensure that the
+ * requested pool size is always filled as much as possible.
+ *
+ * IMPORTANT: Do not provide a pool size greater that what the utilized
+ * underlying RingPHP handler can support. This will result is extremely poor
+ * performance.
+ */
+class Pool implements FutureInterface
+{
+    use ListenerAttacherTrait;
+
+    /** @var \GuzzleHttp\ClientInterface */
+    private $client;
+
+    /** @var \Iterator Yields requests */
+    private $iter;
+
+    /** @var Deferred */
+    private $deferred;
+
+    /** @var PromiseInterface */
+    private $promise;
+
+    private $waitQueue = [];
+    private $eventListeners = [];
+    private $poolSize;
+    private $isRealized = false;
+
+    /**
+     * The option values for 'before', 'after', and 'error' can be a callable,
+     * an associative array containing event data, or an array of event data
+     * arrays. Event data arrays contain the following keys:
+     *
+     * - fn: callable to invoke that receives the event
+     * - priority: Optional event priority (defaults to 0)
+     * - once: Set to true so that the event is removed after it is triggered
+     *
+     * @param ClientInterface $client   Client used to send the requests.
+     * @param array|\Iterator $requests Requests to send in parallel
+     * @param array           $options  Associative array of options
+     *     - pool_size: (int) Maximum number of requests to send concurrently
+     *     - before:    (callable|array) Receives a BeforeEvent
+     *     - after:     (callable|array) Receives a CompleteEvent
+     *     - error:     (callable|array) Receives a ErrorEvent
+     */
+    public function __construct(
+        ClientInterface $client,
+        $requests,
+        array $options = []
+    ) {
+        $this->client = $client;
+        $this->iter = $this->coerceIterable($requests);
+        $this->deferred = new Deferred();
+        $this->promise = $this->deferred->promise();
+        $this->poolSize = isset($options['pool_size'])
+            ? $options['pool_size'] : 25;
+        $this->eventListeners = $this->prepareListeners(
+            $options,
+            ['before', 'complete', 'error', 'end']
+        );
+    }
+
+    /**
+     * Sends multiple requests in parallel and returns an array of responses
+     * and exceptions that uses the same ordering as the provided requests.
+     *
+     * IMPORTANT: This method keeps every request and response in memory, and
+     * as such, is NOT recommended when sending a large number or an
+     * indeterminate number of requests concurrently.
+     *
+     * @param ClientInterface $client   Client used to send the requests
+     * @param array|\Iterator $requests Requests to send in parallel
+     * @param array           $options  Passes through the options available in
+     *                                  {@see GuzzleHttp\Pool::__construct}
+     *
+     * @return BatchResults Returns a container for the results.
+     * @throws \InvalidArgumentException if the event format is incorrect.
+     */
+    public static function batch(
+        ClientInterface $client,
+        $requests,
+        array $options = []
+    ) {
+        $hash = new \SplObjectStorage();
+        foreach ($requests as $request) {
+            $hash->attach($request);
+        }
+
+        // In addition to the normally run events when requests complete, add
+        // and event to continuously track the results of transfers in the hash.
+        (new self($client, $requests, RequestEvents::convertEventArray(
+            $options,
+            ['end'],
+            [
+                'priority' => RequestEvents::LATE,
+                'fn'       => function (EndEvent $e) use ($hash) {
+                    $hash[$e->getRequest()] = $e->getException()
+                        ? $e->getException()
+                        : $e->getResponse();
+                }
+            ]
+        )))->wait();
+
+        return new BatchResults($hash);
+    }
+
+    public function wait()
+    {
+        if ($this->isRealized) {
+            return false;
+        }
+
+        // Seed the pool with N number of requests.
+        for ($i = 0; $i < $this->poolSize; $i++) {
+            if (!$this->addNextRequest()) {
+                break;
+            }
+        }
+
+        // Stop if the pool was cancelled while transferring requests.
+        if ($this->isRealized) {
+            return false;
+        }
+
+        // Wait on any outstanding FutureResponse objects.
+        while ($response = array_pop($this->waitQueue)) {
+            try {
+                $response->wait();
+            } catch (\Exception $e) {
+                // Eat exceptions because they should be handled asynchronously
+            }
+        }
+
+        // Clean up no longer needed state.
+        $this->isRealized = true;
+        $this->waitQueue = $this->eventListeners = [];
+        $this->client = $this->iter = null;
+        $this->deferred->resolve(true);
+
+        return true;
+    }
+
+    /**
+     * {@inheritdoc}
+     *
+     * Attempt to cancel all outstanding requests (requests that are queued for
+     * dereferencing). Returns true if all outstanding requests can be
+     * cancelled.
+     *
+     * @return bool
+     */
+    public function cancel()
+    {
+        if ($this->isRealized) {
+            return false;
+        }
+
+        $success = $this->isRealized = true;
+        foreach ($this->waitQueue as $response) {
+            if (!$response->cancel()) {
+                $success = false;
+            }
+        }
+
+        return $success;
+    }
+
+    /**
+     * Returns a promise that is invoked when the pool completed. There will be
+     * no passed value.
+     *
+     * {@inheritdoc}
+     */
+    public function then(
+        callable $onFulfilled = null,
+        callable $onRejected = null,
+        callable $onProgress = null
+    ) {
+        return $this->promise->then($onFulfilled, $onRejected, $onProgress);
+    }
+
+    public function promise()
+    {
+        return $this->promise;
+    }
+
+    private function coerceIterable($requests)
+    {
+        if ($requests instanceof \Iterator) {
+            return $requests;
+        } elseif (is_array($requests)) {
+            return new \ArrayIterator($requests);
+        }
+
+        throw new \InvalidArgumentException('Expected Iterator or array. '
+            . 'Found ' . Core::describeType($requests));
+    }
+
+    /**
+     * Adds the next request to pool and tracks what requests need to be
+     * dereferenced when completing the pool.
+     */
+    private function addNextRequest()
+    {
+        if ($this->isRealized || !$this->iter || !$this->iter->valid()) {
+            return false;
+        }
+
+        $request = $this->iter->current();
+        $this->iter->next();
+
+        if (!($request instanceof RequestInterface)) {
+            throw new \InvalidArgumentException(sprintf(
+                'All requests in the provided iterator must implement '
+                . 'RequestInterface. Found %s',
+                Core::describeType($request)
+            ));
+        }
+
+        // Be sure to use "lazy" futures, meaning they do not send right away.
+        $request->getConfig()->set('future', 'lazy');
+        $this->attachListeners($request, $this->eventListeners);
+        $response = $this->client->send($request);
+        $hash = spl_object_hash($request);
+        $this->waitQueue[$hash] = $response;
+
+        // Use this function for both resolution and rejection.
+        $fn = function ($value) use ($request, $hash) {
+            unset($this->waitQueue[$hash]);
+            $result = $value instanceof ResponseInterface
+                ? ['request' => $request, 'response' => $value, 'error' => null]
+                : ['request' => $request, 'response' => null, 'error' => $value];
+            $this->deferred->progress($result);
+            $this->addNextRequest();
+        };
+
+        $response->then($fn, $fn);
+
+        return true;
+    }
+}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Post/MultipartBody.php b/core/vendor/guzzlehttp/guzzle/src/Post/MultipartBody.php
index 85ea030697dbc2ce45b512df156d576b52ff5a06..d6bc46b380b93617e14cb46555f969c7833f650b 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Post/MultipartBody.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Post/MultipartBody.php
@@ -1,15 +1,17 @@
 <?php
-
 namespace GuzzleHttp\Post;
 
-use GuzzleHttp\Stream;
+use GuzzleHttp\Stream\AppendStream;
+use GuzzleHttp\Stream\Stream;
+use GuzzleHttp\Stream\StreamDecoratorTrait;
+use GuzzleHttp\Stream\StreamInterface;
 
 /**
  * Stream that when read returns bytes for a streaming multipart/form-data body
  */
-class MultipartBody implements Stream\StreamInterface
+class MultipartBody implements StreamInterface
 {
-    use Stream\StreamDecoratorTrait;
+    use StreamDecoratorTrait;
 
     private $boundary;
 
@@ -73,14 +75,14 @@ private function getFileHeaders(PostFileInterface $file)
     /**
      * Create the aggregate stream that will be used to upload the POST data
      */
-    private function createStream(array $fields, array $files)
+    protected function createStream(array $fields, array $files)
     {
-        $stream = new Stream\AppendStream();
+        $stream = new AppendStream();
 
         foreach ($fields as $name => $fieldValues) {
             foreach ((array) $fieldValues as $value) {
                 $stream->addStream(
-                    Stream\create($this->getFieldString($name, $value))
+                    Stream::factory($this->getFieldString($name, $value))
                 );
             }
         }
@@ -93,14 +95,14 @@ private function createStream(array $fields, array $files)
             }
 
             $stream->addStream(
-                Stream\create($this->getFileHeaders($file))
+                Stream::factory($this->getFileHeaders($file))
             );
             $stream->addStream($file->getContent());
-            $stream->addStream(Stream\create("\r\n"));
+            $stream->addStream(Stream::factory("\r\n"));
         }
 
         // Add the trailing boundary
-        $stream->addStream(Stream\create("--{$this->boundary}--"));
+        $stream->addStream(Stream::factory("--{$this->boundary}--"));
 
         return $stream;
     }
diff --git a/core/vendor/guzzlehttp/guzzle/src/Post/PostBody.php b/core/vendor/guzzlehttp/guzzle/src/Post/PostBody.php
index e404b0460d02ea6b524fb3348e14a5d918902c1c..649350c497d50ebf3b3f439fe3345c8c7fd1f140 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Post/PostBody.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Post/PostBody.php
@@ -2,7 +2,9 @@
 namespace GuzzleHttp\Post;
 
 use GuzzleHttp\Message\RequestInterface;
-use GuzzleHttp\Stream;
+use GuzzleHttp\Stream\Exception\CannotAttachException;
+use GuzzleHttp\Stream\StreamInterface;
+use GuzzleHttp\Stream\Stream;
 use GuzzleHttp\Query;
 
 /**
@@ -11,7 +13,7 @@
  */
 class PostBody implements PostBodyInterface
 {
-    /** @var Stream\StreamInterface */
+    /** @var StreamInterface */
     private $body;
 
     /** @var callable */
@@ -22,6 +24,7 @@ class PostBody implements PostBodyInterface
     /** @var PostFileInterface[] */
     private $files = [];
     private $forceMultipart = false;
+    private $detached = false;
 
     /**
      * Applies request headers to a request based on the POST state
@@ -47,8 +50,6 @@ public function applyRequestHeaders(RequestInterface $request)
     public function forceMultipartUpload($force)
     {
         $this->forceMultipart = $force;
-
-        return $this;
     }
 
     public function setAggregator(callable $aggregator)
@@ -60,16 +61,12 @@ public function setField($name, $value)
     {
         $this->fields[$name] = $value;
         $this->mutate();
-
-        return $this;
     }
 
     public function replaceFields(array $fields)
     {
         $this->fields = $fields;
         $this->mutate();
-
-        return $this;
     }
 
     public function getField($name)
@@ -81,8 +78,6 @@ public function removeField($name)
     {
         unset($this->fields[$name]);
         $this->mutate();
-
-        return $this;
     }
 
     public function getFields($asString = false)
@@ -91,9 +86,11 @@ public function getFields($asString = false)
             return $this->fields;
         }
 
-        return (string) (new Query($this->fields))
-            ->setEncodingType(Query::RFC1738)
-            ->setAggregator($this->getAggregator());
+        $query = new Query($this->fields);
+        $query->setEncodingType(Query::RFC1738);
+        $query->setAggregator($this->getAggregator());
+
+        return (string) $query;
     }
 
     public function hasField($name)
@@ -121,16 +118,12 @@ public function addFile(PostFileInterface $file)
     {
         $this->files[] = $file;
         $this->mutate();
-
-        return $this;
     }
 
     public function clearFiles()
     {
         $this->files = [];
         $this->mutate();
-
-        return $this;
     }
 
     /**
@@ -155,15 +148,23 @@ public function getContents($maxLength = -1)
 
     public function close()
     {
-        return $this->body ? $this->body->close() : true;
+        $this->detach();
     }
 
     public function detach()
     {
-        $this->body = null;
+        $this->detached = true;
         $this->fields = $this->files = [];
 
-        return $this;
+        if ($this->body) {
+            $this->body->close();
+            $this->body = null;
+        }
+    }
+
+    public function attach($stream)
+    {
+        throw new CannotAttachException();
     }
 
     public function eof()
@@ -211,6 +212,11 @@ public function write($string)
         return false;
     }
 
+    public function getMetadata($key = null)
+    {
+        return $key ? null : [];
+    }
+
     /**
      * Return a stream object that is built from the POST fields and files.
      *
@@ -226,7 +232,7 @@ private function getBody()
         } elseif ($this->fields) {
             return $this->body = $this->createUrlEncoded();
         } else {
-            return $this->body = Stream\create();
+            return $this->body = Stream::factory();
         }
     }
 
@@ -261,11 +267,11 @@ private function createMultipart()
     /**
      * Creates an application/x-www-form-urlencoded stream body
      *
-     * @return Stream\StreamInterface
+     * @return StreamInterface
      */
     private function createUrlEncoded()
     {
-        return Stream\create($this->getFields(true));
+        return Stream::factory($this->getFields(true));
     }
 
     /**
diff --git a/core/vendor/guzzlehttp/guzzle/src/Post/PostBodyInterface.php b/core/vendor/guzzlehttp/guzzle/src/Post/PostBodyInterface.php
index 4405ce21a42eaf99eb88d1134f464a9a44f9c07a..81e45953577857e4883a816474537273c5b89fca 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Post/PostBodyInterface.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Post/PostBodyInterface.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp\Post;
 
 use GuzzleHttp\Message\RequestInterface;
@@ -23,8 +22,6 @@ public function applyRequestHeaders(RequestInterface $request);
      *
      * @param string       $name  Name of the field to set
      * @param string|array $value Value to set
-     *
-     * @return $this
      */
     public function setField($name, $value);
 
@@ -44,8 +41,6 @@ public function setAggregator(callable $aggregator);
      *
      * @param bool $force Set to true to force multipart uploads or false to
      *     remove this flag.
-     *
-     * @return self
      */
     public function forceMultipartUpload($force);
 
@@ -53,8 +48,6 @@ public function forceMultipartUpload($force);
      * Replace all existing form fields with an array of fields
      *
      * @param array $fields Associative array of fields to set
-     *
-     * @return $this
      */
     public function replaceFields(array $fields);
 
@@ -71,8 +64,6 @@ public function getField($name);
      * Remove a field by name
      *
      * @param string $name Name of the field to remove
-     *
-     * @return $this
      */
     public function removeField($name);
 
@@ -115,15 +106,11 @@ public function getFile($name);
      * Add a file to the POST
      *
      * @param PostFileInterface $file File to add
-     *
-     * @return $this
      */
     public function addFile(PostFileInterface $file);
 
     /**
      * Remove all files from the collection
-     *
-     * @return $this
      */
     public function clearFiles();
 }
diff --git a/core/vendor/guzzlehttp/guzzle/src/Post/PostFile.php b/core/vendor/guzzlehttp/guzzle/src/Post/PostFile.php
index bcd517d710c03038e27bc013edfd02652afc822a..e102c024308a7c85b7cb6b94559535fd56f61643 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Post/PostFile.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Post/PostFile.php
@@ -1,10 +1,9 @@
 <?php
-
 namespace GuzzleHttp\Post;
 
 use GuzzleHttp\Mimetypes;
-use GuzzleHttp\Stream\MetadataStreamInterface;
 use GuzzleHttp\Stream\StreamInterface;
+use GuzzleHttp\Stream\Stream;
 
 /**
  * Post file upload
@@ -17,9 +16,9 @@ class PostFile implements PostFileInterface
     private $headers = [];
 
     /**
-     * @param null            $name     Name of the form field
+     * @param string          $name     Name of the form field
      * @param mixed           $content  Data to send
-     * @param null            $filename Filename content-disposition attribute
+     * @param string|null     $filename Filename content-disposition attribute
      * @param array           $headers  Array of headers to set on the file
      *                                  (can override any default headers)
      * @throws \RuntimeException when filename is not passed or can't be determined
@@ -67,7 +66,7 @@ private function prepareContent($content)
         $this->content = $content;
 
         if (!($this->content instanceof StreamInterface)) {
-            $this->content = \GuzzleHttp\Stream\create($this->content);
+            $this->content = Stream::factory($this->content);
         } elseif ($this->content instanceof MultipartBody) {
             if (!$this->hasHeader('Content-Disposition')) {
                 $disposition = 'form-data; name="' . $this->name .'"';
@@ -92,9 +91,7 @@ private function prepareFilename($filename)
     {
         $this->filename = $filename;
 
-        if (!$this->filename &&
-            $this->content instanceof MetadataStreamInterface
-        ) {
+        if (!$this->filename) {
             $this->filename = $this->content->getMetadata('uri');
         }
 
@@ -111,9 +108,9 @@ private function prepareDefaultHeaders()
         // Set a default content-disposition header if one was no provided
         if (!$this->hasHeader('Content-Disposition')) {
             $this->headers['Content-Disposition'] = sprintf(
-                'form-data; filename="%s"; name="%s"',
-                basename($this->filename),
-                $this->name
+                'form-data; name="%s"; filename="%s"',
+                $this->name,
+                basename($this->filename)
             );
         }
 
diff --git a/core/vendor/guzzlehttp/guzzle/src/Post/PostFileInterface.php b/core/vendor/guzzlehttp/guzzle/src/Post/PostFileInterface.php
index 205dd9676c9bc7e4395955d276336578101cc082..2e816c0884f6afd566b8cb28fbe7fbd909dee5a8 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Post/PostFileInterface.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Post/PostFileInterface.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp\Post;
 
 use GuzzleHttp\Stream\StreamInterface;
diff --git a/core/vendor/guzzlehttp/guzzle/src/Query.php b/core/vendor/guzzlehttp/guzzle/src/Query.php
index 72d81ee2af136c6138c2fef0f031fa646b773b7a..862c0e5d421c66f0c363a57d8b88fdb6669a4dd4 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Query.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Query.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp;
 
 /**
@@ -115,14 +114,10 @@ public function __toString()
      *     pairs. The callable accepts an array of query data and returns a
      *     flattened array of key value pairs where each value is an array of
      *     strings.
-     *
-     * @return self
      */
     public function setAggregator(callable $aggregator)
     {
         $this->aggregator = $aggregator;
-
-        return $this;
     }
 
     /**
@@ -130,7 +125,6 @@ public function setAggregator(callable $aggregator)
      *
      * @param string|bool $type One of 'RFC1738', 'RFC3986', or false to disable encoding
      *
-     * @return self
      * @throws \InvalidArgumentException
      */
     public function setEncodingType($type)
@@ -140,8 +134,6 @@ public function setEncodingType($type)
         } else {
             throw new \InvalidArgumentException('Invalid URL encoding type');
         }
-
-        return $this;
     }
 
     /**
diff --git a/core/vendor/guzzlehttp/guzzle/src/RequestFsm.php b/core/vendor/guzzlehttp/guzzle/src/RequestFsm.php
new file mode 100644
index 0000000000000000000000000000000000000000..82043acd23e7d190b219173f5faaceef4a437c69
--- /dev/null
+++ b/core/vendor/guzzlehttp/guzzle/src/RequestFsm.php
@@ -0,0 +1,214 @@
+<?php
+namespace GuzzleHttp;
+
+use GuzzleHttp\Event\BeforeEvent;
+use GuzzleHttp\Event\ErrorEvent;
+use GuzzleHttp\Event\CompleteEvent;
+use GuzzleHttp\Event\EndEvent;
+use GuzzleHttp\Exception\StateException;
+use GuzzleHttp\Exception\RequestException;
+use GuzzleHttp\Message\FutureResponse;
+use GuzzleHttp\Message\MessageFactoryInterface;
+use GuzzleHttp\Ring\Future\FutureInterface;
+
+/**
+ * Responsible for transitioning requests through lifecycle events.
+ */
+class RequestFsm
+{
+    private $handler;
+    private $mf;
+    private $maxTransitions;
+
+    private $states = [
+        // When a mock intercepts the emitted "before" event, then we
+        // transition to the "complete" intercept state.
+        'before'   => [
+            'success'    => 'send',
+            'intercept'  => 'complete',
+            'error'      => 'error'
+        ],
+        // The complete and error events are handled using the "then" of
+        // the RingPHP request, so we exit the FSM.
+        'send' => ['error' => 'error'],
+        'complete' => [
+            'success'    => 'end',
+            'intercept'  => 'before',
+            'error'      => 'error'
+        ],
+        'error' => [
+            'success'    => 'complete',
+            'intercept'  => 'before',
+            'error'      => 'end'
+        ],
+        'end' => []
+    ];
+
+    public function __construct(
+        callable $handler,
+        MessageFactoryInterface $messageFactory,
+        $maxTransitions = 200
+    ) {
+        $this->mf = $messageFactory;
+        $this->maxTransitions = $maxTransitions;
+        $this->handler = $handler;
+    }
+
+    /**
+     * Runs the state machine until a terminal state is entered or the
+     * optionally supplied $finalState is entered.
+     *
+     * @param Transaction $trans      Transaction being transitioned.
+     * @param string      $finalState The state to stop on. If unspecified,
+     *                                runs until a terminal state is found.
+     *
+     * @throws \Exception if a terminal state throws an exception.
+     */
+    public function __invoke(Transaction $trans, $finalState = null)
+    {
+        $trans->_transitionCount = 1;
+
+        if (!$trans->state) {
+            $trans->state = 'before';
+        }
+
+        while ($trans->state !== $finalState) {
+
+            if (!isset($this->states[$trans->state])) {
+                throw new StateException("Invalid state: {$trans->state}");
+            } elseif (++$trans->_transitionCount > $this->maxTransitions) {
+                throw new StateException('Too many state transitions were '
+                    . 'encountered ({$trans->_transitionCount}). This likely '
+                    . 'means that a combination of event listeners are in an '
+                    . 'infinite loop.');
+            }
+
+            $state = $this->states[$trans->state];
+
+            try {
+                /** @var callable $fn */
+                $fn = [$this, $trans->state];
+                if ($fn($trans)) {
+                    // Handles transitioning to the "intercept" state.
+                    if (isset($state['intercept'])) {
+                        $trans->state = $state['intercept'];
+                        continue;
+                    }
+                    throw new StateException('Invalid intercept state '
+                        . 'transition from ' . $trans->state);
+                }
+
+                if (isset($state['success'])) {
+                    // Transition to the success state
+                    $trans->state = $state['success'];
+                } else {
+                    // Break: this is a terminal state with no transition.
+                    break;
+                }
+
+            } catch (StateException $e) {
+                // State exceptions are thrown no matter what.
+                throw $e;
+            } catch (\Exception $e) {
+                $trans->exception = $e;
+                // Terminal error states throw the exception.
+                if (!isset($state['error'])) {
+                    throw $e;
+                }
+                // Transition to the error state.
+                $trans->state = $state['error'];
+            }
+        }
+    }
+
+    private function before(Transaction $trans)
+    {
+        $trans->request->getEmitter()->emit('before', new BeforeEvent($trans));
+
+        // When a response is set during the before event (i.e., a mock), then
+        // we don't need to send anything. Skip ahead to the complete event
+        // by returning to to go to the intercept state.
+        return (bool) $trans->response;
+    }
+
+    private function send(Transaction $trans)
+    {
+        $fn = $this->handler;
+        $trans->response = FutureResponse::proxy(
+            $fn(RingBridge::prepareRingRequest($trans)),
+            function ($value) use ($trans) {
+                RingBridge::completeRingResponse($trans, $value, $this->mf, $this);
+                return $trans->response;
+            }
+        );
+    }
+
+    /**
+     * Emits the error event and ensures that the exception is set and is an
+     * instance of RequestException. If the error event is not intercepted,
+     * then the exception is thrown and we transition to the "end" event. This
+     * event also allows requests to be retried, and when retried, transitions
+     * to the "before" event. Otherwise, when no retries, and the exception is
+     * intercepted, transition to the "complete" event.
+     */
+    private function error(Transaction $trans)
+    {
+        // Convert non-request exception to a wrapped exception
+        if (!($trans->exception instanceof RequestException)) {
+            $trans->exception = RequestException::wrapException(
+                $trans->request, $trans->exception
+            );
+        }
+
+        // Dispatch an event and allow interception
+        $event = new ErrorEvent($trans);
+        $trans->request->getEmitter()->emit('error', $event);
+
+        if ($trans->exception) {
+            throw $trans->exception;
+        }
+
+        $trans->exception = null;
+
+        // Return true to transition to the 'before' state. False otherwise.
+        return $trans->state === 'before';
+    }
+
+    /**
+     * Emits a complete event, and if a request is marked for a retry during
+     * the complete event, then the "before" state is transitioned to.
+     */
+    private function complete(Transaction $trans)
+    {
+        // Futures will have their own end events emitted when dereferenced.
+        if ($trans->response instanceof FutureInterface) {
+            return false;
+        }
+
+        $trans->response->setEffectiveUrl($trans->request->getUrl());
+        $trans->request->getEmitter()->emit('complete', new CompleteEvent($trans));
+
+        // Return true to transition to the 'before' state. False otherwise.
+        return $trans->state === 'before';
+    }
+
+    /**
+     * Emits the "end" event and throws an exception if one is present.
+     */
+    private function end(Transaction $trans)
+    {
+        // Futures will have their own end events emitted when dereferenced,
+        // but still emit, even for futures, when an exception is present.
+        if (!$trans->exception && $trans->response instanceof FutureInterface) {
+            return;
+        }
+
+        $trans->request->getEmitter()->emit('end', new EndEvent($trans));
+
+        // Throw exceptions in the terminal event if the exception was not
+        // handled by an "end" event listener.
+        if ($trans->exception) {
+            throw $trans->exception;
+        }
+    }
+}
diff --git a/core/vendor/guzzlehttp/guzzle/src/RingBridge.php b/core/vendor/guzzlehttp/guzzle/src/RingBridge.php
new file mode 100644
index 0000000000000000000000000000000000000000..88af9cefa4d4ac6ed674acdacbcdafa8f0de6887
--- /dev/null
+++ b/core/vendor/guzzlehttp/guzzle/src/RingBridge.php
@@ -0,0 +1,170 @@
+<?php
+namespace GuzzleHttp;
+
+use GuzzleHttp\Message\MessageFactoryInterface;
+use GuzzleHttp\Message\RequestInterface;
+use GuzzleHttp\Event\ProgressEvent;
+use GuzzleHttp\Message\Request;
+use GuzzleHttp\Ring\Core;
+use GuzzleHttp\Stream\Stream;
+use GuzzleHttp\Exception\RequestException;
+
+/**
+ * Provides the bridge between Guzzle requests and responses and Guzzle Ring.
+ */
+class RingBridge
+{
+    /**
+     * Creates a Ring request from a request object.
+     *
+     * This function does not hook up the "then" and "progress" events that
+     * would be required for actually sending a Guzzle request through a
+     * RingPHP handler.
+     *
+     * @param RequestInterface $request Request to convert.
+     *
+     * @return array Converted Guzzle Ring request.
+     */
+    public static function createRingRequest(RequestInterface $request)
+    {
+        $options = $request->getConfig()->toArray();
+        $url = $request->getUrl();
+        // No need to calculate the query string twice (in URL and query).
+        $qs = ($pos = strpos($url, '?')) ? substr($url, $pos + 1) : null;
+
+        return [
+            'scheme'       => $request->getScheme(),
+            'http_method'  => $request->getMethod(),
+            'url'          => $url,
+            'uri'          => $request->getPath(),
+            'headers'      => $request->getHeaders(),
+            'body'         => $request->getBody(),
+            'version'      => $request->getProtocolVersion(),
+            'client'       => $options,
+            'query_string' => $qs,
+            'future'       => isset($options['future']) ? $options['future'] : false
+        ];
+    }
+
+    /**
+     * Creates a Ring request from a request object AND prepares the callbacks.
+     *
+     * @param Transaction $trans Transaction to update.
+     *
+     * @return array Converted Guzzle Ring request.
+     */
+    public static function prepareRingRequest(Transaction $trans)
+    {
+        // Clear out the transaction state when initiating.
+        $trans->exception = null;
+        $request = self::createRingRequest($trans->request);
+
+        // Emit progress events if any progress listeners are registered.
+        if ($trans->request->getEmitter()->hasListeners('progress')) {
+            $emitter = $trans->request->getEmitter();
+            $request['client']['progress'] = function ($a, $b, $c, $d) use ($trans, $emitter) {
+                $emitter->emit('progress', new ProgressEvent($trans, $a, $b, $c, $d));
+            };
+        }
+
+        return $request;
+    }
+
+    /**
+     * Handles the process of processing a response received from a ring
+     * handler. The created response is added to the transaction, and any
+     * necessary events are emitted based on the ring response.
+     *
+     * @param Transaction             $trans          Owns request and response.
+     * @param array                   $response       Ring response array
+     * @param MessageFactoryInterface $messageFactory Creates response objects.
+     * @param callable                $fsm            Request FSM function.
+     */
+    public static function completeRingResponse(
+        Transaction $trans,
+        array $response,
+        MessageFactoryInterface $messageFactory,
+        callable $fsm
+    ) {
+        $trans->state = 'complete';
+        $trans->transferInfo = isset($response['transfer_info'])
+            ? $response['transfer_info'] : [];
+
+        if (!empty($response['status'])) {
+            $options = [];
+            if (isset($response['version'])) {
+                $options['protocol_version'] = $response['version'];
+            }
+            if (isset($response['reason'])) {
+                $options['reason_phrase'] = $response['reason'];
+            }
+            $trans->response = $messageFactory->createResponse(
+                $response['status'],
+                isset($response['headers']) ? $response['headers'] : [],
+                isset($response['body']) ? $response['body'] : null,
+                $options
+            );
+            if (isset($response['effective_url'])) {
+                $trans->response->setEffectiveUrl($response['effective_url']);
+            }
+        } elseif (empty($response['error'])) {
+            // When nothing was returned, then we need to add an error.
+            $response['error'] = self::getNoRingResponseException($trans->request);
+        }
+
+        if (isset($response['error'])) {
+            $trans->state = 'error';
+            $trans->exception = $response['error'];
+        }
+
+        // Complete the lifecycle of the request.
+        $fsm($trans);
+    }
+
+    /**
+     * Creates a Guzzle request object using a ring request array.
+     *
+     * @param array $request Ring request
+     *
+     * @return Request
+     * @throws \InvalidArgumentException for incomplete requests.
+     */
+    public static function fromRingRequest(array $request)
+    {
+        $options = [];
+        if (isset($request['version'])) {
+            $options['protocol_version'] = $request['version'];
+        }
+
+        if (!isset($request['http_method'])) {
+            throw new \InvalidArgumentException('No http_method');
+        }
+
+        return new Request(
+            $request['http_method'],
+            Core::url($request),
+            isset($request['headers']) ? $request['headers'] : [],
+            isset($request['body']) ? Stream::factory($request['body']) : null,
+            $options
+        );
+    }
+
+    /**
+     * Get an exception that can be used when a RingPHP handler does not
+     * populate a response.
+     *
+     * @param RequestInterface $request
+     *
+     * @return RequestException
+     */
+    public static function getNoRingResponseException(RequestInterface $request)
+    {
+        $message = <<<EOT
+Sending the request did not return a response, exception, or populate the
+transaction with a response. This is most likely due to an incorrectly
+implemented RingPHP handler. If you are simply trying to mock responses,
+then it is recommneded to use the GuzzleHttp\Ring\Client\MockHandler.
+EOT;
+        return new RequestException($message, $request);
+    }
+}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Subscriber/Cookie.php b/core/vendor/guzzlehttp/guzzle/src/Subscriber/Cookie.php
index 4b8a2c081be3745c79afc9a095a9f50cc6cb6f58..cacabb66d7bf30024c647f3741825b64ee5baac1 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Subscriber/Cookie.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Subscriber/Cookie.php
@@ -1,13 +1,12 @@
 <?php
-
 namespace GuzzleHttp\Subscriber;
 
-use GuzzleHttp\Event\RequestEvents;
-use GuzzleHttp\Event\SubscriberInterface;
-use GuzzleHttp\Event\CompleteEvent;
-use GuzzleHttp\Event\BeforeEvent;
 use GuzzleHttp\Cookie\CookieJar;
 use GuzzleHttp\Cookie\CookieJarInterface;
+use GuzzleHttp\Event\BeforeEvent;
+use GuzzleHttp\Event\CompleteEvent;
+use GuzzleHttp\Event\RequestEvents;
+use GuzzleHttp\Event\SubscriberInterface;
 
 /**
  * Adds, extracts, and persists cookies between HTTP requests
diff --git a/core/vendor/guzzlehttp/guzzle/src/Subscriber/History.php b/core/vendor/guzzlehttp/guzzle/src/Subscriber/History.php
index 6ffbbb8db922be8aea6d6280ab16beffa6ecea80..5cf06119f641080c578b2939a8050990136561f3 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Subscriber/History.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Subscriber/History.php
@@ -1,11 +1,10 @@
 <?php
-
 namespace GuzzleHttp\Subscriber;
 
-use GuzzleHttp\Event\RequestEvents;
-use GuzzleHttp\Event\SubscriberInterface;
 use GuzzleHttp\Event\CompleteEvent;
 use GuzzleHttp\Event\ErrorEvent;
+use GuzzleHttp\Event\RequestEvents;
+use GuzzleHttp\Event\SubscriberInterface;
 use GuzzleHttp\Message\RequestInterface;
 use GuzzleHttp\Message\ResponseInterface;
 
@@ -43,7 +42,8 @@ public function __toString()
         $lines = array();
         foreach ($this->transactions as $entry) {
             $response = isset($entry['response']) ? $entry['response'] : '';
-            $lines[] = '> ' . trim($entry['request']) . "\n\n< " . trim($response) . "\n";
+            $lines[] = '> ' . trim($entry['sent_request'])
+                . "\n\n< " . trim($response) . "\n";
         }
 
         return implode("\n", $lines);
@@ -65,7 +65,11 @@ public function onError(ErrorEvent $event)
 
     /**
      * Returns an Iterator that yields associative array values where each
-     * associative array contains a 'request' and 'response' key.
+     * associative array contains the following key value pairs:
+     *
+     * - request: Representing the actual request that was received.
+     * - sent_request: A clone of the request that will not be mutated.
+     * - response: The response that was received (if available).
      *
      * @return \Iterator
      */
@@ -75,14 +79,24 @@ public function getIterator()
     }
 
     /**
-     * Get all of the requests sent through the plugin
+     * Get all of the requests sent through the plugin.
+     *
+     * Requests can be modified after they are logged by the history
+     * subscriber. By default this method will return the actual request
+     * instances that were received. Pass true to this method if you wish to
+     * get copies of the requests that represent the request state when it was
+     * initially logged by the history subscriber.
+     *
+     * @param bool $asSent Set to true to get clones of the requests that have
+     *                     not been mutated since the request was received by
+     *                     the history subscriber.
      *
      * @return RequestInterface[]
      */
-    public function getRequests()
+    public function getRequests($asSent = false)
     {
-        return array_map(function ($t) {
-            return $t['request'];
+        return array_map(function ($t) use ($asSent) {
+            return $asSent ? $t['sent_request'] : $t['request'];
         }, $this->transactions);
     }
 
@@ -97,13 +111,25 @@ public function count()
     }
 
     /**
-     * Get the last request sent
+     * Get the last request sent.
+     *
+     * Requests can be modified after they are logged by the history
+     * subscriber. By default this method will return the actual request
+     * instance that was received. Pass true to this method if you wish to get
+     * a copy of the request that represents the request state when it was
+     * initially logged by the history subscriber.
+     *
+     * @param bool $asSent Set to true to get a clone of the last request that
+     *                     has not been mutated since the request was received
+     *                     by the history subscriber.
      *
      * @return RequestInterface
      */
-    public function getLastRequest()
+    public function getLastRequest($asSent = false)
     {
-        return end($this->transactions)['request'];
+        return $asSent
+            ? end($this->transactions)['sent_request']
+            : end($this->transactions)['request'];
     }
 
     /**
@@ -134,7 +160,11 @@ private function add(
         RequestInterface $request,
         ResponseInterface $response = null
     ) {
-        $this->transactions[] = ['request' => $request, 'response' => $response];
+        $this->transactions[] = [
+            'request'      => $request,
+            'sent_request' => clone $request,
+            'response'     => $response
+        ];
         if (count($this->transactions) > $this->limit) {
             array_shift($this->transactions);
         }
diff --git a/core/vendor/guzzlehttp/guzzle/src/Subscriber/HttpError.php b/core/vendor/guzzlehttp/guzzle/src/Subscriber/HttpError.php
index f2f72f15e9d1337950f307bc023c60a870b169e3..ed9de5bcc0619eb691b11e1a8f9632ef08300c7f 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Subscriber/HttpError.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Subscriber/HttpError.php
@@ -1,10 +1,9 @@
 <?php
-
 namespace GuzzleHttp\Subscriber;
 
+use GuzzleHttp\Event\CompleteEvent;
 use GuzzleHttp\Event\RequestEvents;
 use GuzzleHttp\Event\SubscriberInterface;
-use GuzzleHttp\Event\CompleteEvent;
 use GuzzleHttp\Exception\RequestException;
 
 /**
@@ -27,8 +26,11 @@ public function onComplete(CompleteEvent $event)
     {
         $code = (string) $event->getResponse()->getStatusCode();
         // Throw an exception for an unsuccessful response
-        if ($code[0] === '4' || $code[0] === '5') {
-            throw RequestException::create($event->getRequest(), $event->getResponse());
+        if ($code[0] >= 4) {
+            throw RequestException::create(
+                $event->getRequest(),
+                $event->getResponse()
+            );
         }
     }
 }
diff --git a/core/vendor/guzzlehttp/guzzle/src/Subscriber/Mock.php b/core/vendor/guzzlehttp/guzzle/src/Subscriber/Mock.php
index 99a3d18d72cd77f8d059f75ce7126f0063d433e3..39a3c442d7087f500da61f3d80e737443dbafbcc 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Subscriber/Mock.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Subscriber/Mock.php
@@ -1,12 +1,9 @@
 <?php
-
 namespace GuzzleHttp\Subscriber;
 
 use GuzzleHttp\Event\RequestEvents;
 use GuzzleHttp\Event\SubscriberInterface;
-use GuzzleHttp\Adapter\Transaction;
 use GuzzleHttp\Event\BeforeEvent;
-use GuzzleHttp\Event\HeadersEvent;
 use GuzzleHttp\Exception\RequestException;
 use GuzzleHttp\Message\MessageFactory;
 use GuzzleHttp\Message\ResponseInterface;
@@ -55,16 +52,8 @@ public function onBefore(BeforeEvent $event)
             throw $item;
         }
 
-        // Emulate the receiving of the response headers
-        $request = $event->getRequest();
-        $transaction = new Transaction($event->getClient(), $request);
-        $transaction->setResponse($item);
-        $request->getEmitter()->emit(
-            'headers',
-            new HeadersEvent($transaction)
-        );
-
         // Emulate reading a response body
+        $request = $event->getRequest();
         if ($this->readBodies && $request->getBody()) {
             while (!$request->getBody()->eof()) {
                 $request->getBody()->read(8096);
diff --git a/core/vendor/guzzlehttp/guzzle/src/Subscriber/Prepare.php b/core/vendor/guzzlehttp/guzzle/src/Subscriber/Prepare.php
index 2d82acd6d8a443844b4e67ff41f4af6f2461d9a2..472f60392625546f17ebc04da28b71e0f9a44c26 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Subscriber/Prepare.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Subscriber/Prepare.php
@@ -1,15 +1,13 @@
 <?php
-
 namespace GuzzleHttp\Subscriber;
 
+use GuzzleHttp\Event\BeforeEvent;
 use GuzzleHttp\Event\RequestEvents;
 use GuzzleHttp\Event\SubscriberInterface;
 use GuzzleHttp\Message\RequestInterface;
-use GuzzleHttp\Event\BeforeEvent;
+use GuzzleHttp\Mimetypes;
 use GuzzleHttp\Post\PostBodyInterface;
 use GuzzleHttp\Stream\StreamInterface;
-use GuzzleHttp\Stream\MetadataStreamInterface;
-use GuzzleHttp\Mimetypes;
 
 /**
  * Prepares requests with a body before sending
@@ -56,10 +54,6 @@ private function addContentType(
         RequestInterface $request,
         StreamInterface $body
     ) {
-        if (!($body instanceof MetadataStreamInterface)) {
-            return;
-        }
-
         if (!($uri = $body->getMetadata('uri'))) {
             return;
         }
@@ -89,13 +83,13 @@ private function addContentLength(
         }
 
         if (null !== ($size = $body->getSize())) {
-            $request->setHeader('Content-Length', $size)
-                ->removeHeader('Transfer-Encoding');
+            $request->setHeader('Content-Length', $size);
+            $request->removeHeader('Transfer-Encoding');
         } elseif ('1.1' == $request->getProtocolVersion()) {
             // Use chunked Transfer-Encoding if there is no determinable
             // content-length header and we're using HTTP/1.1.
-            $request->setHeader('Transfer-Encoding', 'chunked')
-                ->removeHeader('Content-Length');
+            $request->setHeader('Transfer-Encoding', 'chunked');
+            $request->removeHeader('Content-Length');
         }
     }
 
diff --git a/core/vendor/guzzlehttp/guzzle/src/Subscriber/Redirect.php b/core/vendor/guzzlehttp/guzzle/src/Subscriber/Redirect.php
index bd8988d8df013cc610068e9dd9b9c5981c52a87e..84f89d396beabca18785bb66fa5aa67d4ee6550a 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Subscriber/Redirect.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Subscriber/Redirect.php
@@ -1,12 +1,11 @@
 <?php
-
 namespace GuzzleHttp\Subscriber;
 
+use GuzzleHttp\Event\CompleteEvent;
 use GuzzleHttp\Event\RequestEvents;
 use GuzzleHttp\Event\SubscriberInterface;
-use GuzzleHttp\Event\CompleteEvent;
-use GuzzleHttp\Exception\TooManyRedirectsException;
 use GuzzleHttp\Exception\CouldNotRewindStreamException;
+use GuzzleHttp\Exception\TooManyRedirectsException;
 use GuzzleHttp\Message\RequestInterface;
 use GuzzleHttp\Message\ResponseInterface;
 use GuzzleHttp\Url;
@@ -43,8 +42,7 @@ public function getEvents()
     public static function rewindEntityBody(RequestInterface $redirectRequest)
     {
         // Rewind the entity body of the request if needed
-        if ($redirectRequest->getBody()) {
-            $body = $redirectRequest->getBody();
+        if ($body = $redirectRequest->getBody()) {
             // Only rewind the body if some of it has been read already, and
             // throw an exception if the rewind fails
             if ($body->tell() && !$body->seek(0)) {
@@ -66,48 +64,37 @@ public function onComplete(CompleteEvent $event)
     {
         $response = $event->getResponse();
 
-        if (substr($response->getStatusCode(), 0, 1) != '3' ||
-            !$response->hasHeader('Location')
+        if (substr($response->getStatusCode(), 0, 1) != '3'
+            || !$response->hasHeader('Location')
         ) {
             return;
         }
 
-        $redirectCount = 0;
         $request = $event->getRequest();
-        $redirectResponse = $response;
-        $max = $request->getConfig()->getPath('redirect/max') ?: 5;
-
-        do {
-            if (++$redirectCount > $max) {
-                throw new TooManyRedirectsException(
-                    "Will not follow more than {$redirectCount} redirects",
-                    $request
-                );
-            }
-            $redirectRequest = $this->createRedirectRequest($request, $redirectResponse);
-            $redirectResponse = $event->getClient()->send($redirectRequest);
-        } while (substr($redirectResponse->getStatusCode(), 0, 1) == '3' &&
-            $redirectResponse->hasHeader('Location')
-        );
-
-        if ($redirectResponse !== $response) {
-            $event->intercept($redirectResponse);
+        $config = $request->getConfig();
+
+        // Increment the redirect and initialize the redirect state.
+        if ($redirectCount = $config['redirect_count']) {
+            $config['redirect_count'] = ++$redirectCount;
+        } else {
+            $config['redirect_scheme'] = $request->getScheme();
+            $config['redirect_count'] = $redirectCount = 1;
+        }
+
+        $max = $config->getPath('redirect/max') ?: 5;
+
+        if ($redirectCount > $max) {
+            throw new TooManyRedirectsException(
+                "Will not follow more than {$redirectCount} redirects",
+                $request
+            );
         }
+
+        $this->modifyRedirectRequest($request, $response);
+        $event->retry();
     }
 
-    /**
-     * Create a redirect request for a specific request object
-     *
-     * Takes into account strict RFC compliant redirection (e.g. redirect POST
-     * with POST) vs doing what most clients do (e.g. redirect POST with GET).
-     *
-     * @param RequestInterface  $request
-     * @param ResponseInterface $response
-     *
-     * @return RequestInterface Returns a new redirect request
-     * @throws CouldNotRewindStreamException If the body cannot be rewound.
-     */
-    private function createRedirectRequest(
+    private function modifyRedirectRequest(
         RequestInterface $request,
         ResponseInterface $response
     ) {
@@ -115,44 +102,41 @@ private function createRedirectRequest(
 
         // Use a GET request if this is an entity enclosing request and we are
         // not forcing RFC compliance, but rather emulating what all browsers
-        // would do. Be sure to disable redirects on the clone.
-        $redirectRequest = clone $request;
-        $redirectRequest->getEmitter()->detach($this);
+        // would do.
         $statusCode = $response->getStatusCode();
-
         if ($statusCode == 303 ||
-            ($statusCode <= 302 && $request->getBody() &&
-                !$config->getPath('redirect/strict'))
+            ($statusCode <= 302 && $request->getBody() && !$config->getPath('redirect/strict'))
         ) {
-            $redirectRequest->setMethod('GET');
-            $redirectRequest->setBody(null);
+            $request->setMethod('GET');
+            $request->setBody(null);
         }
 
-        $this->setRedirectUrl($redirectRequest, $response);
-        $this->rewindEntityBody($redirectRequest);
+        $previousUrl = $request->getUrl();
+        $this->setRedirectUrl($request, $response);
+        $this->rewindEntityBody($request);
 
         // Add the Referer header if it is told to do so and only
         // add the header if we are not redirecting from https to http.
-        if ($config->getPath('redirect/referer') && (
-            $redirectRequest->getScheme() == 'https' ||
-            $redirectRequest->getScheme() == $request->getScheme()
-        )) {
-            $url = Url::fromString($request->getUrl());
-            $url->setUsername(null)->setPassword(null);
-            $redirectRequest->setHeader('Referer', (string) $url);
+        if ($config->getPath('redirect/referer')
+            && ($request->getScheme() == 'https' || $request->getScheme() == $config['redirect_scheme'])
+        ) {
+            $url = Url::fromString($previousUrl);
+            $url->setUsername(null);
+            $url->setPassword(null);
+            $request->setHeader('Referer', (string) $url);
+        } else {
+            $request->removeHeader('Referer');
         }
-
-        return $redirectRequest;
     }
 
     /**
      * Set the appropriate URL on the request based on the location header
      *
-     * @param RequestInterface  $redirectRequest
+     * @param RequestInterface  $request
      * @param ResponseInterface $response
      */
     private function setRedirectUrl(
-        RequestInterface $redirectRequest,
+        RequestInterface $request,
         ResponseInterface $response
     ) {
         $location = $response->getHeader('Location');
@@ -160,13 +144,13 @@ private function setRedirectUrl(
 
         // Combine location with the original URL if it is not absolute.
         if (!$location->isAbsolute()) {
-            $originalUrl = Url::fromString($redirectRequest->getUrl());
+            $originalUrl = Url::fromString($request->getUrl());
             // Remove query string parameters and just take what is present on
             // the redirect Location header
             $originalUrl->getQuery()->clear();
             $location = $originalUrl->combine($location);
         }
 
-        $redirectRequest->setUrl($location);
+        $request->setUrl($location);
     }
 }
diff --git a/core/vendor/guzzlehttp/guzzle/src/ToArrayInterface.php b/core/vendor/guzzlehttp/guzzle/src/ToArrayInterface.php
index 7c4120fbca6c89d19e0c8cf4b5f5ba08b67caf88..d57c0229a44a3352c738c57a3ad8b27d90f3bd9f 100644
--- a/core/vendor/guzzlehttp/guzzle/src/ToArrayInterface.php
+++ b/core/vendor/guzzlehttp/guzzle/src/ToArrayInterface.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp;
 
 /**
diff --git a/core/vendor/guzzlehttp/guzzle/src/Transaction.php b/core/vendor/guzzlehttp/guzzle/src/Transaction.php
new file mode 100644
index 0000000000000000000000000000000000000000..6a982f4c2136e171c8a2997bd5dae8a945eb0ec8
--- /dev/null
+++ b/core/vendor/guzzlehttp/guzzle/src/Transaction.php
@@ -0,0 +1,85 @@
+<?php
+namespace GuzzleHttp;
+
+use GuzzleHttp\Message\RequestInterface;
+use GuzzleHttp\Message\ResponseInterface;
+
+/**
+ * Represents the relationship between a client, request, and response.
+ *
+ * You can access the request, response, and client using their corresponding
+ * public properties.
+ */
+class Transaction
+{
+    /**
+     * HTTP client used to transfer the request.
+     *
+     * @var ClientInterface
+     */
+    public $client;
+
+    /**
+     * The request that is being sent.
+     *
+     * @var RequestInterface
+     */
+    public $request;
+
+    /**
+     * The response associated with the transaction. A response will not be
+     * present when a networking error occurs or an error occurs before sending
+     * the request.
+     *
+     * @var ResponseInterface|null
+     */
+    public $response;
+
+    /**
+     * Exception associated with the transaction. If this exception is present
+     * when processing synchronous or future commands, then it is thrown. When
+     * intercepting a failed transaction, you MUST set this value to null in
+     * order to prevent the exception from being thrown.
+     *
+     * @var \Exception
+     */
+    public $exception;
+
+    /**
+     * Associative array of handler specific transfer statistics and custom
+     * key value pair information. When providing similar information, handlers
+     * should follow the same key value pair naming conventions as PHP's
+     * curl_getinfo() (http://php.net/manual/en/function.curl-getinfo.php).
+     *
+     * @var array
+     */
+    public $transferInfo = [];
+
+    /**
+     * The transaction's state.
+     *
+     * @var string
+     */
+    public $state;
+
+    /**
+     * The number of state transitions that this transactions has been through.
+     *
+     * @var int
+     * @internal This is for internal use only. If you modify this, then you
+     *           are asking for trouble.
+     */
+    public $_transitionCount;
+
+    /**
+     * @param ClientInterface  $client  Client that is used to send the requests
+     * @param RequestInterface $request Request to send
+     */
+    public function __construct(
+        ClientInterface $client,
+        RequestInterface $request
+    ) {
+        $this->client = $client;
+        $this->request = $request;
+    }
+}
diff --git a/core/vendor/guzzlehttp/guzzle/src/UriTemplate.php b/core/vendor/guzzlehttp/guzzle/src/UriTemplate.php
index 785ff3da8e87e61058946f1c40b8b10db629eb8b..55dfeb5a4c5c64ba240c19a87ae6864be54515a8 100644
--- a/core/vendor/guzzlehttp/guzzle/src/UriTemplate.php
+++ b/core/vendor/guzzlehttp/guzzle/src/UriTemplate.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp;
 
 /**
diff --git a/core/vendor/guzzlehttp/guzzle/src/Url.php b/core/vendor/guzzlehttp/guzzle/src/Url.php
index fcd72eb30835d19c642d38f4046bab2ab9c73845..497234f35af0176a038eb59c80d6b4d28ae409d5 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Url.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Url.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp;
 
 /**
@@ -203,8 +202,6 @@ public function setHost($host)
             $this->host = $host;
             $this->setPort($port);
         }
-
-        return $this;
     }
 
     /**
@@ -221,8 +218,6 @@ public function getHost()
      * Set the scheme part of the URL (http, https, ftp, etc.)
      *
      * @param string $scheme Scheme to set
-     *
-     * @return Url
      */
     public function setScheme($scheme)
     {
@@ -234,8 +229,6 @@ public function setScheme($scheme)
         }
 
         $this->scheme = $scheme;
-
-        return $this;
     }
 
     /**
@@ -252,14 +245,10 @@ public function getScheme()
      * Set the port part of the URL
      *
      * @param int $port Port to set
-     *
-     * @return Url
      */
     public function setPort($port)
     {
         $this->port = $port;
-
-        return $this;
     }
 
     /**
@@ -285,22 +274,16 @@ public function getPort()
      * Set the path part of the URL
      *
      * @param string $path Path string to set
-     *
-     * @return Url
      */
     public function setPath($path)
     {
         static $search  = [' ',   '?'];
         static $replace = ['%20', '%3F'];
         $this->path = str_replace($search, $replace, $path);
-
-        return $this;
     }
 
     /**
      * Removes dot segments from a URL
-     *
-     * @return Url
      * @link http://tools.ietf.org/html/rfc3986#section-5.2.4
      */
     public function removeDotSegments()
@@ -309,7 +292,7 @@ public function removeDotSegments()
         static $ignoreSegments = ['.' => true, '..' => true];
 
         if (isset($noopPaths[$this->path])) {
-            return $this;
+            return;
         }
 
         $results = [];
@@ -337,16 +320,12 @@ public function removeDotSegments()
         }
 
         $this->path = $newPath;
-
-        return $this;
     }
 
     /**
      * Add a relative path to the currently set path.
      *
      * @param string $relativePath Relative path to add
-     *
-     * @return Url
      */
     public function addPath($relativePath)
     {
@@ -363,8 +342,6 @@ public function addPath($relativePath)
 
             $this->setPath($this->path . $relativePath);
         }
-
-        return $this;
     }
 
     /**
@@ -391,14 +368,10 @@ public function getPathSegments()
      * Set the password part of the URL
      *
      * @param string $password Password to set
-     *
-     * @return Url
      */
     public function setPassword($password)
     {
         $this->password = $password;
-
-        return $this;
     }
 
     /**
@@ -415,14 +388,10 @@ public function getPassword()
      * Set the username part of the URL
      *
      * @param string $username Username to set
-     *
-     * @return Url
      */
     public function setUsername($username)
     {
         $this->username = $username;
-
-        return $this;
     }
 
     /**
@@ -452,7 +421,6 @@ public function getQuery()
      *     be a string that will be parsed into a Query object, an array
      *     of key value pairs, or a Query object.
      *
-     * @return Url
      * @throws \InvalidArgumentException
      */
     public function setQuery($query)
@@ -464,11 +432,9 @@ public function setQuery($query)
         } elseif (is_array($query)) {
             $this->query = new Query($query);
         } else {
-            throw new \InvalidArgumentException('Query must be a '
-                . 'QueryInterface, array, or string');
+            throw new \InvalidArgumentException('Query must be a Query, '
+                . 'array, or string. ' . gettype($query) . ' provided.');
         }
-
-        return $this;
     }
 
     /**
@@ -485,14 +451,10 @@ public function getFragment()
      * Set the fragment part of the URL
      *
      * @param string $fragment Fragment to set
-     *
-     * @return Url
      */
     public function setFragment($fragment)
     {
         $this->fragment = $fragment;
-
-        return $this;
     }
 
     /**
diff --git a/core/vendor/guzzlehttp/guzzle/src/Utils.php b/core/vendor/guzzlehttp/guzzle/src/Utils.php
new file mode 100644
index 0000000000000000000000000000000000000000..285fe30ba2bf59306a08df2cfdc538ea5ec9646e
--- /dev/null
+++ b/core/vendor/guzzlehttp/guzzle/src/Utils.php
@@ -0,0 +1,145 @@
+<?php
+namespace GuzzleHttp;
+
+/**
+ * Utility methods used throughout Guzzle.
+ */
+final class Utils
+{
+    /**
+     * Gets a value from an array using a path syntax to retrieve nested data.
+     *
+     * This method does not allow for keys that contain "/". You must traverse
+     * the array manually or using something more advanced like JMESPath to
+     * work with keys that contain "/".
+     *
+     *     // Get the bar key of a set of nested arrays.
+     *     // This is equivalent to $collection['foo']['baz']['bar'] but won't
+     *     // throw warnings for missing keys.
+     *     GuzzleHttp\get_path($data, 'foo/baz/bar');
+     *
+     * @param array  $data Data to retrieve values from
+     * @param string $path Path to traverse and retrieve a value from
+     *
+     * @return mixed|null
+     */
+    public static function getPath($data, $path)
+    {
+        $path = explode('/', $path);
+
+        while (null !== ($part = array_shift($path))) {
+            if (!is_array($data) || !isset($data[$part])) {
+                return null;
+            }
+            $data = $data[$part];
+        }
+
+        return $data;
+    }
+
+    /**
+     * Set a value in a nested array key. Keys will be created as needed to set
+     * the value.
+     *
+     * This function does not support keys that contain "/" or "[]" characters
+     * because these are special tokens used when traversing the data structure.
+     * A value may be prepended to an existing array by using "[]" as the final
+     * key of a path.
+     *
+     *     GuzzleHttp\get_path($data, 'foo/baz'); // null
+     *     GuzzleHttp\set_path($data, 'foo/baz/[]', 'a');
+     *     GuzzleHttp\set_path($data, 'foo/baz/[]', 'b');
+     *     GuzzleHttp\get_path($data, 'foo/baz');
+     *     // Returns ['a', 'b']
+     *
+     * @param array  $data  Data to modify by reference
+     * @param string $path  Path to set
+     * @param mixed  $value Value to set at the key
+     *
+     * @throws \RuntimeException when trying to setPath using a nested path
+     *     that travels through a scalar value.
+     */
+    public static function setPath(&$data, $path, $value)
+    {
+        $current =& $data;
+        $queue = explode('/', $path);
+        while (null !== ($key = array_shift($queue))) {
+            if (!is_array($current)) {
+                throw new \RuntimeException("Trying to setPath {$path}, but "
+                    . "{$key} is set and is not an array");
+            } elseif (!$queue) {
+                if ($key == '[]') {
+                    $current[] = $value;
+                } else {
+                    $current[$key] = $value;
+                }
+            } elseif (isset($current[$key])) {
+                $current =& $current[$key];
+            } else {
+                $current[$key] = [];
+                $current =& $current[$key];
+            }
+        }
+    }
+
+    /**
+     * Expands a URI template
+     *
+     * @param string $template  URI template
+     * @param array  $variables Template variables
+     *
+     * @return string
+     */
+    public static function uriTemplate($template, array $variables)
+    {
+        if (function_exists('\\uri_template')) {
+            return \uri_template($template, $variables);
+        }
+
+        static $uriTemplate;
+        if (!$uriTemplate) {
+            $uriTemplate = new UriTemplate();
+        }
+
+        return $uriTemplate->expand($template, $variables);
+    }
+
+    /**
+     * Wrapper for JSON decode that implements error detection with helpful
+     * error messages.
+     *
+     * @param string $json    JSON data to parse
+     * @param bool $assoc     When true, returned objects will be converted
+     *                        into associative arrays.
+     * @param int    $depth   User specified recursion depth.
+     * @param int    $options Bitmask of JSON decode options.
+     *
+     * @return mixed
+     * @throws \InvalidArgumentException if the JSON cannot be parsed.
+     * @link http://www.php.net/manual/en/function.json-decode.php
+     */
+    public static function jsonDecode($json, $assoc = false, $depth = 512, $options = 0)
+    {
+        static $jsonErrors = [
+            JSON_ERROR_DEPTH => 'JSON_ERROR_DEPTH - Maximum stack depth exceeded',
+            JSON_ERROR_STATE_MISMATCH => 'JSON_ERROR_STATE_MISMATCH - Underflow or the modes mismatch',
+            JSON_ERROR_CTRL_CHAR => 'JSON_ERROR_CTRL_CHAR - Unexpected control character found',
+            JSON_ERROR_SYNTAX => 'JSON_ERROR_SYNTAX - Syntax error, malformed JSON',
+            JSON_ERROR_UTF8 => 'JSON_ERROR_UTF8 - Malformed UTF-8 characters, possibly incorrectly encoded'
+        ];
+
+        $data = \json_decode($json, $assoc, $depth, $options);
+
+        if (JSON_ERROR_NONE !== json_last_error()) {
+            $last = json_last_error();
+            throw new \InvalidArgumentException(
+                'Unable to parse JSON data: '
+                . (isset($jsonErrors[$last])
+                    ? $jsonErrors[$last]
+                    : 'Unknown error')
+            );
+        }
+
+        return $data;
+    }
+}
diff --git a/core/vendor/guzzlehttp/guzzle/src/cacert.pem b/core/vendor/guzzlehttp/guzzle/src/cacert.pem
deleted file mode 100644
index 9794dfb70f44b03eca060bb4f72462ac0bbb9a94..0000000000000000000000000000000000000000
--- a/core/vendor/guzzlehttp/guzzle/src/cacert.pem
+++ /dev/null
@@ -1,3866 +0,0 @@
-##
-## ca-bundle.crt -- Bundle of CA Root Certificates
-##
-## Certificate data from Mozilla as of: Tue Apr 22 08:29:31 2014
-##
-## This is a bundle of X.509 certificates of public Certificate Authorities
-## (CA). These were automatically extracted from Mozilla's root certificates
-## file (certdata.txt).  This file can be found in the mozilla source tree:
-## http://mxr.mozilla.org/mozilla-release/source/security/nss/lib/ckfw/builtins/certdata.txt?raw=1
-##
-## It contains the certificates in PEM format and therefore
-## can be directly used with curl / libcurl / php_curl, or with
-## an Apache+mod_ssl webserver for SSL client authentication.
-## Just configure this file as the SSLCACertificateFile.
-##
-
-
-GTE CyberTrust Global Root
-==========================
------BEGIN CERTIFICATE-----
-MIICWjCCAcMCAgGlMA0GCSqGSIb3DQEBBAUAMHUxCzAJBgNVBAYTAlVTMRgwFgYDVQQKEw9HVEUg
-Q29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRydXN0IFNvbHV0aW9ucywgSW5jLjEjMCEG
-A1UEAxMaR1RFIEN5YmVyVHJ1c3QgR2xvYmFsIFJvb3QwHhcNOTgwODEzMDAyOTAwWhcNMTgwODEz
-MjM1OTAwWjB1MQswCQYDVQQGEwJVUzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQL
-Ex5HVEUgQ3liZXJUcnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0
-IEdsb2JhbCBSb290MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCVD6C28FCc6HrHiM3dFw4u
-sJTQGz0O9pTAipTHBsiQl8i4ZBp6fmw8U+E3KHNgf7KXUwefU/ltWJTSr41tiGeA5u2ylc9yMcql
-HHK6XALnZELn+aks1joNrI1CqiQBOeacPwGFVw1Yh0X404Wqk2kmhXBIgD8SFcd5tB8FLztimQID
-AQABMA0GCSqGSIb3DQEBBAUAA4GBAG3rGwnpXtlR22ciYaQqPEh346B8pt5zohQDhT37qw4wxYMW
-M4ETCJ57NE7fQMh017l93PR2VX2bY1QY6fDq81yx2YtCHrnAlU66+tXifPVoYb+O7AWXX1uw16OF
-NMQkpw0PlZPvy5TYnh+dXIVtx6quTx8itc2VrbqnzPmrC3p/
------END CERTIFICATE-----
-
-Thawte Server CA
-================
------BEGIN CERTIFICATE-----
-MIIDEzCCAnygAwIBAgIBATANBgkqhkiG9w0BAQQFADCBxDELMAkGA1UEBhMCWkExFTATBgNVBAgT
-DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29uc3Vs
-dGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcGA1UE
-AxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5j
-b20wHhcNOTYwODAxMDAwMDAwWhcNMjAxMjMxMjM1OTU5WjCBxDELMAkGA1UEBhMCWkExFTATBgNV
-BAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29u
-c3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcG
-A1UEAxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0
-ZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANOkUG7I/1Zr5s9dtuoMaHVHoqrC2oQl
-/Kj0R1HahbUgdJSGHg91yekIYfUGbTBuFRkC6VLAYttNmZ7iagxEOM3+vuNkCXDF/rFrKbYvScg7
-1CcEJRCXL+eQbcAoQpnXTEPew/UhbVSfXcNY4cDk2VuwuNy0e982OsK1ZiIS1ocNAgMBAAGjEzAR
-MA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAB/pMaVz7lcxG7oWDTSEwjsrZqG9J
-GubaUeNgcGyEYRGhGshIPllDfU+VPaGLtwtimHp1it2ITk6eQNuozDJ0uW8NxuOzRAvZim+aKZuZ
-GCg70eNAKJpaPNW15yAbi8qkq43pUdniTCxZqdq5snUb9kLy78fyGPmJvKP/iiMucEc=
------END CERTIFICATE-----
-
-Thawte Premium Server CA
-========================
------BEGIN CERTIFICATE-----
-MIIDJzCCApCgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBzjELMAkGA1UEBhMCWkExFTATBgNVBAgT
-DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29uc3Vs
-dGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UE
-AxMYVGhhd3RlIFByZW1pdW0gU2VydmVyIENBMSgwJgYJKoZIhvcNAQkBFhlwcmVtaXVtLXNlcnZl
-ckB0aGF3dGUuY29tMB4XDTk2MDgwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgc4xCzAJBgNVBAYT
-AlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsGA1UEChMU
-VGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2VydmljZXMgRGl2
-aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQcmVtaXVtIFNlcnZlciBDQTEoMCYGCSqGSIb3DQEJARYZ
-cHJlbWl1bS1zZXJ2ZXJAdGhhd3RlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0jY2
-aovXwlue2oFBYo847kkEVdbQ7xwblRZH7xhINTpS9CtqBo87L+pW46+GjZ4X9560ZXUCTe/LCaIh
-Udib0GfQug2SBhRz1JPLlyoAnFxODLz6FVL88kRu2hFKbgifLy3j+ao6hnO2RlNYyIkFvYMRuHM/
-qgeN9EJN50CdHDcCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQQFAAOBgQAm
-SCwWwlj66BZ0DKqqX1Q/8tfJeGBeXm43YyJ3Nn6yF8Q0ufUIhfzJATj/Tb7yFkJD57taRvvBxhEf
-8UqwKEbJw8RCfbz6q1lu1bdRiBHjpIUZa4JMpAwSremkrj/xw0llmozFyD4lt5SZu5IycQfwhl7t
-UCemDaYj+bvLpgcUQg==
------END CERTIFICATE-----
-
-Equifax Secure CA
-=================
------BEGIN CERTIFICATE-----
-MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJVUzEQMA4GA1UE
-ChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5
-MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoT
-B0VxdWlmYXgxLTArBgNVBAsTJEVxdWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCB
-nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPR
-fM6fBeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+AcJkVV5MW
-8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kCAwEAAaOCAQkwggEFMHAG
-A1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UE
-CxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoG
-A1UdEAQTMBGBDzIwMTgwODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvS
-spXXR9gjIBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQFMAMB
-Af8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUAA4GBAFjOKer89961
-zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y7qj/WsjTVbJmcVfewCHrPSqnI0kB
-BIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee95
-70+sB3c4
------END CERTIFICATE-----
-
-Verisign Class 3 Public Primary Certification Authority
-=======================================================
------BEGIN CERTIFICATE-----
-MIICPDCCAaUCEHC65B0Q2Sk0tjjKewPMur8wDQYJKoZIhvcNAQECBQAwXzELMAkGA1UEBhMCVVMx
-FzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmltYXJ5
-IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVow
-XzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAz
-IFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUA
-A4GNADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhEBarsAx94
-f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/isI19wKTakyYbnsZogy1Ol
-hec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0GCSqGSIb3DQEBAgUAA4GBALtMEivPLCYA
-TxQT3ab7/AoRhIzzKBxnki98tsX63/Dolbwdj2wsqFHMc9ikwFPwTtYmwHYBV4GSXiHx0bH/59Ah
-WM1pF+NEHJwZRDmJXNycAA9WjQKZ7aKQRUzkuxCkPfAyAw7xzvjoyVGM5mKf5p/AfbdynMk2Omuf
-Tqj/ZA1k
------END CERTIFICATE-----
-
-Verisign Class 3 Public Primary Certification Authority - G2
-============================================================
------BEGIN CERTIFICATE-----
-MIIDAjCCAmsCEH3Z/gfPqB63EHln+6eJNMYwDQYJKoZIhvcNAQEFBQAwgcExCzAJBgNVBAYTAlVT
-MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMgUHJpbWFy
-eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln
-biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz
-dCBOZXR3b3JrMB4XDTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVT
-MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMgUHJpbWFy
-eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln
-biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz
-dCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDMXtERXVxp0KvTuWpMmR9ZmDCO
-FoUgRm1HP9SFIIThbbP4pO0M8RcPO/mn+SXXwc+EY/J8Y8+iR/LGWzOOZEAEaMGAuWQcRXfH2G71
-lSk8UOg013gfqLptQ5GVj0VXXn7F+8qkBOvqlzdUMG+7AUcyM83cV5tkaWH4mx0ciU9cZwIDAQAB
-MA0GCSqGSIb3DQEBBQUAA4GBAFFNzb5cy5gZnBWyATl4Lk0PZ3BwmcYQWpSkU01UbSuvDV1Ai2TT
-1+7eVmGSX6bEHRBhNtMsJzzoKQm5EWR0zLVznxxIqbxhAe7iF6YM40AIOw7n60RzKprxaZLvcRTD
-Oaxxp5EJb+RxBrO6WVcmeQD2+A2iMzAo1KpYoJ2daZH9
------END CERTIFICATE-----
-
-GlobalSign Root CA
-==================
------BEGIN CERTIFICATE-----
-MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkGA1UEBhMCQkUx
-GTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jvb3QgQ0ExGzAZBgNVBAMTEkds
-b2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAwMDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNV
-BAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYD
-VQQDExJHbG9iYWxTaWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDa
-DuaZjc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavpxy0Sy6sc
-THAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp1Wrjsok6Vjk4bwY8iGlb
-Kk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdGsnUOhugZitVtbNV4FpWi6cgKOOvyJBNP
-c1STE4U6G7weNLWLBYy5d4ux2x8gkasJU26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrX
-gzT/LCrBbBlDSgeF59N89iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV
-HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0BAQUF
-AAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOzyj1hTdNGCbM+w6Dj
-Y1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE38NflNUVyRRBnMRddWQVDf9VMOyG
-j/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymPAbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhH
-hm4qxFYxldBniYUr+WymXUadDKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveC
-X4XSQRjbgbMEHMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A==
------END CERTIFICATE-----
-
-GlobalSign Root CA - R2
-=======================
------BEGIN CERTIFICATE-----
-MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4GA1UECxMXR2xv
-YmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh
-bFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT
-aWduIFJvb3QgQ0EgLSBSMjETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln
-bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6
-ErPLv4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8eoLrvozp
-s6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklqtTleiDTsvHgMCJiEbKjN
-S7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzdC9XZzPnqJworc5HGnRusyMvo4KD0L5CL
-TfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pazq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6C
-ygPCm48CAwEAAaOBnDCBmTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E
-FgQUm+IHV2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5nbG9i
-YWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG3lm0mi3f3BmGLjAN
-BgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4GsJ0/WwbgcQ3izDJr86iw8bmEbTUsp
-9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu
-01yiPqFbQfXf5WRDLenVOavSot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG7
-9G+dwfCMNYxdAfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7
-TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg==
------END CERTIFICATE-----
-
-ValiCert Class 1 VA
-===================
------BEGIN CERTIFICATE-----
-MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRp
-b24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
-YXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZh
-bGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNTIy
-MjM0OFoXDTE5MDYyNTIyMjM0OFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0
-d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDEg
-UG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0
-LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMIGfMA0GCSqGSIb3DQEBAQUA
-A4GNADCBiQKBgQDYWYJ6ibiWuqYvaG9YLqdUHAZu9OqNSLwxlBfw8068srg1knaw0KWlAdcAAxIi
-GQj4/xEjm84H9b9pGib+TunRf50sQB1ZaG6m+FiwnRqP0z/x3BkGgagO4DrdyFNFCQbmD3DD+kCm
-DuJWBQ8YTfwggtFzVXSNdnKgHZ0dwN0/cQIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFBoPUn0LBwG
-lN+VYH+Wexf+T3GtZMjdd9LvWVXoP+iOBSoh8gfStadS/pyxtuJbdxdA6nLWI8sogTLDAHkY7FkX
-icnGah5xyf23dKUlRWnFSKsZ4UWKJWsZ7uW7EvV/96aNUcPwnXS3qT6gpf+2SQMT2iLM7XGCK5nP
-Orf1LXLI
------END CERTIFICATE-----
-
-ValiCert Class 2 VA
-===================
------BEGIN CERTIFICATE-----
-MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRp
-b24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
-YXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZh
-bGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAw
-MTk1NFoXDTE5MDYyNjAwMTk1NFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0
-d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIg
-UG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0
-LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMIGfMA0GCSqGSIb3DQEBAQUA
-A4GNADCBiQKBgQDOOnHK5avIWZJV16vYdA757tn2VUdZZUcOBVXc65g2PFxTXdMwzzjsvUGJ7SVC
-CSRrCl6zfN1SLUzm1NZ9WlmpZdRJEy0kTRxQb7XBhVQ7/nHk01xC+YDgkRoKWzk2Z/M/VXwbP7Rf
-ZHM047QSv4dk+NoS/zcnwbNDu+97bi5p9wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBADt/UG9vUJSZ
-SWI4OB9L+KXIPqeCgfYrx+jFzug6EILLGACOTb2oWH+heQC1u+mNr0HZDzTuIYEZoDJJKPTEjlbV
-UjP9UNV+mWwD5MlM/Mtsq2azSiGM5bUMMj4QssxsodyamEwCW/POuZ6lcg5Ktz885hZo+L7tdEy8
-W9ViH0Pd
------END CERTIFICATE-----
-
-RSA Root Certificate 1
-======================
------BEGIN CERTIFICATE-----
-MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRp
-b24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
-YXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZh
-bGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAw
-MjIzM1oXDTE5MDYyNjAwMjIzM1owgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0
-d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDMg
-UG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0
-LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMIGfMA0GCSqGSIb3DQEBAQUA
-A4GNADCBiQKBgQDjmFGWHOjVsQaBalfDcnWTq8+epvzzFlLWLU2fNUSoLgRNB0mKOCn1dzfnt6td
-3zZxFJmP3MKS8edgkpfs2Ejcv8ECIMYkpChMMFp2bbFc893enhBxoYjHW5tBbcqwuI4V7q0zK89H
-BFx1cQqYJJgpp0lZpd34t0NiYfPT4tBVPwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFa7AliEZwgs
-3x/be0kz9dNnnfS0ChCzycUs4pJqcXgn8nCDQtM+z6lU9PHYkhaM0QTLS6vJn0WuPIqpsHEzXcjF
-V9+vqDWzf4mH6eglkrh/hXqu1rweN1gqZ8mRzyqBPu3GOd/APhmcGcwTTYJBtYze4D1gCCAPRX5r
-on+jjBXu
------END CERTIFICATE-----
-
-Verisign Class 3 Public Primary Certification Authority - G3
-============================================================
------BEGIN CERTIFICATE-----
-MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV
-UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
-cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
-IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh
-dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw
-CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy
-dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv
-cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkg
-Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
-ggEBAMu6nFL8eB8aHm8bN3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1
-EUGO+i2tKmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGukxUc
-cLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBmCC+Vk7+qRy+oRpfw
-EuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJXwzw3sJ2zq/3avL6QaaiMxTJ5Xpj
-055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWuimi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA
-ERSWwauSCPc/L8my/uRan2Te2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5f
-j267Cz3qWhMeDGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC
-/Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565pF4ErWjfJXir0
-xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGtTxzhT5yvDwyd93gN2PQ1VoDa
-t20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ==
------END CERTIFICATE-----
-
-Verisign Class 4 Public Primary Certification Authority - G3
-============================================================
------BEGIN CERTIFICATE-----
-MIIEGjCCAwICEQDsoKeLbnVqAc/EfMwvlF7XMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV
-UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
-cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
-IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh
-dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw
-CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy
-dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv
-cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDQgUHVibGljIFByaW1hcnkg
-Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
-ggEBAK3LpRFpxlmr8Y+1GQ9Wzsy1HyDkniYlS+BzZYlZ3tCD5PUPtbut8XzoIfzk6AzufEUiGXaS
-tBO3IFsJ+mGuqPKljYXCKtbeZjbSmwL0qJJgfJxptI8kHtCGUvYynEFYHiK9zUVilQhu0GbdU6LM
-8BDcVHOLBKFGMzNcF0C5nk3T875Vg+ixiY5afJqWIpA7iCXy0lOIAgwLePLmNxdLMEYH5IBtptiW
-Lugs+BGzOA1mppvqySNb247i8xOOGlktqgLw7KSHZtzBP/XYufTsgsbSPZUd5cBPhMnZo0QoBmrX
-Razwa2rvTl/4EYIeOGM0ZlDUPpNz+jDDZq3/ky2X7wMCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA
-j/ola09b5KROJ1WrIhVZPMq1CtRK26vdoV9TxaBXOcLORyu+OshWv8LZJxA6sQU8wHcxuzrTBXtt
-mhwwjIDLk5Mqg6sFUYICABFna/OIYUdfA5PVWw3g8dShMjWFsjrbsIKr0csKvE+MW8VLADsfKoKm
-fjaF3H48ZwC15DtS4KjrXRX5xm3wrR0OhbepmnMUWluPQSjA1egtTaRezarZ7c7c2NU8Qh0XwRJd
-RTjDOPP8hS6DRkiy1yBfkjaP53kPmF6Z6PDQpLv1U70qzlmwr25/bLvSHgCwIe34QWKCudiyxLtG
-UPMxxY8BqHTr9Xgn2uf3ZkPznoM+IKrDNWCRzg==
------END CERTIFICATE-----
-
-Entrust.net Secure Server CA
-============================
------BEGIN CERTIFICATE-----
-MIIE2DCCBEGgAwIBAgIEN0rSQzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMCVVMxFDASBgNV
-BAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5uZXQvQ1BTIGluY29ycC4gYnkg
-cmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRl
-ZDE6MDgGA1UEAxMxRW50cnVzdC5uZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhv
-cml0eTAeFw05OTA1MjUxNjA5NDBaFw0xOTA1MjUxNjM5NDBaMIHDMQswCQYDVQQGEwJVUzEUMBIG
-A1UEChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5jb3JwLiBi
-eSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBFbnRydXN0Lm5ldCBMaW1p
-dGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRpb24gQXV0
-aG9yaXR5MIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQDNKIM0VBuJ8w+vN5Ex/68xYMmo6LIQ
-aO2f55M28Qpku0f1BBc/I0dNxScZgSYMVHINiC3ZH5oSn7yzcdOAGT9HZnuMNSjSuQrfJNqc1lB5
-gXpa0zf3wkrYKZImZNHkmGw6AIr1NJtl+O3jEP/9uElY3KDegjlrgbEWGWG5VLbmQwIBA6OCAdcw
-ggHTMBEGCWCGSAGG+EIBAQQEAwIABzCCARkGA1UdHwSCARAwggEMMIHeoIHboIHYpIHVMIHSMQsw
-CQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5l
-dC9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBF
-bnRydXN0Lm5ldCBMaW1pdGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENl
-cnRpZmljYXRpb24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCmgJ6AlhiNodHRwOi8vd3d3LmVu
-dHJ1c3QubmV0L0NSTC9uZXQxLmNybDArBgNVHRAEJDAigA8xOTk5MDUyNTE2MDk0MFqBDzIwMTkw
-NTI1MTYwOTQwWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAU8BdiE1U9s/8KAGv7UISX8+1i0Bow
-HQYDVR0OBBYEFPAXYhNVPbP/CgBr+1CEl/PtYtAaMAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EA
-BAwwChsEVjQuMAMCBJAwDQYJKoZIhvcNAQEFBQADgYEAkNwwAvpkdMKnCqV8IY00F6j7Rw7/JXyN
-Ewr75Ji174z4xRAN95K+8cPV1ZVqBLssziY2ZcgxxufuP+NXdYR6Ee9GTxj005i7qIcyunL2POI9
-n9cd2cNgQ4xYDiKWL2KjLB+6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G+bI=
------END CERTIFICATE-----
-
-Entrust.net Premium 2048 Secure Server CA
-=========================================
------BEGIN CERTIFICATE-----
-MIIEKjCCAxKgAwIBAgIEOGPe+DANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChMLRW50cnVzdC5u
-ZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBpbmNvcnAuIGJ5IHJlZi4gKGxp
-bWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNV
-BAMTKkVudHJ1c3QubmV0IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQx
-NzUwNTFaFw0yOTA3MjQxNDE1MTJaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3
-d3d3LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTEl
-MCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5u
-ZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgpMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
-MIIBCgKCAQEArU1LqRKGsuqjIAcVFmQqK0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOL
-Gp18EzoOH1u3Hs/lJBQesYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSr
-hRSGlVuXMlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVTXTzW
-nLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/HoZdenoVve8AjhUi
-VBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH4QIDAQABo0IwQDAOBgNVHQ8BAf8E
-BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUVeSB0RGAvtiJuQijMfmhJAkWuXAwDQYJ
-KoZIhvcNAQEFBQADggEBADubj1abMOdTmXx6eadNl9cZlZD7Bh/KM3xGY4+WZiT6QBshJ8rmcnPy
-T/4xmf3IDExoU8aAghOY+rat2l098c5u9hURlIIM7j+VrxGrD9cv3h8Dj1csHsm7mhpElesYT6Yf
-zX1XEC+bBAlahLVu2B064dae0Wx5XnkcFMXj0EyTO2U87d89vqbllRrDtRnDvV5bu/8j72gZyxKT
-J1wDLW8w0B62GqzeWvfRqqgnpv55gcR5mTNXuhKwqeBCbJPKVt7+bYQLCIt+jerXmCHG8+c8eS9e
-nNFMFY3h7CI3zJpDC5fcgJCNs2ebb0gIFVbPv/ErfF6adulZkMV8gzURZVE=
------END CERTIFICATE-----
-
-Baltimore CyberTrust Root
-=========================
------BEGIN CERTIFICATE-----
-MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJRTESMBAGA1UE
-ChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYDVQQDExlCYWx0aW1vcmUgQ3li
-ZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoXDTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMC
-SUUxEjAQBgNVBAoTCUJhbHRpbW9yZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFs
-dGltb3JlIEN5YmVyVHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKME
-uyKrmD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjrIZ3AQSsB
-UnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeKmpYcqWe4PwzV9/lSEy/C
-G9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSuXmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9
-XbIGevOF6uvUA65ehD5f/xXtabz5OTZydc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjpr
-l3RjM71oGDHweI12v/yejl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoI
-VDaGezq1BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEB
-BQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT929hkTI7gQCvlYpNRh
-cL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3WgxjkzSswF07r51XgdIGn9w/xZchMB5
-hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsa
-Y71k5h+3zvDyny67G7fyUIhzksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9H
-RCwBXbsdtTLSR9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp
------END CERTIFICATE-----
-
-Equifax Secure Global eBusiness CA
-==================================
------BEGIN CERTIFICATE-----
-MIICkDCCAfmgAwIBAgIBATANBgkqhkiG9w0BAQQFADBaMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT
-RXF1aWZheCBTZWN1cmUgSW5jLjEtMCsGA1UEAxMkRXF1aWZheCBTZWN1cmUgR2xvYmFsIGVCdXNp
-bmVzcyBDQS0xMB4XDTk5MDYyMTA0MDAwMFoXDTIwMDYyMTA0MDAwMFowWjELMAkGA1UEBhMCVVMx
-HDAaBgNVBAoTE0VxdWlmYXggU2VjdXJlIEluYy4xLTArBgNVBAMTJEVxdWlmYXggU2VjdXJlIEds
-b2JhbCBlQnVzaW5lc3MgQ0EtMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAuucXkAJlsTRV
-PEnCUdXfp9E3j9HngXNBUmCbnaEXJnitx7HoJpQytd4zjTov2/KaelpzmKNc6fuKcxtc58O/gGzN
-qfTWK8D3+ZmqY6KxRwIP1ORROhI8bIpaVIRw28HFkM9yRcuoWcDNM50/o5brhTMhHD4ePmBudpxn
-hcXIw2ECAwEAAaNmMGQwEQYJYIZIAYb4QgEBBAQDAgAHMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0j
-BBgwFoAUvqigdHJQa0S3ySPY+6j/s1draGwwHQYDVR0OBBYEFL6ooHRyUGtEt8kj2Puo/7NXa2hs
-MA0GCSqGSIb3DQEBBAUAA4GBADDiAVGqx+pf2rnQZQ8w1j7aDRRJbpGTJxQx78T3LUX47Me/okEN
-I7SS+RkAZ70Br83gcfxaz2TE4JaY0KNA4gGK7ycH8WUBikQtBmV1UsCGECAhX2xrD2yuCRyv8qIY
-NMR1pHMc8Y3c7635s3a0kr/clRAevsvIO1qEYBlWlKlV
------END CERTIFICATE-----
-
-Equifax Secure eBusiness CA 1
-=============================
------BEGIN CERTIFICATE-----
-MIICgjCCAeugAwIBAgIBBDANBgkqhkiG9w0BAQQFADBTMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT
-RXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNzIENB
-LTEwHhcNOTkwNjIxMDQwMDAwWhcNMjAwNjIxMDQwMDAwWjBTMQswCQYDVQQGEwJVUzEcMBoGA1UE
-ChMTRXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNz
-IENBLTEwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAM4vGbwXt3fek6lfWg0XTzQaDJj0ItlZ
-1MRoRvC0NcWFAyDGr0WlIVFFQesWWDYyb+JQYmT5/VGcqiTZ9J2DKocKIdMSODRsjQBuWqDZQu4a
-IZX5UkxVWsUPOE9G+m34LjXWHXzr4vCwdYDIqROsvojvOm6rXyo4YgKwEnv+j6YDAgMBAAGjZjBk
-MBEGCWCGSAGG+EIBAQQEAwIABzAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFEp4MlIR21kW
-Nl7fwRQ2QGpHfEyhMB0GA1UdDgQWBBRKeDJSEdtZFjZe38EUNkBqR3xMoTANBgkqhkiG9w0BAQQF
-AAOBgQB1W6ibAxHm6VZMzfmpTMANmvPMZWnmJXbMWbfWVMMdzZmsGd20hdXgPfxiIKeES1hl8eL5
-lSE/9dR+WB5Hh1Q+WKG1tfgq73HnvMP2sUlG4tega+VWeponmHxGYhTnyfxuAxJ5gDgdSIKN/Bf+
-KpYrtWKmpj29f5JZzVoqgrI3eQ==
------END CERTIFICATE-----
-
-AddTrust Low-Value Services Root
-================================
------BEGIN CERTIFICATE-----
-MIIEGDCCAwCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
-QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYDVQQDExhBZGRU
-cnVzdCBDbGFzcyAxIENBIFJvb3QwHhcNMDAwNTMwMTAzODMxWhcNMjAwNTMwMTAzODMxWjBlMQsw
-CQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBO
-ZXR3b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwggEiMA0GCSqGSIb3DQEB
-AQUAA4IBDwAwggEKAoIBAQCWltQhSWDia+hBBwzexODcEyPNwTXH+9ZOEQpnXvUGW2ulCDtbKRY6
-54eyNAbFvAWlA3yCyykQruGIgb3WntP+LVbBFc7jJp0VLhD7Bo8wBN6ntGO0/7Gcrjyvd7ZWxbWr
-oulpOj0OM3kyP3CCkplhbY0wCI9xP6ZIVxn4JdxLZlyldI+Yrsj5wAYi56xz36Uu+1LcsRVlIPo1
-Zmne3yzxbrww2ywkEtvrNTVokMsAsJchPXQhI2U0K7t4WaPW4XY5mqRJjox0r26kmqPZm9I4XJui
-GMx1I4S+6+JNM3GOGvDC+Mcdoq0Dlyz4zyXG9rgkMbFjXZJ/Y/AlyVMuH79NAgMBAAGjgdIwgc8w
-HQYDVR0OBBYEFJWxtPCUtr3H2tERCSG+wa9J/RB7MAsGA1UdDwQEAwIBBjAPBgNVHRMBAf8EBTAD
-AQH/MIGPBgNVHSMEgYcwgYSAFJWxtPCUtr3H2tERCSG+wa9J/RB7oWmkZzBlMQswCQYDVQQGEwJT
-RTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEw
-HwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBACxt
-ZBsfzQ3duQH6lmM0MkhHma6X7f1yFqZzR1r0693p9db7RcwpiURdv0Y5PejuvE1Uhh4dbOMXJ0Ph
-iVYrqW9yTkkz43J8KiOavD7/KCrto/8cI7pDVwlnTUtiBi34/2ydYB7YHEt9tTEv2dB8Xfjea4MY
-eDdXL+gzB2ffHsdrKpV2ro9Xo/D0UrSpUwjP4E/TelOL/bscVjby/rK25Xa71SJlpz/+0WatC7xr
-mYbvP33zGDLKe8bjq2RGlfgmadlVg3sslgf/WSxEo8bl6ancoWOAWiFeIc9TVPC6b4nbqKqVz4vj
-ccweGyBECMB6tkD9xOQ14R0WHNC8K47Wcdk=
------END CERTIFICATE-----
-
-AddTrust External Root
-======================
------BEGIN CERTIFICATE-----
-MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
-QWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFsIFRUUCBOZXR3b3JrMSIwIAYD
-VQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEw
-NDgzOFowbzELMAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRU
-cnVzdCBFeHRlcm5hbCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0Eg
-Um9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvtH7xsD821
-+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9uMq/NzgtHj6RQa1wVsfw
-Tz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzXmk6vBbOmcZSccbNQYArHE504B4YCqOmo
-aSYYkKtMsE8jqzpPhNjfzp/haW+710LXa0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy
-2xSoRcRdKn23tNbE7qzNE0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv7
-7+ldU9U0WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYDVR0P
-BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0Jvf6xCZU7wO94CTL
-VBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEmMCQGA1UECxMdQWRk
-VHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsxIjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENB
-IFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZl
-j7DYd7usQWxHYINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5
-6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvCNr4TDea9Y355
-e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEXc4g/VhsxOBi0cQ+azcgOno4u
-G+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5amnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ=
------END CERTIFICATE-----
-
-AddTrust Public Services Root
-=============================
------BEGIN CERTIFICATE-----
-MIIEFTCCAv2gAwIBAgIBATANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
-QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSAwHgYDVQQDExdBZGRU
-cnVzdCBQdWJsaWMgQ0EgUm9vdDAeFw0wMDA1MzAxMDQxNTBaFw0yMDA1MzAxMDQxNTBaMGQxCzAJ
-BgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5l
-dHdvcmsxIDAeBgNVBAMTF0FkZFRydXN0IFB1YmxpYyBDQSBSb290MIIBIjANBgkqhkiG9w0BAQEF
-AAOCAQ8AMIIBCgKCAQEA6Rowj4OIFMEg2Dybjxt+A3S72mnTRqX4jsIMEZBRpS9mVEBV6tsfSlbu
-nyNu9DnLoblv8n75XYcmYZ4c+OLspoH4IcUkzBEMP9smcnrHAZcHF/nXGCwwfQ56HmIexkvA/X1i
-d9NEHif2P0tEs7c42TkfYNVRknMDtABp4/MUTu7R3AnPdzRGULD4EfL+OHn3Bzn+UZKXC1sIXzSG
-Aa2Il+tmzV7R/9x98oTaunet3IAIx6eH1lWfl2royBFkuucZKT8Rs3iQhCBSWxHveNCD9tVIkNAw
-HM+A+WD+eeSI8t0A65RF62WUaUC6wNW0uLp9BBGo6zEFlpROWCGOn9Bg/QIDAQABo4HRMIHOMB0G
-A1UdDgQWBBSBPjfYkrAfd59ctKtzquf2NGAv+jALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB
-/zCBjgYDVR0jBIGGMIGDgBSBPjfYkrAfd59ctKtzquf2NGAv+qFopGYwZDELMAkGA1UEBhMCU0Ux
-FDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRUcnVzdCBUVFAgTmV0d29yazEgMB4G
-A1UEAxMXQWRkVHJ1c3QgUHVibGljIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBAAP3FUr4
-JNojVhaTdt02KLmuG7jD8WS6IBh4lSknVwW8fCr0uVFV2ocC3g8WFzH4qnkuCRO7r7IgGRLlk/lL
-+YPoRNWyQSW/iHVv/xD8SlTQX/D67zZzfRs2RcYhbbQVuE7PnFylPVoAjgbjPGsye/Kf8Lb93/Ao
-GEjwxrzQvzSAlsJKsW2Ox5BF3i9nrEUEo3rcVZLJR2bYGozH7ZxOmuASu7VqTITh4SINhwBk/ox9
-Yjllpu9CtoAlEmEBqCQTcAARJl/6NVDFSMwGR+gn2HCNX2TmoUQmXiLsks3/QppEIW1cxeMiHV9H
-EufOX1362KqxMy3ZdvJOOjMMK7MtkAY=
------END CERTIFICATE-----
-
-AddTrust Qualified Certificates Root
-====================================
------BEGIN CERTIFICATE-----
-MIIEHjCCAwagAwIBAgIBATANBgkqhkiG9w0BAQUFADBnMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
-QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSMwIQYDVQQDExpBZGRU
-cnVzdCBRdWFsaWZpZWQgQ0EgUm9vdDAeFw0wMDA1MzAxMDQ0NTBaFw0yMDA1MzAxMDQ0NTBaMGcx
-CzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQ
-IE5ldHdvcmsxIzAhBgNVBAMTGkFkZFRydXN0IFF1YWxpZmllZCBDQSBSb290MIIBIjANBgkqhkiG
-9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5B6a/twJWoekn0e+EV+vhDTbYjx5eLfpMLXsDBwqxBb/4Oxx
-64r1EW7tTw2R0hIYLUkVAcKkIhPHEWT/IhKauY5cLwjPcWqzZwFZ8V1G87B4pfYOQnrjfxvM0PC3
-KP0q6p6zsLkEqv32x7SxuCqg+1jxGaBvcCV+PmlKfw8i2O+tCBGaKZnhqkRFmhJePp1tUvznoD1o
-L/BLcHwTOK28FSXx1s6rosAx1i+f4P8UWfyEk9mHfExUE+uf0S0R+Bg6Ot4l2ffTQO2kBhLEO+GR
-wVY18BTcZTYJbqukB8c10cIDMzZbdSZtQvESa0NvS3GU+jQd7RNuyoB/mC9suWXY6QIDAQABo4HU
-MIHRMB0GA1UdDgQWBBQ5lYtii1zJ1IC6WA+XPxUIQ8yYpzALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/
-BAUwAwEB/zCBkQYDVR0jBIGJMIGGgBQ5lYtii1zJ1IC6WA+XPxUIQ8yYp6FrpGkwZzELMAkGA1UE
-BhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRUcnVzdCBUVFAgTmV0d29y
-azEjMCEGA1UEAxMaQWRkVHJ1c3QgUXVhbGlmaWVkIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQAD
-ggEBABmrder4i2VhlRO6aQTvhsoToMeqT2QbPxj2qC0sVY8FtzDqQmodwCVRLae/DLPt7wh/bDxG
-GuoYQ992zPlmhpwsaPXpF/gxsxjE1kh9I0xowX67ARRvxdlu3rsEQmr49lx95dr6h+sNNVJn0J6X
-dgWTP5XHAeZpVTh/EGGZyeNfpso+gmNIquIISD6q8rKFYqa0p9m9N5xotS1WfbC3P6CxB9bpT9ze
-RXEwMn8bLgn5v1Kh7sKAPgZcLlVAwRv1cEWw3F369nJad9Jjzc9YiQBCYz95OdBEsIJuQRno3eDB
-iFrRHnGTHyQwdOUeqN48Jzd/g66ed8/wMLH/S5noxqE=
------END CERTIFICATE-----
-
-Entrust Root Certification Authority
-====================================
------BEGIN CERTIFICATE-----
-MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMCVVMxFjAUBgNV
-BAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0Lm5ldC9DUFMgaXMgaW5jb3Jw
-b3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMWKGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsG
-A1UEAxMkRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0
-MloXDTI2MTEyNzIwNTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMu
-MTkwNwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSByZWZlcmVu
-Y2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNVBAMTJEVudHJ1c3QgUm9v
-dCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
-ALaVtkNC+sZtKm9I35RMOVcF7sN5EUFoNu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYsz
-A9u3g3s+IIRe7bJWKKf44LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOww
-Cj0Yzfv9KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGIrb68
-j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi94DkZfs0Nw4pgHBN
-rziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOBsDCBrTAOBgNVHQ8BAf8EBAMCAQYw
-DwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAigA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1
-MzQyWjAfBgNVHSMEGDAWgBRokORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DH
-hmak8fdLQ/uEvW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA
-A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9tO1KzKtvn1ISM
-Y/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6ZuaAGAT/3B+XxFNSRuzFVJ7yVTa
-v52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTS
-W3iDVuycNsMm4hH2Z0kdkquM++v/eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0
-tHuu2guQOHXvgR1m0vdXcDazv/wor3ElhVsT/h5/WrQ8
------END CERTIFICATE-----
-
-RSA Security 2048 v3
-====================
------BEGIN CERTIFICATE-----
-MIIDYTCCAkmgAwIBAgIQCgEBAQAAAnwAAAAKAAAAAjANBgkqhkiG9w0BAQUFADA6MRkwFwYDVQQK
-ExBSU0EgU2VjdXJpdHkgSW5jMR0wGwYDVQQLExRSU0EgU2VjdXJpdHkgMjA0OCBWMzAeFw0wMTAy
-MjIyMDM5MjNaFw0yNjAyMjIyMDM5MjNaMDoxGTAXBgNVBAoTEFJTQSBTZWN1cml0eSBJbmMxHTAb
-BgNVBAsTFFJTQSBTZWN1cml0eSAyMDQ4IFYzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
-AQEAt49VcdKA3XtpeafwGFAyPGJn9gqVB93mG/Oe2dJBVGutn3y+Gc37RqtBaB4Y6lXIL5F4iSj7
-Jylg/9+PjDvJSZu1pJTOAeo+tWN7fyb9Gd3AIb2E0S1PRsNO3Ng3OTsor8udGuorryGlwSMiuLgb
-WhOHV4PR8CDn6E8jQrAApX2J6elhc5SYcSa8LWrg903w8bYqODGBDSnhAMFRD0xS+ARaqn1y07iH
-KrtjEAMqs6FPDVpeRrc9DvV07Jmf+T0kgYim3WBU6JU2PcYJk5qjEoAAVZkZR73QpXzDuvsf9/UP
-+Ky5tfQ3mBMY3oVbtwyCO4dvlTlYMNpuAWgXIszACwIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/
-MA4GA1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBQHw1EwpKrpRa41JPr/JCwz0LGdjDAdBgNVHQ4E
-FgQUB8NRMKSq6UWuNST6/yQsM9CxnYwwDQYJKoZIhvcNAQEFBQADggEBAF8+hnZuuDU8TjYcHnmY
-v/3VEhF5Ug7uMYm83X/50cYVIeiKAVQNOvtUudZj1LGqlk2iQk3UUx+LEN5/Zb5gEydxiKRz44Rj
-0aRV4VCT5hsOedBnvEbIvz8XDZXmxpBp3ue0L96VfdASPz0+f00/FGj1EVDVwfSQpQgdMWD/YIwj
-VAqv/qFuxdF6Kmh4zx6CCiC0H63lhbJqaHVOrSU3lIW+vaHU6rcMSzyd6BIA8F+sDeGscGNz9395
-nzIlQnQFgCi/vcEkllgVsRch6YlL2weIZ/QVrXA+L02FO8K32/6YaCOJ4XQP3vTFhGMpG8zLB8kA
-pKnXwiJPZ9d37CAFYd4=
------END CERTIFICATE-----
-
-GeoTrust Global CA
-==================
------BEGIN CERTIFICATE-----
-MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVTMRYwFAYDVQQK
-Ew1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9iYWwgQ0EwHhcNMDIwNTIxMDQw
-MDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5j
-LjEbMBkGA1UEAxMSR2VvVHJ1c3QgR2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
-CgKCAQEA2swYYzD99BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjo
-BbdqfnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDviS2Aelet
-8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU1XupGc1V3sjs0l44U+Vc
-T4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+bw8HHa8sHo9gOeL6NlMTOdReJivbPagU
-vTLrGAMoUgRx5aszPeE4uwc2hGKceeoWMPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTAD
-AQH/MB0GA1UdDgQWBBTAephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVk
-DBF9qn1luMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKInZ57Q
-zxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfStQWVYrmm3ok9Nns4
-d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcFPseKUgzbFbS9bZvlxrFUaKnjaZC2
-mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Unhw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6p
-XE0zX5IJL4hmXXeXxx12E6nV5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvm
-Mw==
------END CERTIFICATE-----
-
-GeoTrust Global CA 2
-====================
------BEGIN CERTIFICATE-----
-MIIDZjCCAk6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBEMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN
-R2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFsIENBIDIwHhcNMDQwMzA0MDUw
-MDAwWhcNMTkwMzA0MDUwMDAwWjBEMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5j
-LjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFsIENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
-ggEKAoIBAQDvPE1APRDfO1MA4Wf+lGAVPoWI8YkNkMgoI5kF6CsgncbzYEbYwbLVjDHZ3CB5JIG/
-NTL8Y2nbsSpr7iFY8gjpeMtvy/wWUsiRxP89c96xPqfCfWbB9X5SJBri1WeR0IIQ13hLTytCOb1k
-LUCgsBDTOEhGiKEMuzozKmKY+wCdE1l/bztyqu6mD4b5BWHqZ38MN5aL5mkWRxHCJ1kDs6ZgwiFA
-Vvqgx306E+PsV8ez1q6diYD3Aecs9pYrEw15LNnA5IZ7S4wMcoKK+xfNAGw6EzywhIdLFnopsk/b
-HdQL82Y3vdj2V7teJHq4PIu5+pIaGoSe2HSPqht/XvT+RSIhAgMBAAGjYzBhMA8GA1UdEwEB/wQF
-MAMBAf8wHQYDVR0OBBYEFHE4NvICMVNHK266ZUapEBVYIAUJMB8GA1UdIwQYMBaAFHE4NvICMVNH
-K266ZUapEBVYIAUJMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQUFAAOCAQEAA/e1K6tdEPx7
-srJerJsOflN4WT5CBP51o62sgU7XAotexC3IUnbHLB/8gTKY0UvGkpMzNTEv/NgdRN3ggX+d6Yvh
-ZJFiCzkIjKx0nVnZellSlxG5FntvRdOW2TF9AjYPnDtuzywNA0ZF66D0f0hExghAzN4bcLUprbqL
-OzRldRtxIR0sFAqwlpW41uryZfspuk/qkZN0abby/+Ea0AzRdoXLiiW9l14sbxWZJue2Kf8i7MkC
-x1YAzUm5s2x7UwQa4qjJqhIFI8LO57sEAszAR6LkxCkvW0VXiVHuPOtSCP8HNR6fNWpHSlaY0VqF
-H4z1Ir+rzoPz4iIprn2DQKi6bA==
------END CERTIFICATE-----
-
-GeoTrust Universal CA
-=====================
------BEGIN CERTIFICATE-----
-MIIFaDCCA1CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN
-R2VvVHJ1c3QgSW5jLjEeMBwGA1UEAxMVR2VvVHJ1c3QgVW5pdmVyc2FsIENBMB4XDTA0MDMwNDA1
-MDAwMFoXDTI5MDMwNDA1MDAwMFowRTELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IElu
-Yy4xHjAcBgNVBAMTFUdlb1RydXN0IFVuaXZlcnNhbCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIP
-ADCCAgoCggIBAKYVVaCjxuAfjJ0hUNfBvitbtaSeodlyWL0AG0y/YckUHUWCq8YdgNY96xCcOq9t
-JPi8cQGeBvV8Xx7BDlXKg5pZMK4ZyzBIle0iN430SppyZj6tlcDgFgDgEB8rMQ7XlFTTQjOgNB0e
-RXbdT8oYN+yFFXoZCPzVx5zw8qkuEKmS5j1YPakWaDwvdSEYfyh3peFhF7em6fgemdtzbvQKoiFs
-7tqqhZJmr/Z6a4LauiIINQ/PQvE1+mrufislzDoR5G2vc7J2Ha3QsnhnGqQ5HFELZ1aD/ThdDc7d
-8Lsrlh/eezJS/R27tQahsiFepdaVaH/wmZ7cRQg+59IJDTWU3YBOU5fXtQlEIGQWFwMCTFMNaN7V
-qnJNk22CDtucvc+081xdVHppCZbW2xHBjXWotM85yM48vCR85mLK4b19p71XZQvk/iXttmkQ3Cga
-Rr0BHdCXteGYO8A3ZNY9lO4L4fUorgtWv3GLIylBjobFS1J72HGrH4oVpjuDWtdYAVHGTEHZf9hB
-Z3KiKN9gg6meyHv8U3NyWfWTehd2Ds735VzZC1U0oqpbtWpU5xPKV+yXbfReBi9Fi1jUIxaS5BZu
-KGNZMN9QAZxjiRqf2xeUgnA3wySemkfWWspOqGmJch+RbNt+nhutxx9z3SxPGWX9f5NAEC7S8O08
-ni4oPmkmM8V7AgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNq7LqqwDLiIJlF0
-XG0D08DYj3rWMB8GA1UdIwQYMBaAFNq7LqqwDLiIJlF0XG0D08DYj3rWMA4GA1UdDwEB/wQEAwIB
-hjANBgkqhkiG9w0BAQUFAAOCAgEAMXjmx7XfuJRAyXHEqDXsRh3ChfMoWIawC/yOsjmPRFWrZIRc
-aanQmjg8+uUfNeVE44B5lGiku8SfPeE0zTBGi1QrlaXv9z+ZhP015s8xxtxqv6fXIwjhmF7DWgh2
-qaavdy+3YL1ERmrvl/9zlcGO6JP7/TG37FcREUWbMPEaiDnBTzynANXH/KttgCJwpQzgXQQpAvvL
-oJHRfNbDflDVnVi+QTjruXU8FdmbyUqDWcDaU/0zuzYYm4UPFd3uLax2k7nZAY1IEKj79TiG8dsK
-xr2EoyNB3tZ3b4XUhRxQ4K5RirqNPnbiucon8l+f725ZDQbYKxek0nxru18UGkiPGkzns0ccjkxF
-KyDuSN/n3QmOGKjaQI2SJhFTYXNd673nxE0pN2HrrDktZy4W1vUAg4WhzH92xH3kt0tm7wNFYGm2
-DFKWkoRepqO1pD4r2czYG0eq8kTaT/kD6PAUyz/zg97QwVTjt+gKN02LIFkDMBmhLMi9ER/frslK
-xfMnZmaGrGiR/9nmUxwPi1xpZQomyB40w11Re9epnAahNt3ViZS82eQtDF4JbAiXfKM9fJP/P6EU
-p8+1Xevb2xzEdt+Iub1FBZUbrvxGakyvSOPOrg/SfuvmbJxPgWp6ZKy7PtXny3YuxadIwVyQD8vI
-P/rmMuGNG2+k5o7Y+SlIis5z/iw=
------END CERTIFICATE-----
-
-GeoTrust Universal CA 2
-=======================
------BEGIN CERTIFICATE-----
-MIIFbDCCA1SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN
-R2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwHhcNMDQwMzA0
-MDUwMDAwWhcNMjkwMzA0MDUwMDAwWjBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3Qg
-SW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwggIiMA0GCSqGSIb3DQEBAQUA
-A4ICDwAwggIKAoICAQCzVFLByT7y2dyxUxpZKeexw0Uo5dfR7cXFS6GqdHtXr0om/Nj1XqduGdt0
-DE81WzILAePb63p3NeqqWuDW6KFXlPCQo3RWlEQwAx5cTiuFJnSCegx2oG9NzkEtoBUGFF+3Qs17
-j1hhNNwqCPkuwwGmIkQcTAeC5lvO0Ep8BNMZcyfwqph/Lq9O64ceJHdqXbboW0W63MOhBW9Wjo8Q
-JqVJwy7XQYci4E+GymC16qFjwAGXEHm9ADwSbSsVsaxLse4YuU6W3Nx2/zu+z18DwPw76L5GG//a
-QMJS9/7jOvdqdzXQ2o3rXhhqMcceujwbKNZrVMaqW9eiLBsZzKIC9ptZvTdrhrVtgrrY6slWvKk2
-WP0+GfPtDCapkzj4T8FdIgbQl+rhrcZV4IErKIM6+vR7IVEAvlI4zs1meaj0gVbi0IMJR1FbUGrP
-20gaXT73y/Zl92zxlfgCOzJWgjl6W70viRu/obTo/3+NjN8D8WBOWBFM66M/ECuDmgFz2ZRthAAn
-ZqzwcEAJQpKtT5MNYQlRJNiS1QuUYbKHsu3/mjX/hVTK7URDrBs8FmtISgocQIgfksILAAX/8sgC
-SqSqqcyZlpwvWOB94b67B9xfBHJcMTTD7F8t4D1kkCLm0ey4Lt1ZrtmhN79UNdxzMk+MBB4zsslG
-8dhcyFVQyWi9qLo2CQIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBR281Xh+qQ2
-+/CfXGJx7Tz0RzgQKzAfBgNVHSMEGDAWgBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAOBgNVHQ8BAf8E
-BAMCAYYwDQYJKoZIhvcNAQEFBQADggIBAGbBxiPz2eAubl/oz66wsCVNK/g7WJtAJDday6sWSf+z
-dXkzoS9tcBc0kf5nfo/sm+VegqlVHy/c1FEHEv6sFj4sNcZj/NwQ6w2jqtB8zNHQL1EuxBRa3ugZ
-4T7GzKQp5y6EqgYweHZUcyiYWTjgAA1i00J9IZ+uPTqM1fp3DRgrFg5fNuH8KrUwJM/gYwx7WBr+
-mbpCErGR9Hxo4sjoryzqyX6uuyo9DRXcNJW2GHSoag/HtPQTxORb7QrSpJdMKu0vbBKJPfEncKpq
-A1Ihn0CoZ1Dy81of398j9tx4TuaYT1U6U+Pv8vSfx3zYWK8pIpe44L2RLrB27FcRz+8pRPPphXpg
-Y+RdM4kX2TGq2tbzGDVyz4crL2MjhF2EjD9XoIj8mZEoJmmZ1I+XRL6O1UixpCgp8RW04eWe3fiP
-pm8m1wk8OhwRDqZsN/etRIcsKMfYdIKz0G9KV7s1KSegi+ghp4dkNl3M2Basx7InQJJVOCiNUW7d
-FGdTbHFcJoRNdVq2fmBWqU2t+5sel/MN2dKXVHfaPRK34B7vCAas+YWH6aLcr34YEoP9VhdBLtUp
-gn2Z9DH2canPLAEnpQW5qrJITirvn5NSUZU8UnOOVkwXQMAJKOSLakhT2+zNVVXxxvjpoixMptEm
-X36vWkzaH6byHCx+rgIW0lbQL1dTR+iS
------END CERTIFICATE-----
-
-America Online Root Certification Authority 1
-=============================================
------BEGIN CERTIFICATE-----
-MIIDpDCCAoygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT
-QW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBPbmxpbmUgUm9vdCBDZXJ0aWZp
-Y2F0aW9uIEF1dGhvcml0eSAxMB4XDTAyMDUyODA2MDAwMFoXDTM3MTExOTIwNDMwMFowYzELMAkG
-A1UEBhMCVVMxHDAaBgNVBAoTE0FtZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2Eg
-T25saW5lIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMTCCASIwDQYJKoZIhvcNAQEBBQAD
-ggEPADCCAQoCggEBAKgv6KRpBgNHw+kqmP8ZonCaxlCyfqXfaE0bfA+2l2h9LaaLl+lkhsmj76CG
-v2BlnEtUiMJIxUo5vxTjWVXlGbR0yLQFOVwWpeKVBeASrlmLojNoWBym1BW32J/X3HGrfpq/m44z
-DyL9Hy7nBzbvYjnF3cu6JRQj3gzGPTzOggjmZj7aUTsWOqMFf6Dch9Wc/HKpoH145LcxVR5lu9Rh
-sCFg7RAycsWSJR74kEoYeEfffjA3PlAb2xzTa5qGUwew76wGePiEmf4hjUyAtgyC9mZweRrTT6PP
-8c9GsEsPPt2IYriMqQkoO3rHl+Ee5fSfwMCuJKDIodkP1nsmgmkyPacCAwEAAaNjMGEwDwYDVR0T
-AQH/BAUwAwEB/zAdBgNVHQ4EFgQUAK3Zo/Z59m50qX8zPYEX10zPM94wHwYDVR0jBBgwFoAUAK3Z
-o/Z59m50qX8zPYEX10zPM94wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBBQUAA4IBAQB8itEf
-GDeC4Liwo+1WlchiYZwFos3CYiZhzRAW18y0ZTTQEYqtqKkFZu90821fnZmv9ov761KyBZiibyrF
-VL0lvV+uyIbqRizBs73B6UlwGBaXCBOMIOAbLjpHyx7kADCVW/RFo8AasAFOq73AI25jP4BKxQft
-3OJvx8Fi8eNy1gTIdGcL+oiroQHIb/AUr9KZzVGTfu0uOMe9zkZQPXLjeSWdm4grECDdpbgyn43g
-Kd8hdIaC2y+CMMbHNYaz+ZZfRtsMRf3zUMNvxsNIrUam4SdHCh0Om7bCd39j8uB9Gr784N/Xx6ds
-sPmuujz9dLQR6FgNgLzTqIA6me11zEZ7
------END CERTIFICATE-----
-
-America Online Root Certification Authority 2
-=============================================
------BEGIN CERTIFICATE-----
-MIIFpDCCA4ygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT
-QW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBPbmxpbmUgUm9vdCBDZXJ0aWZp
-Y2F0aW9uIEF1dGhvcml0eSAyMB4XDTAyMDUyODA2MDAwMFoXDTM3MDkyOTE0MDgwMFowYzELMAkG
-A1UEBhMCVVMxHDAaBgNVBAoTE0FtZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2Eg
-T25saW5lIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMjCCAiIwDQYJKoZIhvcNAQEBBQAD
-ggIPADCCAgoCggIBAMxBRR3pPU0Q9oyxQcngXssNt79Hc9PwVU3dxgz6sWYFas14tNwC206B89en
-fHG8dWOgXeMHDEjsJcQDIPT/DjsS/5uN4cbVG7RtIuOx238hZK+GvFciKtZHgVdEglZTvYYUAQv8
-f3SkWq7xuhG1m1hagLQ3eAkzfDJHA1zEpYNI9FdWboE2JxhP7JsowtS013wMPgwr38oE18aO6lhO
-qKSlGBxsRZijQdEt0sdtjRnxrXm3gT+9BoInLRBYBbV4Bbkv2wxrkJB+FFk4u5QkE+XRnRTf04JN
-RvCAOVIyD+OEsnpD8l7eXz8d3eOyG6ChKiMDbi4BFYdcpnV1x5dhvt6G3NRI270qv0pV2uh9UPu0
-gBe4lL8BPeraunzgWGcXuVjgiIZGZ2ydEEdYMtA1fHkqkKJaEBEjNa0vzORKW6fIJ/KD3l67Xnfn
-6KVuY8INXWHQjNJsWiEOyiijzirplcdIz5ZvHZIlyMbGwcEMBawmxNJ10uEqZ8A9W6Wa6897Gqid
-FEXlD6CaZd4vKL3Ob5Rmg0gp2OpljK+T2WSfVVcmv2/LNzGZo2C7HK2JNDJiuEMhBnIMoVxtRsX6
-Kc8w3onccVvdtjc+31D1uAclJuW8tf48ArO3+L5DwYcRlJ4jbBeKuIonDFRH8KmzwICMoCfrHRnj
-B453cMor9H124HhnAgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFE1FwWg4u3Op
-aaEg5+31IqEjFNeeMB8GA1UdIwQYMBaAFE1FwWg4u3OpaaEg5+31IqEjFNeeMA4GA1UdDwEB/wQE
-AwIBhjANBgkqhkiG9w0BAQUFAAOCAgEAZ2sGuV9FOypLM7PmG2tZTiLMubekJcmnxPBUlgtk87FY
-T15R/LKXeydlwuXK5w0MJXti4/qftIe3RUavg6WXSIylvfEWK5t2LHo1YGwRgJfMqZJS5ivmae2p
-+DYtLHe/YUjRYwu5W1LtGLBDQiKmsXeu3mnFzcccobGlHBD7GL4acN3Bkku+KVqdPzW+5X1R+FXg
-JXUjhx5c3LqdsKyzadsXg8n33gy8CNyRnqjQ1xU3c6U1uPx+xURABsPr+CKAXEfOAuMRn0T//Zoy
-zH1kUQ7rVyZ2OuMeIjzCpjbdGe+n/BLzJsBZMYVMnNjP36TMzCmT/5RtdlwTCJfy7aULTd3oyWgO
-ZtMADjMSW7yV5TKQqLPGbIOtd+6Lfn6xqavT4fG2wLHqiMDn05DpKJKUe2h7lyoKZy2FAjgQ5ANh
-1NolNscIWC2hp1GvMApJ9aZphwctREZ2jirlmjvXGKL8nDgQzMY70rUXOm/9riW99XJZZLF0Kjhf
-GEzfz3EEWjbUvy+ZnOjZurGV5gJLIaFb1cFPj65pbVPbAZO1XB4Y3WRayhgoPmMEEf0cjQAPuDff
-Z4qdZqkCapH/E8ovXYO8h5Ns3CRRFgQlZvqz2cK6Kb6aSDiCmfS/O0oxGfm/jiEzFMpPVF/7zvuP
-cX/9XhmgD0uRuMRUvAawRY8mkaKO/qk=
------END CERTIFICATE-----
-
-Visa eCommerce Root
-===================
------BEGIN CERTIFICATE-----
-MIIDojCCAoqgAwIBAgIQE4Y1TR0/BvLB+WUF1ZAcYjANBgkqhkiG9w0BAQUFADBrMQswCQYDVQQG
-EwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2Ug
-QXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNvbW1lcmNlIFJvb3QwHhcNMDIwNjI2MDIxODM2
-WhcNMjIwNjI0MDAxNjEyWjBrMQswCQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMm
-VmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNv
-bW1lcmNlIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvV95WHm6h2mCxlCfL
-F9sHP4CFT8icttD0b0/Pmdjh28JIXDqsOTPHH2qLJj0rNfVIsZHBAk4ElpF7sDPwsRROEW+1QK8b
-RaVK7362rPKgH1g/EkZgPI2h4H3PVz4zHvtH8aoVlwdVZqW1LS7YgFmypw23RuwhY/81q6UCzyr0
-TP579ZRdhE2o8mCP2w4lPJ9zcc+U30rq299yOIzzlr3xF7zSujtFWsan9sYXiwGd/BmoKoMWuDpI
-/k4+oKsGGelT84ATB+0tvz8KPFUgOSwsAGl0lUq8ILKpeeUYiZGo3BxN77t+Nwtd/jmliFKMAGzs
-GHxBvfaLdXe6YJ2E5/4tAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEG
-MB0GA1UdDgQWBBQVOIMPPyw/cDMezUb+B4wg4NfDtzANBgkqhkiG9w0BAQUFAAOCAQEAX/FBfXxc
-CLkr4NWSR/pnXKUTwwMhmytMiUbPWU3J/qVAtmPN3XEolWcRzCSs00Rsca4BIGsDoo8Ytyk6feUW
-YFN4PMCvFYP3j1IzJL1kk5fui/fbGKhtcbP3LBfQdCVp9/5rPJS+TUtBjE7ic9DjkCJzQ83z7+pz
-zkWKsKZJ/0x9nXGIxHYdkFsd7v3M9+79YKWxehZx0RbQfBI8bGmX265fOZpwLwU8GUYEmSA20GBu
-YQa7FkKMcPcw++DbZqMAAb3mLNqRX6BGi01qnD093QVG/na/oAo85ADmJ7f/hC3euiInlhBx6yLt
-398znM/jra6O1I7mT1GvFpLgXPYHDw==
------END CERTIFICATE-----
-
-Certum Root CA
-==============
------BEGIN CERTIFICATE-----
-MIIDDDCCAfSgAwIBAgIDAQAgMA0GCSqGSIb3DQEBBQUAMD4xCzAJBgNVBAYTAlBMMRswGQYDVQQK
-ExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBDQTAeFw0wMjA2MTExMDQ2Mzla
-Fw0yNzA2MTExMDQ2MzlaMD4xCzAJBgNVBAYTAlBMMRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8u
-by4xEjAQBgNVBAMTCUNlcnR1bSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM6x
-wS7TT3zNJc4YPk/EjG+AanPIW1H4m9LcuwBcsaD8dQPugfCI7iNS6eYVM42sLQnFdvkrOYCJ5JdL
-kKWoePhzQ3ukYbDYWMzhbGZ+nPMJXlVjhNWo7/OxLjBos8Q82KxujZlakE403Daaj4GIULdtlkIJ
-89eVgw1BS7Bqa/j8D35in2fE7SZfECYPCE/wpFcozo+47UX2bu4lXapuOb7kky/ZR6By6/qmW6/K
-Uz/iDsaWVhFu9+lmqSbYf5VT7QqFiLpPKaVCjF62/IUgAKpoC6EahQGcxEZjgoi2IrHu/qpGWX7P
-NSzVttpd90gzFFS269lvzs2I1qsb2pY7HVkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkq
-hkiG9w0BAQUFAAOCAQEAuI3O7+cUus/usESSbLQ5PqKEbq24IXfS1HeCh+YgQYHu4vgRt2PRFze+
-GXYkHAQaTOs9qmdvLdTN/mUxcMUbpgIKumB7bVjCmkn+YzILa+M6wKyrO7Do0wlRjBCDxjTgxSvg
-GrZgFCdsMneMvLJymM/NzD+5yCRCFNZX/OYmQ6kd5YCQzgNUKD73P9P4Te1qCjqTE5s7FCMTY5w/
-0YcneeVMUeMBrYVdGjux1XMQpNPyvG5k9VpWkKjHDkx0Dy5xO/fIR/RpbxXyEV6DHpx8Uq79AtoS
-qFlnGNu8cN2bsWntgM6JQEhqDjXKKWYVIZQs6GAqm4VKQPNriiTsBhYscw==
------END CERTIFICATE-----
-
-Comodo AAA Services root
-========================
------BEGIN CERTIFICATE-----
-MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS
-R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg
-TGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAw
-MFoXDTI4MTIzMTIzNTk1OVowezELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hl
-c3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNV
-BAMMGEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
-ggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQuaBtDFcCLNSS1UY8y2bmhG
-C1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe3M/vg4aijJRPn2jymJBGhCfHdr/jzDUs
-i14HZGWCwEiwqJH5YZ92IFCokcdmtet4YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszW
-Y19zjNoFmag4qMsXeDZRrOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjH
-Ypy+g8cmez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQUoBEK
-Iz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wewYDVR0f
-BHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20vQUFBQ2VydGlmaWNhdGVTZXJ2aWNl
-cy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29tb2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2Vz
-LmNybDANBgkqhkiG9w0BAQUFAAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm
-7l3sAg9g1o1QGE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz
-Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2G9w84FoVxp7Z
-8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsil2D4kF501KKaU73yqWjgom7C
-12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg==
------END CERTIFICATE-----
-
-Comodo Secure Services root
-===========================
------BEGIN CERTIFICATE-----
-MIIEPzCCAyegAwIBAgIBATANBgkqhkiG9w0BAQUFADB+MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS
-R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg
-TGltaXRlZDEkMCIGA1UEAwwbU2VjdXJlIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAw
-MDAwMFoXDTI4MTIzMTIzNTk1OVowfjELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFu
-Y2hlc3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxJDAi
-BgNVBAMMG1NlY3VyZSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP
-ADCCAQoCggEBAMBxM4KK0HDrc4eCQNUd5MvJDkKQ+d40uaG6EfQlhfPMcm3ye5drswfxdySRXyWP
-9nQ95IDC+DwN879A6vfIUtFyb+/Iq0G4bi4XKpVpDM3SHpR7LZQdqnXXs5jLrLxkU0C8j6ysNstc
-rbvd4JQX7NFc0L/vpZXJkMWwrPsbQ996CF23uPJAGysnnlDOXmWCiIxe004MeuoIkbY2qitC++rC
-oznl2yY4rYsK7hljxxwk3wN42ubqwUcaCwtGCd0C/N7Lh1/XMGNooa7cMqG6vv5Eq2i2pRcV/b3V
-p6ea5EQz6YiO/O1R65NxTq0B50SOqy3LqP4BSUjwwN3HaNiS/j0CAwEAAaOBxzCBxDAdBgNVHQ4E
-FgQUPNiTiMLAggnMAZkGkyDpnnAJY08wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8w
-gYEGA1UdHwR6MHgwO6A5oDeGNWh0dHA6Ly9jcmwuY29tb2RvY2EuY29tL1NlY3VyZUNlcnRpZmlj
-YXRlU2VydmljZXMuY3JsMDmgN6A1hjNodHRwOi8vY3JsLmNvbW9kby5uZXQvU2VjdXJlQ2VydGlm
-aWNhdGVTZXJ2aWNlcy5jcmwwDQYJKoZIhvcNAQEFBQADggEBAIcBbSMdflsXfcFhMs+P5/OKlFlm
-4J4oqF7Tt/Q05qo5spcWxYJvMqTpjOev/e/C6LlLqqP05tqNZSH7uoDrJiiFGv45jN5bBAS0VPmj
-Z55B+glSzAVIqMk/IQQezkhr/IXownuvf7fM+F86/TXGDe+X3EyrEeFryzHRbPtIgKvcnDe4IRRL
-DXE97IMzbtFuMhbsmMcWi1mmNKsFVy2T96oTy9IT4rcuO81rUBcJaD61JlfutuC23bkpgHl9j6Pw
-pCikFcSF9CfUa7/lXORlAnZUtOM3ZiTTGWHIUhDlizeauan5Hb/qmZJhlv8BzaFfDbxxvA6sCx1H
-RR3B7Hzs/Sk=
------END CERTIFICATE-----
-
-Comodo Trusted Services root
-============================
------BEGIN CERTIFICATE-----
-MIIEQzCCAyugAwIBAgIBATANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS
-R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg
-TGltaXRlZDElMCMGA1UEAwwcVHJ1c3RlZCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczAeFw0wNDAxMDEw
-MDAwMDBaFw0yODEyMzEyMzU5NTlaMH8xCzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVyIE1h
-bmNoZXN0ZXIxEDAOBgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoMEUNvbW9kbyBDQSBMaW1pdGVkMSUw
-IwYDVQQDDBxUcnVzdGVkIENlcnRpZmljYXRlIFNlcnZpY2VzMIIBIjANBgkqhkiG9w0BAQEFAAOC
-AQ8AMIIBCgKCAQEA33FvNlhTWvI2VFeAxHQIIO0Yfyod5jWaHiWsnOWWfnJSoBVC21ndZHoa0Lh7
-3TkVvFVIxO06AOoxEbrycXQaZ7jPM8yoMa+j49d/vzMtTGo87IvDktJTdyR0nAducPy9C1t2ul/y
-/9c3S0pgePfw+spwtOpZqqPOSC+pw7ILfhdyFgymBwwbOM/JYrc/oJOlh0Hyt3BAd9i+FHzjqMB6
-juljatEPmsbS9Is6FARW1O24zG71++IsWL1/T2sr92AkWCTOJu80kTrV44HQsvAEAtdbtz6SrGsS
-ivnkBbA7kUlcsutT6vifR4buv5XAwAaf0lteERv0xwQ1KdJVXOTt6wIDAQABo4HJMIHGMB0GA1Ud
-DgQWBBTFe1i97doladL3WRaoszLAeydb9DAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB
-/zCBgwYDVR0fBHwwejA8oDqgOIY2aHR0cDovL2NybC5jb21vZG9jYS5jb20vVHJ1c3RlZENlcnRp
-ZmljYXRlU2VydmljZXMuY3JsMDqgOKA2hjRodHRwOi8vY3JsLmNvbW9kby5uZXQvVHJ1c3RlZENl
-cnRpZmljYXRlU2VydmljZXMuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQDIk4E7ibSvuIQSTI3S8Ntw
-uleGFTQQuS9/HrCoiWChisJ3DFBKmwCL2Iv0QeLQg4pKHBQGsKNoBXAxMKdTmw7pSqBYaWcOrp32
-pSxBvzwGa+RZzG0Q8ZZvH9/0BAKkn0U+yNj6NkZEUD+Cl5EfKNsYEYwq5GWDVxISjBc/lDb+XbDA
-BHcTuPQV1T84zJQ6VdCsmPW6AF/ghhmBeC8owH7TzEIK9a5QoNE+xqFx7D+gIIxmOom0jtTYsU0l
-R+4viMi14QVFwL4Ucd56/Y57fU0IlqUSc/AtyjcndBInTMu2l+nZrghtWjlA3QVHdWpaIbOjGM9O
-9y5Xt5hwXsjEeLBi
------END CERTIFICATE-----
-
-QuoVadis Root CA
-================
------BEGIN CERTIFICATE-----
-MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJCTTEZMBcGA1UE
-ChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
-eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAz
-MTkxODMzMzNaFw0yMTAzMTcxODMzMzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRp
-cyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQD
-EyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEF
-AAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTRvM16z/Ypli4kVEAkOPcahdxYTMuk
-J0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2DrOpm2RgbaIr1VxqYuvXtdj182d6UajtL
-F8HVj71lODqV0D1VNk7feVcxKh7YWWVJWCCYfqtffp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeL
-YzcS19Dsw3sgQUSj7cugF+FxZc4dZjH3dgEZyH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWen
-AScOospUxbF6lR1xHkopigPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCCAk4w
-PQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVvdmFkaXNvZmZzaG9y
-ZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREwggENMIIBCQYJKwYBBAG+WAABMIH7
-MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlhbmNlIG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmlj
-YXRlIGJ5IGFueSBwYXJ0eSBhc3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJs
-ZSBzdGFuZGFyZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJh
-Y3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYIKwYBBQUHAgEW
-Fmh0dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3TKbkGGew5Oanwl4Rqy+/fMIGu
-BgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rqy+/foYGEpIGBMH8xCzAJBgNVBAYTAkJNMRkw
-FwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0
-aG9yaXR5MS4wLAYDVQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6
-tlCLMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSkfnIYj9lo
-fFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf87C9TqnN7Az10buYWnuul
-LsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1RcHhXHTMe/QKZnAzNCgVPx7uOpHX6Sm2x
-gI4JVrmcGmD+XcHXetwReNDWXcG31a0ymQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi
-5upZIof4l/UO/erMkqQWxFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi
-5nrQNiOKSnQ2+Q==
------END CERTIFICATE-----
-
-QuoVadis Root CA 2
-==================
------BEGIN CERTIFICATE-----
-MIIFtzCCA5+gAwIBAgICBQkwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoT
-EFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMjAeFw0wNjExMjQx
-ODI3MDBaFw0zMTExMjQxODIzMzNaMEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM
-aW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4IC
-DwAwggIKAoICAQCaGMpLlA0ALa8DKYrwD4HIrkwZhR0In6spRIXzL4GtMh6QRr+jhiYaHv5+HBg6
-XJxgFyo6dIMzMH1hVBHL7avg5tKifvVrbxi3Cgst/ek+7wrGsxDp3MJGF/hd/aTa/55JWpzmM+Yk
-lvc/ulsrHHo1wtZn/qtmUIttKGAr79dgw8eTvI02kfN/+NsRE8Scd3bBrrcCaoF6qUWD4gXmuVbB
-lDePSHFjIuwXZQeVikvfj8ZaCuWw419eaxGrDPmF60Tp+ARz8un+XJiM9XOva7R+zdRcAitMOeGy
-lZUtQofX1bOQQ7dsE/He3fbE+Ik/0XX1ksOR1YqI0JDs3G3eicJlcZaLDQP9nL9bFqyS2+r+eXyt
-66/3FsvbzSUr5R/7mp/iUcw6UwxI5g69ybR2BlLmEROFcmMDBOAENisgGQLodKcftslWZvB1Jdxn
-wQ5hYIizPtGo/KPaHbDRsSNU30R2be1B2MGyIrZTHN81Hdyhdyox5C315eXbyOD/5YDXC2Og/zOh
-D7osFRXql7PSorW+8oyWHhqPHWykYTe5hnMz15eWniN9gqRMgeKh0bpnX5UHoycR7hYQe7xFSkyy
-BNKr79X9DFHOUGoIMfmR2gyPZFwDwzqLID9ujWc9Otb+fVuIyV77zGHcizN300QyNQliBJIWENie
-J0f7OyHj+OsdWwIDAQABo4GwMIGtMA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1Ud
-DgQWBBQahGK8SEwzJQTU7tD2A8QZRtGUazBuBgNVHSMEZzBlgBQahGK8SEwzJQTU7tD2A8QZRtGU
-a6FJpEcwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMT
-ElF1b1ZhZGlzIFJvb3QgQ0EgMoICBQkwDQYJKoZIhvcNAQEFBQADggIBAD4KFk2fBluornFdLwUv
-Z+YTRYPENvbzwCYMDbVHZF34tHLJRqUDGCdViXh9duqWNIAXINzng/iN/Ae42l9NLmeyhP3ZRPx3
-UIHmfLTJDQtyU/h2BwdBR5YM++CCJpNVjP4iH2BlfF/nJrP3MpCYUNQ3cVX2kiF495V5+vgtJodm
-VjB3pjd4M1IQWK4/YY7yarHvGH5KWWPKjaJW1acvvFYfzznB4vsKqBUsfU16Y8Zsl0Q80m/DShcK
-+JDSV6IZUaUtl0HaB0+pUNqQjZRG4T7wlP0QADj1O+hA4bRuVhogzG9Yje0uRY/W6ZM/57Es3zrW
-IozchLsib9D45MY56QSIPMO661V6bYCZJPVsAfv4l7CUW+v90m/xd2gNNWQjrLhVoQPRTUIZ3Ph1
-WVaj+ahJefivDrkRoHy3au000LYmYjgahwz46P0u05B/B5EqHdZ+XIWDmbA4CD/pXvk1B+TJYm5X
-f6dQlfe6yJvmjqIBxdZmv3lh8zwc4bmCXF2gw+nYSL0ZohEUGW6yhhtoPkg3Goi3XZZenMfvJ2II
-4pEZXNLxId26F0KCl3GBUzGpn/Z9Yr9y4aOTHcyKJloJONDO1w2AFrR4pTqHTI2KpdVGl/IsELm8
-VCLAAVBpQ570su9t+Oza8eOx79+Rj1QqCyXBJhnEUhAFZdWCEOrCMc0u
------END CERTIFICATE-----
-
-QuoVadis Root CA 3
-==================
------BEGIN CERTIFICATE-----
-MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoT
-EFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMzAeFw0wNjExMjQx
-OTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM
-aW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4IC
-DwAwggIKAoICAQDMV0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNgg
-DhoB4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUrH556VOij
-KTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd8lyyBTNvijbO0BNO/79K
-DDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9CabwvvWhDFlaJKjdhkf2mrk7AyxRllDdLkgbv
-BNDInIjbC3uBr7E9KsRlOni27tyAsdLTmZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwp
-p5ijJUMv7/FfJuGITfhebtfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8
-nT8KKdjcT5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDtWAEX
-MJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZc6tsgLjoC2SToJyM
-Gf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A4iLItLRkT9a6fUg+qGkM17uGcclz
-uD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYDVR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHT
-BgkrBgEEAb5YAAMwgcUwgZMGCCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmlj
-YXRlIGNvbnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0
-aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVudC4wLQYIKwYB
-BQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2NwczALBgNVHQ8EBAMCAQYwHQYD
-VR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4GA1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4
-ywLQoUmkRzBFMQswCQYDVQQGEwJCTTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UE
-AxMSUXVvVmFkaXMgUm9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZV
-qyM07ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSemd1o417+s
-hvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd+LJ2w/w4E6oM3kJpK27z
-POuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2
-Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadNt54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp
-8kokUvd0/bpO5qgdAm6xDYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBC
-bjPsMZ57k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6szHXu
-g/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0jWy10QJLZYxkNc91p
-vGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeTmJlglFwjz1onl14LBQaTNx47aTbr
-qZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK4SVhM7JZG+Ju1zdXtg2pEto=
------END CERTIFICATE-----
-
-Security Communication Root CA
-==============================
------BEGIN CERTIFICATE-----
-MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP
-U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw
-HhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP
-U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw
-ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8V6UMbXaKL0u/ZPtM7orw
-8yl89f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzGjGdnSj74cbAZJ6kJDKaVv0uM
-DPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9Ms+k2Y7CI9eNqPPYJayX
-5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/NQV3Is00qVUarH9oe4kA92819uZKAnDfd
-DJZkndwi92SL32HeFZRSFaB9UslLqCHJxrHty8OVYNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2
-JChzAgMBAAGjPzA9MB0GA1UdDgQWBBSgc0mZaNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYw
-DwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vGkl3g
-0dNq/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfrUj94nK9NrvjVT8+a
-mCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5Bw+SUEmK3TGXX8npN6o7WWWXlDLJ
-s58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJUJRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ
-6rBK+1YWc26sTfcioU+tHXotRSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAi
-FL39vmwLAw==
------END CERTIFICATE-----
-
-Sonera Class 2 Root CA
-======================
------BEGIN CERTIFICATE-----
-MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEPMA0GA1UEChMG
-U29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAxMDQwNjA3Mjk0MFoXDTIxMDQw
-NjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNVBAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJh
-IENsYXNzMiBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE+hY3
-/Ei9vX+ALTU74W+oZ6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gXGM2RX/uJ4+q/Tl18GybT
-dXnt5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7Jp12W5dCsv+u8E7s3TmVToMG
-f+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCWctRUz2EjvOr7nQKV0ba5cTppCD8P
-tOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu8nYybieDwnPz3BjotJPqdURrBGAgcVeH
-nfO+oJAjPYok4doh28MCAwEAAaMzMDEwDwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITT
-XjwwCwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt
-0jSv9zilzqsWuasvfDXLrNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/3DEI
-cbCdjdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvDFNr450kkkdAdavph
-Oe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6Tk6ezAyNlNzZRZxe7EJQY670XcSx
-EtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLH
-llpwrN9M
------END CERTIFICATE-----
-
-Staat der Nederlanden Root CA
-=============================
------BEGIN CERTIFICATE-----
-MIIDujCCAqKgAwIBAgIEAJiWijANBgkqhkiG9w0BAQUFADBVMQswCQYDVQQGEwJOTDEeMBwGA1UE
-ChMVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSYwJAYDVQQDEx1TdGFhdCBkZXIgTmVkZXJsYW5kZW4g
-Um9vdCBDQTAeFw0wMjEyMTcwOTIzNDlaFw0xNTEyMTYwOTE1MzhaMFUxCzAJBgNVBAYTAk5MMR4w
-HAYDVQQKExVTdGFhdCBkZXIgTmVkZXJsYW5kZW4xJjAkBgNVBAMTHVN0YWF0IGRlciBOZWRlcmxh
-bmRlbiBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmNK1URF6gaYUmHFt
-vsznExvWJw56s2oYHLZhWtVhCb/ekBPHZ+7d89rFDBKeNVU+LCeIQGv33N0iYfXCxw719tV2U02P
-jLwYdjeFnejKScfST5gTCaI+Ioicf9byEGW07l8Y1Rfj+MX94p2i71MOhXeiD+EwR+4A5zN9RGca
-C1Hoi6CeUJhoNFIfLm0B8mBF8jHrqTFoKbt6QZ7GGX+UtFE5A3+y3qcym7RHjm+0Sq7lr7HcsBth
-vJly3uSJt3omXdozSVtSnA71iq3DuD3oBmrC1SoLbHuEvVYFy4ZlkuxEK7COudxwC0barbxjiDn6
-22r+I/q85Ej0ZytqERAhSQIDAQABo4GRMIGOMAwGA1UdEwQFMAMBAf8wTwYDVR0gBEgwRjBEBgRV
-HSAAMDwwOgYIKwYBBQUHAgEWLmh0dHA6Ly93d3cucGtpb3ZlcmhlaWQubmwvcG9saWNpZXMvcm9v
-dC1wb2xpY3kwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSofeu8Y6R0E3QA7Jbg0zTBLL9s+DAN
-BgkqhkiG9w0BAQUFAAOCAQEABYSHVXQ2YcG70dTGFagTtJ+k/rvuFbQvBgwp8qiSpGEN/KtcCFtR
-EytNwiphyPgJWPwtArI5fZlmgb9uXJVFIGzmeafR2Bwp/MIgJ1HI8XxdNGdphREwxgDS1/PTfLbw
-MVcoEoJz6TMvplW0C5GUR5z6u3pCMuiufi3IvKwUv9kP2Vv8wfl6leF9fpb8cbDCTMjfRTTJzg3y
-nGQI0DvDKcWy7ZAEwbEpkcUwb8GpcjPM/l0WFywRaed+/sWDCN+83CI6LiBpIzlWYGeQiy52OfsR
-iJf2fL1LuCAWZwWN4jvBcj+UlTfHXbme2JOhF4//DGYVwSR8MnwDHTuhWEUykw==
------END CERTIFICATE-----
-
-TDC Internet Root CA
-====================
------BEGIN CERTIFICATE-----
-MIIEKzCCAxOgAwIBAgIEOsylTDANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJESzEVMBMGA1UE
-ChMMVERDIEludGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQgUm9vdCBDQTAeFw0wMTA0MDUx
-NjMzMTdaFw0yMTA0MDUxNzAzMTdaMEMxCzAJBgNVBAYTAkRLMRUwEwYDVQQKEwxUREMgSW50ZXJu
-ZXQxHTAbBgNVBAsTFFREQyBJbnRlcm5ldCBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
-MIIBCgKCAQEAxLhAvJHVYx/XmaCLDEAedLdInUaMArLgJF/wGROnN4NrXceO+YQwzho7+vvOi20j
-xsNuZp+Jpd/gQlBn+h9sHvTQBda/ytZO5GhgbEaqHF1j4QeGDmUApy6mcca8uYGoOn0a0vnRrEvL
-znWv3Hv6gXPU/Lq9QYjUdLP5Xjg6PEOo0pVOd20TDJ2PeAG3WiAfAzc14izbSysseLlJ28TQx5yc
-5IogCSEWVmb/Bexb4/DPqyQkXsN/cHoSxNK1EKC2IeGNeGlVRGn1ypYcNIUXJXfi9i8nmHj9eQY6
-otZaQ8H/7AQ77hPv01ha/5Lr7K7a8jcDR0G2l8ktCkEiu7vmpwIDAQABo4IBJTCCASEwEQYJYIZI
-AYb4QgEBBAQDAgAHMGUGA1UdHwReMFwwWqBYoFakVDBSMQswCQYDVQQGEwJESzEVMBMGA1UEChMM
-VERDIEludGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQgUm9vdCBDQTENMAsGA1UEAxMEQ1JM
-MTArBgNVHRAEJDAigA8yMDAxMDQwNTE2MzMxN1qBDzIwMjEwNDA1MTcwMzE3WjALBgNVHQ8EBAMC
-AQYwHwYDVR0jBBgwFoAUbGQBx/2FbazI2p5QCIUItTxWqFAwHQYDVR0OBBYEFGxkAcf9hW2syNqe
-UAiFCLU8VqhQMAwGA1UdEwQFMAMBAf8wHQYJKoZIhvZ9B0EABBAwDhsIVjUuMDo0LjADAgSQMA0G
-CSqGSIb3DQEBBQUAA4IBAQBOQ8zR3R0QGwZ/t6T609lN+yOfI1Rb5osvBCiLtSdtiaHsmGnc540m
-gwV5dOy0uaOXwTUA/RXaOYE6lTGQ3pfphqiZdwzlWqCE/xIWrG64jcN7ksKsLtB9KOy282A4aW8+
-2ARVPp7MVdK6/rtHBNcK2RYKNCn1WBPVT8+PVkuzHu7TmHnaCB4Mb7j4Fifvwm899qNLPg7kbWzb
-O0ESm70NRyN/PErQr8Cv9u8btRXE64PECV90i9kR+8JWsTz4cMo0jUNAE4z9mQNUecYu6oah9jrU
-Cbz0vGbMPVjQV0kK7iXiQe4T+Zs4NNEA9X7nlB38aQNiuJkFBT1reBK9sG9l
------END CERTIFICATE-----
-
-UTN DATACorp SGC Root CA
-========================
------BEGIN CERTIFICATE-----
-MIIEXjCCA0agAwIBAgIQRL4Mi1AAIbQR0ypoBqmtaTANBgkqhkiG9w0BAQUFADCBkzELMAkGA1UE
-BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl
-IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xGzAZ
-BgNVBAMTElVUTiAtIERBVEFDb3JwIFNHQzAeFw05OTA2MjQxODU3MjFaFw0xOTA2MjQxOTA2MzBa
-MIGTMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4w
-HAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRy
-dXN0LmNvbTEbMBkGA1UEAxMSVVROIC0gREFUQUNvcnAgU0dDMIIBIjANBgkqhkiG9w0BAQEFAAOC
-AQ8AMIIBCgKCAQEA3+5YEKIrblXEjr8uRgnn4AgPLit6E5Qbvfa2gI5lBZMAHryv4g+OGQ0SR+ys
-raP6LnD43m77VkIVni5c7yPeIbkFdicZD0/Ww5y0vpQZY/KmEQrrU0icvvIpOxboGqBMpsn0GFlo
-wHDyUwDAXlCCpVZvNvlK4ESGoE1O1kduSUrLZ9emxAW5jh70/P/N5zbgnAVssjMiFdC04MwXwLLA
-9P4yPykqlXvY8qdOD1R8oQ2AswkDwf9c3V6aPryuvEeKaq5xyh+xKrhfQgUL7EYw0XILyulWbfXv
-33i+Ybqypa4ETLyorGkVl73v67SMvzX41MPRKA5cOp9wGDMgd8SirwIDAQABo4GrMIGoMAsGA1Ud
-DwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRTMtGzz3/64PGgXYVOktKeRR20TzA9
-BgNVHR8ENjA0MDKgMKAuhixodHRwOi8vY3JsLnVzZXJ0cnVzdC5jb20vVVROLURBVEFDb3JwU0dD
-LmNybDAqBgNVHSUEIzAhBggrBgEFBQcDAQYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBMA0GCSqGSIb3
-DQEBBQUAA4IBAQAnNZcAiosovcYzMB4p/OL31ZjUQLtgyr+rFywJNn9Q+kHcrpY6CiM+iVnJowft
-Gzet/Hy+UUla3joKVAgWRcKZsYfNjGjgaQPpxE6YsjuMFrMOoAyYUJuTqXAJyCyjj98C5OBxOvG0
-I3KgqgHf35g+FFCgMSa9KOlaMCZ1+XtgHI3zzVAmbQQnmt/VDUVHKWss5nbZqSl9Mt3JNjy9rjXx
-EZ4du5A/EkdOjtd+D2JzHVImOBwYSf0wdJrE5SIv2MCN7ZF6TACPcn9d2t0bi0Vr591pl6jFVkwP
-DPafepE39peC4N1xaf92P2BNPM/3mfnGV/TJVTl4uix5yaaIK/QI
------END CERTIFICATE-----
-
-UTN USERFirst Hardware Root CA
-==============================
------BEGIN CERTIFICATE-----
-MIIEdDCCA1ygAwIBAgIQRL4Mi1AAJLQR0zYq/mUK/TANBgkqhkiG9w0BAQUFADCBlzELMAkGA1UE
-BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl
-IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAd
-BgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdhcmUwHhcNOTkwNzA5MTgxMDQyWhcNMTkwNzA5MTgx
-OTIyWjCBlzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0
-eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVz
-ZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdhcmUwggEiMA0GCSqGSIb3
-DQEBAQUAA4IBDwAwggEKAoIBAQCx98M4P7Sof885glFn0G2f0v9Y8+efK+wNiVSZuTiZFvfgIXlI
-wrthdBKWHTxqctU8EGc6Oe0rE81m65UJM6Rsl7HoxuzBdXmcRl6Nq9Bq/bkqVRcQVLMZ8Jr28bFd
-tqdt++BxF2uiiPsA3/4aMXcMmgF6sTLjKwEHOG7DpV4jvEWbe1DByTCP2+UretNb+zNAHqDVmBe8
-i4fDidNdoI6yqqr2jmmIBsX6iSHzCJ1pLgkzmykNRg+MzEk0sGlRvfkGzWitZky8PqxhvQqIDsjf
-Pe58BEydCl5rkdbux+0ojatNh4lz0G6k0B4WixThdkQDf2Os5M1JnMWS9KsyoUhbAgMBAAGjgbkw
-gbYwCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFKFyXyYbKJhDlV0HN9WF
-lp1L0sNFMEQGA1UdHwQ9MDswOaA3oDWGM2h0dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9VVE4tVVNF
-UkZpcnN0LUhhcmR3YXJlLmNybDAxBgNVHSUEKjAoBggrBgEFBQcDAQYIKwYBBQUHAwUGCCsGAQUF
-BwMGBggrBgEFBQcDBzANBgkqhkiG9w0BAQUFAAOCAQEARxkP3nTGmZev/K0oXnWO6y1n7k57K9cM
-//bey1WiCuFMVGWTYGufEpytXoMs61quwOQt9ABjHbjAbPLPSbtNk28GpgoiskliCE7/yMgUsogW
-XecB5BKV5UU0s4tpvc+0hY91UZ59Ojg6FEgSxvunOxqNDYJAB+gECJChicsZUN/KHAG8HQQZexB2
-lzvukJDKxA4fFm517zP4029bHpbj4HR3dHuKom4t3XbWOTCC8KucUvIqx69JXn7HaOWCgchqJ/kn
-iCrVWFCVH/A7HFe7fRQ5YiuayZSSKqMiDP+JJn1fIytH1xUdqWqeUQ0qUZ6B+dQ7XnASfxAynB67
-nfhmqA==
------END CERTIFICATE-----
-
-Camerfirma Chambers of Commerce Root
-====================================
------BEGIN CERTIFICATE-----
-MIIEvTCCA6WgAwIBAgIBADANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJFVTEnMCUGA1UEChMe
-QUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1i
-ZXJzaWduLm9yZzEiMCAGA1UEAxMZQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdDAeFw0wMzA5MzAx
-NjEzNDNaFw0zNzA5MzAxNjEzNDRaMH8xCzAJBgNVBAYTAkVVMScwJQYDVQQKEx5BQyBDYW1lcmZp
-cm1hIFNBIENJRiBBODI3NDMyODcxIzAhBgNVBAsTGmh0dHA6Ly93d3cuY2hhbWJlcnNpZ24ub3Jn
-MSIwIAYDVQQDExlDaGFtYmVycyBvZiBDb21tZXJjZSBSb290MIIBIDANBgkqhkiG9w0BAQEFAAOC
-AQ0AMIIBCAKCAQEAtzZV5aVdGDDg2olUkfzIx1L4L1DZ77F1c2VHfRtbunXF/KGIJPov7coISjlU
-xFF6tdpg6jg8gbLL8bvZkSM/SAFwdakFKq0fcfPJVD0dBmpAPrMMhe5cG3nCYsS4No41XQEMIwRH
-NaqbYE6gZj3LJgqcQKH0XZi/caulAGgq7YN6D6IUtdQis4CwPAxaUWktWBiP7Zme8a7ileb2R6jW
-DA+wWFjbw2Y3npuRVDM30pQcakjJyfKl2qUMI/cjDpwyVV5xnIQFUZot/eZOKjRa3spAN2cMVCFV
-d9oKDMyXroDclDZK9D7ONhMeU+SsTjoF7Nuucpw4i9A5O4kKPnf+dQIBA6OCAUQwggFAMBIGA1Ud
-EwEB/wQIMAYBAf8CAQwwPAYDVR0fBDUwMzAxoC+gLYYraHR0cDovL2NybC5jaGFtYmVyc2lnbi5v
-cmcvY2hhbWJlcnNyb290LmNybDAdBgNVHQ4EFgQU45T1sU3p26EpW1eLTXYGduHRooowDgYDVR0P
-AQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzAnBgNVHREEIDAegRxjaGFtYmVyc3Jvb3RAY2hh
-bWJlcnNpZ24ub3JnMCcGA1UdEgQgMB6BHGNoYW1iZXJzcm9vdEBjaGFtYmVyc2lnbi5vcmcwWAYD
-VR0gBFEwTzBNBgsrBgEEAYGHLgoDATA+MDwGCCsGAQUFBwIBFjBodHRwOi8vY3BzLmNoYW1iZXJz
-aWduLm9yZy9jcHMvY2hhbWJlcnNyb290Lmh0bWwwDQYJKoZIhvcNAQEFBQADggEBAAxBl8IahsAi
-fJ/7kPMa0QOx7xP5IV8EnNrJpY0nbJaHkb5BkAFyk+cefV/2icZdp0AJPaxJRUXcLo0waLIJuvvD
-L8y6C98/d3tGfToSJI6WjzwFCm/SlCgdbQzALogi1djPHRPH8EjX1wWnz8dHnjs8NMiAT9QUu/wN
-UPf6s+xCX6ndbcj0dc97wXImsQEcXCz9ek60AcUFV7nnPKoF2YjpB0ZBzu9Bga5Y34OirsrXdx/n
-ADydb47kMgkdTXg0eDQ8lJsm7U9xxhl6vSAiSFr+S30Dt+dYvsYyTnQeaN2oaFuzPu5ifdmA6Ap1
-erfutGWaIZDgqtCYvDi1czyL+Nw=
------END CERTIFICATE-----
-
-Camerfirma Global Chambersign Root
-==================================
------BEGIN CERTIFICATE-----
-MIIExTCCA62gAwIBAgIBADANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJFVTEnMCUGA1UEChMe
-QUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1i
-ZXJzaWduLm9yZzEgMB4GA1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwHhcNMDMwOTMwMTYx
-NDE4WhcNMzcwOTMwMTYxNDE4WjB9MQswCQYDVQQGEwJFVTEnMCUGA1UEChMeQUMgQ2FtZXJmaXJt
-YSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEg
-MB4GA1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwggEgMA0GCSqGSIb3DQEBAQUAA4IBDQAw
-ggEIAoIBAQCicKLQn0KuWxfH2H3PFIP8T8mhtxOviteePgQKkotgVvq0Mi+ITaFgCPS3CU6gSS9J
-1tPfnZdan5QEcOw/Wdm3zGaLmFIoCQLfxS+EjXqXd7/sQJ0lcqu1PzKY+7e3/HKE5TWH+VX6ox8O
-by4o3Wmg2UIQxvi1RMLQQ3/bvOSiPGpVeAp3qdjqGTK3L/5cPxvusZjsyq16aUXjlg9V9ubtdepl
-6DJWk0aJqCWKZQbua795B9Dxt6/tLE2Su8CoX6dnfQTyFQhwrJLWfQTSM/tMtgsL+xrJxI0DqX5c
-8lCrEqWhz0hQpe/SyBoT+rB/sYIcd2oPX9wLlY/vQ37mRQklAgEDo4IBUDCCAUwwEgYDVR0TAQH/
-BAgwBgEB/wIBDDA/BgNVHR8EODA2MDSgMqAwhi5odHRwOi8vY3JsLmNoYW1iZXJzaWduLm9yZy9j
-aGFtYmVyc2lnbnJvb3QuY3JsMB0GA1UdDgQWBBRDnDafsJ4wTcbOX60Qq+UDpfqpFDAOBgNVHQ8B
-Af8EBAMCAQYwEQYJYIZIAYb4QgEBBAQDAgAHMCoGA1UdEQQjMCGBH2NoYW1iZXJzaWducm9vdEBj
-aGFtYmVyc2lnbi5vcmcwKgYDVR0SBCMwIYEfY2hhbWJlcnNpZ25yb290QGNoYW1iZXJzaWduLm9y
-ZzBbBgNVHSAEVDBSMFAGCysGAQQBgYcuCgEBMEEwPwYIKwYBBQUHAgEWM2h0dHA6Ly9jcHMuY2hh
-bWJlcnNpZ24ub3JnL2Nwcy9jaGFtYmVyc2lnbnJvb3QuaHRtbDANBgkqhkiG9w0BAQUFAAOCAQEA
-PDtwkfkEVCeR4e3t/mh/YV3lQWVPMvEYBZRqHN4fcNs+ezICNLUMbKGKfKX0j//U2K0X1S0E0T9Y
-gOKBWYi+wONGkyT+kL0mojAt6JcmVzWJdJYY9hXiryQZVgICsroPFOrGimbBhkVVi76SvpykBMdJ
-PJ7oKXqJ1/6v/2j1pReQvayZzKWGVwlnRtvWFsJG8eSpUPWP0ZIV018+xgBJOm5YstHRJw0lyDL4
-IBHNfTIzSJRUTN3cecQwn+uOuFW114hcxWokPbLTBQNRxgfvzBRydD1ucs4YKIxKoHflCStFREes
-t2d/AYoFWpO+ocH/+OcOZ6RHSXZddZAa9SaP8A==
------END CERTIFICATE-----
-
-NetLock Notary (Class A) Root
-=============================
------BEGIN CERTIFICATE-----
-MIIGfTCCBWWgAwIBAgICAQMwDQYJKoZIhvcNAQEEBQAwga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQI
-EwdIdW5nYXJ5MREwDwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6
-dG9uc2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9j
-ayBLb3pqZWd5em9pIChDbGFzcyBBKSBUYW51c2l0dmFueWtpYWRvMB4XDTk5MDIyNDIzMTQ0N1oX
-DTE5MDIxOTIzMTQ0N1owga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQIEwdIdW5nYXJ5MREwDwYDVQQH
-EwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6dG9uc2FnaSBLZnQuMRowGAYD
-VQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9jayBLb3pqZWd5em9pIChDbGFz
-cyBBKSBUYW51c2l0dmFueWtpYWRvMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvHSM
-D7tM9DceqQWC2ObhbHDqeLVu0ThEDaiDzl3S1tWBxdRL51uUcCbbO51qTGL3cfNk1mE7PetzozfZ
-z+qMkjvN9wfcZnSX9EUi3fRc4L9t875lM+QVOr/bmJBVOMTtplVjC7B4BPTjbsE/jvxReB+SnoPC
-/tmwqcm8WgD/qaiYdPv2LD4VOQ22BFWoDpggQrOxJa1+mm9dU7GrDPzr4PN6s6iz/0b2Y6LYOph7
-tqyF/7AlT3Rj5xMHpQqPBffAZG9+pyeAlt7ULoZgx2srXnN7F+eRP2QM2EsiNCubMvJIH5+hCoR6
-4sKtlz2O1cH5VqNQ6ca0+pii7pXmKgOM3wIDAQABo4ICnzCCApswDgYDVR0PAQH/BAQDAgAGMBIG
-A1UdEwEB/wQIMAYBAf8CAQQwEQYJYIZIAYb4QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaC
-Ak1GSUdZRUxFTSEgRXplbiB0YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFub3MgU3pv
-bGdhbHRhdGFzaSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBhbGFwamFuIGtlc3p1bHQu
-IEEgaGl0ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExvY2sgS2Z0LiB0ZXJtZWtmZWxlbG9zc2Vn
-LWJpenRvc2l0YXNhIHZlZGkuIEEgZGlnaXRhbGlzIGFsYWlyYXMgZWxmb2dhZGFzYW5hayBmZWx0
-ZXRlbGUgYXogZWxvaXJ0IGVsbGVub3J6ZXNpIGVsamFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFz
-IGxlaXJhc2EgbWVndGFsYWxoYXRvIGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGphbiBh
-IGh0dHBzOi8vd3d3Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJoZXRvIGF6IGVsbGVu
-b3J6ZXNAbmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBPUlRBTlQhIFRoZSBpc3N1YW5jZSBh
-bmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGlzIHN1YmplY3QgdG8gdGhlIE5ldExvY2sg
-Q1BTIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFp
-bCBhdCBjcHNAbmV0bG9jay5uZXQuMA0GCSqGSIb3DQEBBAUAA4IBAQBIJEb3ulZv+sgoA0BO5TE5
-ayZrU3/b39/zcT0mwBQOxmd7I6gMc90Bu8bKbjc5VdXHjFYgDigKDtIqpLBJUsY4B/6+CgmM0ZjP
-ytoUMaFP0jn8DxEsQ8Pdq5PHVT5HfBgaANzze9jyf1JsIPQLX2lS9O74silg6+NJMSEN1rUQQeJB
-CWziGppWS3cC9qCbmieH6FUpccKQn0V4GuEVZD3QDtigdp+uxdAu6tYPVuxkf1qbFFgBJ34TUMdr
-KuZoPL9coAob4Q566eKAw+np9v1sEZ7Q5SgnK1QyQhSCdeZK8CtmdWOMovsEPoMOmzbwGOQmIMOM
-8CgHrTwXZoi1/baI
------END CERTIFICATE-----
-
-NetLock Business (Class B) Root
-===============================
------BEGIN CERTIFICATE-----
-MIIFSzCCBLSgAwIBAgIBaTANBgkqhkiG9w0BAQQFADCBmTELMAkGA1UEBhMCSFUxETAPBgNVBAcT
-CEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0b25zYWdpIEtmdC4xGjAYBgNV
-BAsTEVRhbnVzaXR2YW55a2lhZG9rMTIwMAYDVQQDEylOZXRMb2NrIFV6bGV0aSAoQ2xhc3MgQikg
-VGFudXNpdHZhbnlraWFkbzAeFw05OTAyMjUxNDEwMjJaFw0xOTAyMjAxNDEwMjJaMIGZMQswCQYD
-VQQGEwJIVTERMA8GA1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFsb3phdGJpenRv
-bnNhZ2kgS2Z0LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxMjAwBgNVBAMTKU5ldExvY2sg
-VXpsZXRpIChDbGFzcyBCKSBUYW51c2l0dmFueWtpYWRvMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCB
-iQKBgQCx6gTsIKAjwo84YM/HRrPVG/77uZmeBNwcf4xKgZjupNTKihe5In+DCnVMm8Bp2GQ5o+2S
-o/1bXHQawEfKOml2mrriRBf8TKPV/riXiK+IA4kfpPIEPsgHC+b5sy96YhQJRhTKZPWLgLViqNhr
-1nGTLbO/CVRY7QbrqHvcQ7GhaQIDAQABo4ICnzCCApswEgYDVR0TAQH/BAgwBgEB/wIBBDAOBgNV
-HQ8BAf8EBAMCAAYwEQYJYIZIAYb4QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaCAk1GSUdZ
-RUxFTSEgRXplbiB0YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFub3MgU3pvbGdhbHRh
-dGFzaSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBhbGFwamFuIGtlc3p1bHQuIEEgaGl0
-ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExvY2sgS2Z0LiB0ZXJtZWtmZWxlbG9zc2VnLWJpenRv
-c2l0YXNhIHZlZGkuIEEgZGlnaXRhbGlzIGFsYWlyYXMgZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUg
-YXogZWxvaXJ0IGVsbGVub3J6ZXNpIGVsamFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFzIGxlaXJh
-c2EgbWVndGFsYWxoYXRvIGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGphbiBhIGh0dHBz
-Oi8vd3d3Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJoZXRvIGF6IGVsbGVub3J6ZXNA
-bmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBPUlRBTlQhIFRoZSBpc3N1YW5jZSBhbmQgdGhl
-IHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGlzIHN1YmplY3QgdG8gdGhlIE5ldExvY2sgQ1BTIGF2
-YWlsYWJsZSBhdCBodHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFpbCBhdCBj
-cHNAbmV0bG9jay5uZXQuMA0GCSqGSIb3DQEBBAUAA4GBAATbrowXr/gOkDFOzT4JwG06sPgzTEdM
-43WIEJessDgVkcYplswhwG08pXTP2IKlOcNl40JwuyKQ433bNXbhoLXan3BukxowOR0w2y7jfLKR
-stE3Kfq51hdcR0/jHTjrn9V7lagonhVK0dHQKwCXoOKSNitjrFgBazMpUIaD8QFI
------END CERTIFICATE-----
-
-NetLock Express (Class C) Root
-==============================
------BEGIN CERTIFICATE-----
-MIIFTzCCBLigAwIBAgIBaDANBgkqhkiG9w0BAQQFADCBmzELMAkGA1UEBhMCSFUxETAPBgNVBAcT
-CEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0b25zYWdpIEtmdC4xGjAYBgNV
-BAsTEVRhbnVzaXR2YW55a2lhZG9rMTQwMgYDVQQDEytOZXRMb2NrIEV4cHJlc3N6IChDbGFzcyBD
-KSBUYW51c2l0dmFueWtpYWRvMB4XDTk5MDIyNTE0MDgxMVoXDTE5MDIyMDE0MDgxMVowgZsxCzAJ
-BgNVBAYTAkhVMREwDwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6
-dG9uc2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE0MDIGA1UEAxMrTmV0TG9j
-ayBFeHByZXNzeiAoQ2xhc3MgQykgVGFudXNpdHZhbnlraWFkbzCBnzANBgkqhkiG9w0BAQEFAAOB
-jQAwgYkCgYEA6+ywbGGKIyWvYCDj2Z/8kwvbXY2wobNAOoLO/XXgeDIDhlqGlZHtU/qdQPzm6N3Z
-W3oDvV3zOwzDUXmbrVWg6dADEK8KuhRC2VImESLH0iDMgqSaqf64gXadarfSNnU+sYYJ9m5tfk63
-euyucYT2BDMIJTLrdKwWRMbkQJMdf60CAwEAAaOCAp8wggKbMBIGA1UdEwEB/wQIMAYBAf8CAQQw
-DgYDVR0PAQH/BAQDAgAGMBEGCWCGSAGG+EIBAQQEAwIABzCCAmAGCWCGSAGG+EIBDQSCAlEWggJN
-RklHWUVMRU0hIEV6ZW4gdGFudXNpdHZhbnkgYSBOZXRMb2NrIEtmdC4gQWx0YWxhbm9zIFN6b2xn
-YWx0YXRhc2kgRmVsdGV0ZWxlaWJlbiBsZWlydCBlbGphcmFzb2sgYWxhcGphbiBrZXN6dWx0LiBB
-IGhpdGVsZXNpdGVzIGZvbHlhbWF0YXQgYSBOZXRMb2NrIEtmdC4gdGVybWVrZmVsZWxvc3NlZy1i
-aXp0b3NpdGFzYSB2ZWRpLiBBIGRpZ2l0YWxpcyBhbGFpcmFzIGVsZm9nYWRhc2FuYWsgZmVsdGV0
-ZWxlIGF6IGVsb2lydCBlbGxlbm9yemVzaSBlbGphcmFzIG1lZ3RldGVsZS4gQXogZWxqYXJhcyBs
-ZWlyYXNhIG1lZ3RhbGFsaGF0byBhIE5ldExvY2sgS2Z0LiBJbnRlcm5ldCBob25sYXBqYW4gYSBo
-dHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIGNpbWVuIHZhZ3kga2VyaGV0byBheiBlbGxlbm9y
-emVzQG5ldGxvY2submV0IGUtbWFpbCBjaW1lbi4gSU1QT1JUQU5UISBUaGUgaXNzdWFuY2UgYW5k
-IHRoZSB1c2Ugb2YgdGhpcyBjZXJ0aWZpY2F0ZSBpcyBzdWJqZWN0IHRvIHRoZSBOZXRMb2NrIENQ
-UyBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cubmV0bG9jay5uZXQvZG9jcyBvciBieSBlLW1haWwg
-YXQgY3BzQG5ldGxvY2submV0LjANBgkqhkiG9w0BAQQFAAOBgQAQrX/XDDKACtiG8XmYta3UzbM2
-xJZIwVzNmtkFLp++UOv0JhQQLdRmF/iewSf98e3ke0ugbLWrmldwpu2gpO0u9f38vf5NNwgMvOOW
-gyL1SRt/Syu0VMGAfJlOHdCM7tCs5ZL6dVb+ZKATj7i4Fp1hBWeAyNDYpQcCNJgEjTME1A==
------END CERTIFICATE-----
-
-XRamp Global CA Root
-====================
------BEGIN CERTIFICATE-----
-MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UE
-BhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2Vj
-dXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB
-dXRob3JpdHkwHhcNMDQxMTAxMTcxNDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMx
-HjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkg
-U2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
-dHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS638eMpSe2OAtp87ZOqCwu
-IR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCPKZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMx
-foArtYzAQDsRhtDLooY2YKTVMIJt2W7QDxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FE
-zG+gSqmUsE3a56k0enI4qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqs
-AxcZZPRaJSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNViPvry
-xS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud
-EwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASsjVy16bYbMDYGA1UdHwQvMC0wK6Ap
-oCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMC
-AQEwDQYJKoZIhvcNAQEFBQADggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc
-/Kh4ZzXxHfARvbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt
-qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLaIR9NmXmd4c8n
-nxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSyi6mx5O+aGtA9aZnuqCij4Tyz
-8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQO+7ETPTsJ3xCwnR8gooJybQDJbw=
------END CERTIFICATE-----
-
-Go Daddy Class 2 CA
-===================
------BEGIN CERTIFICATE-----
-MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMY
-VGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRp
-ZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkG
-A1UEBhMCVVMxITAfBgNVBAoTGFRoZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28g
-RGFkZHkgQ2xhc3MgMiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQAD
-ggENADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCAPVYYYwhv
-2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6wwdhFJ2+qN1j3hybX2C32
-qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXiEqITLdiOr18SPaAIBQi2XKVlOARFmR6j
-YGB0xUGlcmIbYsUfb18aQr4CUWWoriMYavx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmY
-vLEHZ6IVDd2gWMZEewo+YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0O
-BBYEFNLEsNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h/t2o
-atTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMu
-MTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwG
-A1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wim
-PQoZ+YeAEW5p5JYXMP80kWNyOO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKt
-I3lpjbi2Tc7PTMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ
-HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mERdEr/VxqHD3VI
-Ls9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5CufReYNnyicsbkqWletNw+vHX/b
-vZ8=
------END CERTIFICATE-----
-
-Starfield Class 2 CA
-====================
------BEGIN CERTIFICATE-----
-MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzElMCMGA1UEChMc
-U3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZpZWxkIENsYXNzIDIg
-Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQwNjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBo
-MQswCQYDVQQGEwJVUzElMCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAG
-A1UECxMpU3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqG
-SIb3DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf8MOh2tTY
-bitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN+lq2cwQlZut3f+dZxkqZ
-JRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVm
-epsZGD3/cVE8MC5fvj13c7JdBmzDI1aaK4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSN
-F4Azbl5KXZnJHoe0nRrA1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HF
-MIHCMB0GA1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fRzt0f
-hvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNo
-bm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBDbGFzcyAyIENlcnRpZmljYXRpb24g
-QXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGs
-afPzWdqbAYcaT1epoXkJKtv3L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLM
-PUxA2IGvd56Deruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl
-xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynpVSJYACPq4xJD
-KVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEYWQPJIrSPnNVeKtelttQKbfi3
-QBFGmh95DmK/D5fs4C8fF5Q=
------END CERTIFICATE-----
-
-StartCom Certification Authority
-================================
------BEGIN CERTIFICATE-----
-MIIHyTCCBbGgAwIBAgIBATANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMN
-U3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmlu
-ZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0
-NjM2WhcNMzYwOTE3MTk0NjM2WjB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRk
-LjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMg
-U3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw
-ggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZkpMyONvg45iPwbm2xPN1y
-o4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rfOQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/
-Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/CJi/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/d
-eMotHweXMAEtcnn6RtYTKqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt
-2PZE4XNiHzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMMAv+Z
-6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w+2OqqGwaVLRcJXrJ
-osmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/
-untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVc
-UjyJthkqcwEKDwOzEmDyei+B26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT
-37uMdBNSSwIDAQABo4ICUjCCAk4wDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAa4wHQYDVR0OBBYE
-FE4L7xqkQFulF2mHMMo0aEPQQa7yMGQGA1UdHwRdMFswLKAqoCiGJmh0dHA6Ly9jZXJ0LnN0YXJ0
-Y29tLm9yZy9zZnNjYS1jcmwuY3JsMCugKaAnhiVodHRwOi8vY3JsLnN0YXJ0Y29tLm9yZy9zZnNj
-YS1jcmwuY3JsMIIBXQYDVR0gBIIBVDCCAVAwggFMBgsrBgEEAYG1NwEBATCCATswLwYIKwYBBQUH
-AgEWI2h0dHA6Ly9jZXJ0LnN0YXJ0Y29tLm9yZy9wb2xpY3kucGRmMDUGCCsGAQUFBwIBFilodHRw
-Oi8vY2VydC5zdGFydGNvbS5vcmcvaW50ZXJtZWRpYXRlLnBkZjCB0AYIKwYBBQUHAgIwgcMwJxYg
-U3RhcnQgQ29tbWVyY2lhbCAoU3RhcnRDb20pIEx0ZC4wAwIBARqBl0xpbWl0ZWQgTGlhYmlsaXR5
-LCByZWFkIHRoZSBzZWN0aW9uICpMZWdhbCBMaW1pdGF0aW9ucyogb2YgdGhlIFN0YXJ0Q29tIENl
-cnRpZmljYXRpb24gQXV0aG9yaXR5IFBvbGljeSBhdmFpbGFibGUgYXQgaHR0cDovL2NlcnQuc3Rh
-cnRjb20ub3JnL3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilT
-dGFydENvbSBGcmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQUFAAOC
-AgEAFmyZ9GYMNPXQhV59CuzaEE44HF7fpiUFS5Eyweg78T3dRAlbB0mKKctmArexmvclmAk8jhvh
-3TaHK0u7aNM5Zj2gJsfyOZEdUauCe37Vzlrk4gNXcGmXCPleWKYK34wGmkUWFjgKXlf2Ysd6AgXm
-vB618p70qSmD+LIU424oh0TDkBreOKk8rENNZEXO3SipXPJzewT4F+irsfMuXGRuczE6Eri8sxHk
-fY+BUZo7jYn0TZNmezwD7dOaHZrzZVD1oNB1ny+v8OqCQ5j4aZyJecRDjkZy42Q2Eq/3JR44iZB3
-fsNrarnDy0RLrHiQi+fHLB5LEUTINFInzQpdn4XBidUaePKVEFMy3YCEZnXZtWgo+2EuvoSoOMCZ
-EoalHmdkrQYuL6lwhceWD3yJZfWOQ1QOq92lgDmUYMA0yZZwLKMS9R9Ie70cfmu3nZD0Ijuu+Pwq
-yvqCUqDvr0tVk+vBtfAii6w0TiYiBKGHLHVKt+V9E9e4DGTANtLJL4YSjCMJwRuCO3NJo2pXh5Tl
-1njFmUNj403gdy3hZZlyaQQaRwnmDwFWJPsfvw55qVguucQJAX6Vum0ABj6y6koQOdjQK/W/7HW/
-lwLFCRsI3FU34oH7N4RDYiDK51ZLZer+bMEkkyShNOsF/5oirpt9P/FlUQqmMGqz9IgcgA38coro
-g14=
------END CERTIFICATE-----
-
-Taiwan GRCA
-===========
------BEGIN CERTIFICATE-----
-MIIFcjCCA1qgAwIBAgIQH51ZWtcvwgZEpYAIaeNe9jANBgkqhkiG9w0BAQUFADA/MQswCQYDVQQG
-EwJUVzEwMC4GA1UECgwnR292ZXJubWVudCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4X
-DTAyMTIwNTEzMjMzM1oXDTMyMTIwNTEzMjMzM1owPzELMAkGA1UEBhMCVFcxMDAuBgNVBAoMJ0dv
-dmVybm1lbnQgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQAD
-ggIPADCCAgoCggIBAJoluOzMonWoe/fOW1mKydGGEghU7Jzy50b2iPN86aXfTEc2pBsBHH8eV4qN
-w8XRIePaJD9IK/ufLqGU5ywck9G/GwGHU5nOp/UKIXZ3/6m3xnOUT0b3EEk3+qhZSV1qgQdW8or5
-BtD3cCJNtLdBuTK4sfCxw5w/cP1T3YGq2GN49thTbqGsaoQkclSGxtKyyhwOeYHWtXBiCAEuTk8O
-1RGvqa/lmr/czIdtJuTJV6L7lvnM4T9TjGxMfptTCAtsF/tnyMKtsc2AtJfcdgEWFelq16TheEfO
-htX7MfP6Mb40qij7cEwdScevLJ1tZqa2jWR+tSBqnTuBto9AAGdLiYa4zGX+FVPpBMHWXx1E1wov
-J5pGfaENda1UhhXcSTvxls4Pm6Dso3pdvtUqdULle96ltqqvKKyskKw4t9VoNSZ63Pc78/1Fm9G7
-Q3hub/FCVGqY8A2tl+lSXunVanLeavcbYBT0peS2cWeqH+riTcFCQP5nRhc4L0c/cZyu5SHKYS1t
-B6iEfC3uUSXxY5Ce/eFXiGvviiNtsea9P63RPZYLhY3Naye7twWb7LuRqQoHEgKXTiCQ8P8NHuJB
-O9NAOueNXdpm5AKwB1KYXA6OM5zCppX7VRluTI6uSw+9wThNXo+EHWbNxWCWtFJaBYmOlXqYwZE8
-lSOyDvR5tMl8wUohAgMBAAGjajBoMB0GA1UdDgQWBBTMzO/MKWCkO7GStjz6MmKPrCUVOzAMBgNV
-HRMEBTADAQH/MDkGBGcqBwAEMTAvMC0CAQAwCQYFKw4DAhoFADAHBgVnKgMAAAQUA5vwIhP/lSg2
-09yewDL7MTqKUWUwDQYJKoZIhvcNAQEFBQADggIBAECASvomyc5eMN1PhnR2WPWus4MzeKR6dBcZ
-TulStbngCnRiqmjKeKBMmo4sIy7VahIkv9Ro04rQ2JyftB8M3jh+Vzj8jeJPXgyfqzvS/3WXy6Tj
-Zwj/5cAWtUgBfen5Cv8b5Wppv3ghqMKnI6mGq3ZW6A4M9hPdKmaKZEk9GhiHkASfQlK3T8v+R0F2
-Ne//AHY2RTKbxkaFXeIksB7jSJaYV0eUVXoPQbFEJPPB/hprv4j9wabak2BegUqZIJxIZhm1AHlU
-D7gsL0u8qV1bYH+Mh6XgUmMqvtg7hUAV/h62ZT/FS9p+tXo1KaMuephgIqP0fSdOLeq0dDzpD6Qz
-DxARvBMB1uUO07+1EqLhRSPAzAhuYbeJq4PjJB7mXQfnHyA+z2fI56wwbSdLaG5LKlwCCDTb+Hbk
-Z6MmnD+iMsJKxYEYMRBWqoTvLQr/uB930r+lWKBi5NdLkXWNiYCYfm3LU05er/ayl4WXudpVBrkk
-7tfGOB5jGxI7leFYrPLfhNVfmS8NVVvmONsuP3LpSIXLuykTjx44VbnzssQwmSNOXfJIoRIM3BKQ
-CZBUkQM8R+XVyWXgt0t97EfTsws+rZ7QdAAO671RrcDeLMDDav7v3Aun+kbfYNucpllQdSNpc5Oy
-+fwC00fmcc4QAu4njIT/rEUNE1yDMuAlpYYsfPQS
------END CERTIFICATE-----
-
-Swisscom Root CA 1
-==================
------BEGIN CERTIFICATE-----
-MIIF2TCCA8GgAwIBAgIQXAuFXAvnWUHfV8w/f52oNjANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQG
-EwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsTHERpZ2l0YWwgQ2VydGlmaWNhdGUgU2Vy
-dmljZXMxGzAZBgNVBAMTElN3aXNzY29tIFJvb3QgQ0EgMTAeFw0wNTA4MTgxMjA2MjBaFw0yNTA4
-MTgyMjA2MjBaMGQxCzAJBgNVBAYTAmNoMREwDwYDVQQKEwhTd2lzc2NvbTElMCMGA1UECxMcRGln
-aXRhbCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczEbMBkGA1UEAxMSU3dpc3Njb20gUm9vdCBDQSAxMIIC
-IjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0LmwqAzZuz8h+BvVM5OAFmUgdbI9m2BtRsiM
-MW8Xw/qabFbtPMWRV8PNq5ZJkCoZSx6jbVfd8StiKHVFXqrWW/oLJdihFvkcxC7mlSpnzNApbjyF
-NDhhSbEAn9Y6cV9Nbc5fuankiX9qUvrKm/LcqfmdmUc/TilftKaNXXsLmREDA/7n29uj/x2lzZAe
-AR81sH8A25Bvxn570e56eqeqDFdvpG3FEzuwpdntMhy0XmeLVNxzh+XTF3xmUHJd1BpYwdnP2IkC
-b6dJtDZd0KTeByy2dbcokdaXvij1mB7qWybJvbCXc9qukSbraMH5ORXWZ0sKbU/Lz7DkQnGMU3nn
-7uHbHaBuHYwadzVcFh4rUx80i9Fs/PJnB3r1re3WmquhsUvhzDdf/X/NTa64H5xD+SpYVUNFvJbN
-cA78yeNmuk6NO4HLFWR7uZToXTNShXEuT46iBhFRyePLoW4xCGQMwtI89Tbo19AOeCMgkckkKmUp
-WyL3Ic6DXqTz3kvTaI9GdVyDCW4pa8RwjPWd1yAv/0bSKzjCL3UcPX7ape8eYIVpQtPM+GP+HkM5
-haa2Y0EQs3MevNP6yn0WR+Kn1dCjigoIlmJWbjTb2QK5MHXjBNLnj8KwEUAKrNVxAmKLMb7dxiNY
-MUJDLXT5xp6mig/p/r+D5kNXJLrvRjSq1xIBOO0CAwEAAaOBhjCBgzAOBgNVHQ8BAf8EBAMCAYYw
-HQYDVR0hBBYwFDASBgdghXQBUwABBgdghXQBUwABMBIGA1UdEwEB/wQIMAYBAf8CAQcwHwYDVR0j
-BBgwFoAUAyUv3m+CATpcLNwroWm1Z9SM0/0wHQYDVR0OBBYEFAMlL95vggE6XCzcK6FptWfUjNP9
-MA0GCSqGSIb3DQEBBQUAA4ICAQA1EMvspgQNDQ/NwNurqPKIlwzfky9NfEBWMXrrpA9gzXrzvsMn
-jgM+pN0S734edAY8PzHyHHuRMSG08NBsl9Tpl7IkVh5WwzW9iAUPWxAaZOHHgjD5Mq2eUCzneAXQ
-MbFamIp1TpBcahQq4FJHgmDmHtqBsfsUC1rxn9KVuj7QG9YVHaO+htXbD8BJZLsuUBlL0iT43R4H
-VtA4oJVwIHaM190e3p9xxCPvgxNcoyQVTSlAPGrEqdi3pkSlDfTgnXceQHAm/NrZNuR55LU/vJtl
-vrsRls/bxig5OgjOR1tTWsWZ/l2p3e9M1MalrQLmjAcSHm8D0W+go/MpvRLHUKKwf4ipmXeascCl
-OS5cfGniLLDqN2qk4Vrh9VDlg++luyqI54zb/W1elxmofmZ1a3Hqv7HHb6D0jqTsNFFbjCYDcKF3
-1QESVwA12yPeDooomf2xEG9L/zgtYE4snOtnta1J7ksfrK/7DZBaZmBwXarNeNQk7shBoJMBkpxq
-nvy5JMWzFYJ+vq6VK+uxwNrjAWALXmmshFZhvnEX/h0TD/7Gh0Xp/jKgGg0TpJRVcaUWi7rKibCy
-x/yP2FS1k2Kdzs9Z+z0YzirLNRWCXf9UIltxUvu3yf5gmwBBZPCqKuy2QkPOiWaByIufOVQDJdMW
-NY6E0F/6MBr1mmz0DlP5OlvRHA==
------END CERTIFICATE-----
-
-DigiCert Assured ID Root CA
-===========================
------BEGIN CERTIFICATE-----
-MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQG
-EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQw
-IgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzEx
-MTEwMDAwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQL
-ExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0Ew
-ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7cJpSIqvTO
-9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYPmDI2dsze3Tyoou9q+yHy
-UmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW
-/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpy
-oeb6pNnVFzF1roV9Iq4/AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whf
-GHdPAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRF
-66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYunpyGd823IDzANBgkq
-hkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRCdWKuh+vy1dneVrOfzM4UKLkNl2Bc
-EkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTffwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38Fn
-SbNd67IJKusm7Xi+fT8r87cmNW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i
-8b5QZ7dsvfPxH2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe
-+o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g==
------END CERTIFICATE-----
-
-DigiCert Global Root CA
-=======================
------BEGIN CERTIFICATE-----
-MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBhMQswCQYDVQQG
-EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAw
-HgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBDQTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAw
-MDAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3
-dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkq
-hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsBCSDMAZOn
-TjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97nh6Vfe63SKMI2tavegw5
-BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt43C/dxC//AH2hdmoRBBYMql1GNXRor5H
-4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7PT19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y
-7vrTC0LUq7dBMtoM1O/4gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQAB
-o2MwYTAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbRTLtm
-8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUwDQYJKoZIhvcNAQEF
-BQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/EsrhMAtudXH/vTBH1jLuG2cenTnmCmr
-EbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIt
-tep3Sp+dWOIrWcBAI+0tKIJFPnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886
-UAb3LujEV0lsYSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk
-CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=
------END CERTIFICATE-----
-
-DigiCert High Assurance EV Root CA
-==================================
------BEGIN CERTIFICATE-----
-MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBsMQswCQYDVQQG
-EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSsw
-KQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5jZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAw
-MFoXDTMxMTExMDAwMDAwMFowbDELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZ
-MBcGA1UECxMQd3d3LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFu
-Y2UgRVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm+9S75S0t
-Mqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTWPNt0OKRKzE0lgvdKpVMS
-OO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEMxChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3
-MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFBIk5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQ
-NAQTXKFx01p8VdteZOE3hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUe
-h10aUAsgEsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMB
-Af8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaAFLE+w2kD+L9HAdSY
-JhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3NecnzyIZgYIVyHbIUf4KmeqvxgydkAQ
-V8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6zeM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFp
-myPInngiK3BD41VHMWEZ71jFhS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkK
-mNEVX58Svnw2Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe
-vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep+OkuE6N36B9K
------END CERTIFICATE-----
-
-Certplus Class 2 Primary CA
-===========================
------BEGIN CERTIFICATE-----
-MIIDkjCCAnqgAwIBAgIRAIW9S/PY2uNp9pTXX8OlRCMwDQYJKoZIhvcNAQEFBQAwPTELMAkGA1UE
-BhMCRlIxETAPBgNVBAoTCENlcnRwbHVzMRswGQYDVQQDExJDbGFzcyAyIFByaW1hcnkgQ0EwHhcN
-OTkwNzA3MTcwNTAwWhcNMTkwNzA2MjM1OTU5WjA9MQswCQYDVQQGEwJGUjERMA8GA1UEChMIQ2Vy
-dHBsdXMxGzAZBgNVBAMTEkNsYXNzIDIgUHJpbWFyeSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEP
-ADCCAQoCggEBANxQltAS+DXSCHh6tlJw/W/uz7kRy1134ezpfgSN1sxvc0NXYKwzCkTsA18cgCSR
-5aiRVhKC9+Ar9NuuYS6JEI1rbLqzAr3VNsVINyPi8Fo3UjMXEuLRYE2+L0ER4/YXJQyLkcAbmXuZ
-Vg2v7tK8R1fjeUl7NIknJITesezpWE7+Tt9avkGtrAjFGA7v0lPubNCdEgETjdyAYveVqUSISnFO
-YFWe2yMZeVYHDD9jC1yw4r5+FfyUM1hBOHTE4Y+L3yasH7WLO7dDWWuwJKZtkIvEcupdM5i3y95e
-e++U8Rs+yskhwcWYAqqi9lt3m/V+llU0HGdpwPFC40es/CgcZlUCAwEAAaOBjDCBiTAPBgNVHRME
-CDAGAQH/AgEKMAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQU43Mt38sOKAze3bOkynm4jrvoMIkwEQYJ
-YIZIAYb4QgEBBAQDAgEGMDcGA1UdHwQwMC4wLKAqoCiGJmh0dHA6Ly93d3cuY2VydHBsdXMuY29t
-L0NSTC9jbGFzczIuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQCnVM+IRBnL39R/AN9WM2K191EBkOvD
-P9GIROkkXe/nFL0gt5o8AP5tn9uQ3Nf0YtaLcF3n5QRIqWh8yfFC82x/xXp8HVGIutIKPidd3i1R
-TtMTZGnkLuPT55sJmabglZvOGtd/vjzOUrMRFcEPF80Du5wlFbqidon8BvEY0JNLDnyCt6X09l/+
-7UCmnYR0ObncHoUW2ikbhiMAybuJfm6AiB4vFLQDJKgybwOaRywwvlbGp0ICcBvqQNi6BQNwB6SW
-//1IMwrh3KWBkJtN3X3n57LNXMhqlfil9o3EXXgIvnsG1knPGTZQIy4I5p4FTUcY1Rbpsda2ENW7
-l7+ijrRU
------END CERTIFICATE-----
-
-DST Root CA X3
-==============
------BEGIN CERTIFICATE-----
-MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/MSQwIgYDVQQK
-ExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMTDkRTVCBSb290IENBIFgzMB4X
-DTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVowPzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1
-cmUgVHJ1c3QgQ28uMRcwFQYDVQQDEw5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQAD
-ggEPADCCAQoCggEBAN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmT
-rE4Orz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEqOLl5CjH9
-UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9bxiqKqy69cK3FCxolkHRy
-xXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40d
-utolucbY38EVAjqr2m7xPi71XAicPNaDaeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0T
-AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQ
-MA0GCSqGSIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69ikug
-dB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXrAvHRAosZy5Q6XkjE
-GB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZzR8srzJmwN0jP41ZL9c8PDHIyh8bw
-RLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubS
-fZGL+T0yjWW06XyxV3bqxbYoOb8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ
------END CERTIFICATE-----
-
-DST ACES CA X6
-==============
------BEGIN CERTIFICATE-----
-MIIECTCCAvGgAwIBAgIQDV6ZCtadt3js2AdWO4YV2TANBgkqhkiG9w0BAQUFADBbMQswCQYDVQQG
-EwJVUzEgMB4GA1UEChMXRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QxETAPBgNVBAsTCERTVCBBQ0VT
-MRcwFQYDVQQDEw5EU1QgQUNFUyBDQSBYNjAeFw0wMzExMjAyMTE5NThaFw0xNzExMjAyMTE5NTha
-MFsxCzAJBgNVBAYTAlVTMSAwHgYDVQQKExdEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdDERMA8GA1UE
-CxMIRFNUIEFDRVMxFzAVBgNVBAMTDkRTVCBBQ0VTIENBIFg2MIIBIjANBgkqhkiG9w0BAQEFAAOC
-AQ8AMIIBCgKCAQEAuT31LMmU3HWKlV1j6IR3dma5WZFcRt2SPp/5DgO0PWGSvSMmtWPuktKe1jzI
-DZBfZIGxqAgNTNj50wUoUrQBJcWVHAx+PhCEdc/BGZFjz+iokYi5Q1K7gLFViYsx+tC3dr5BPTCa
-pCIlF3PoHuLTrCq9Wzgh1SpL11V94zpVvddtawJXa+ZHfAjIgrrep4c9oW24MFbCswKBXy314pow
-GCi4ZtPLAZZv6opFVdbgnf9nKxcCpk4aahELfrd755jWjHZvwTvbUJN+5dCOHze4vbrGn2zpfDPy
-MjwmR/onJALJfh1biEITajV8fTXpLmaRcpPVMibEdPVTo7NdmvYJywIDAQABo4HIMIHFMA8GA1Ud
-EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgHGMB8GA1UdEQQYMBaBFHBraS1vcHNAdHJ1c3Rkc3Qu
-Y29tMGIGA1UdIARbMFkwVwYKYIZIAWUDAgEBATBJMEcGCCsGAQUFBwIBFjtodHRwOi8vd3d3LnRy
-dXN0ZHN0LmNvbS9jZXJ0aWZpY2F0ZXMvcG9saWN5L0FDRVMtaW5kZXguaHRtbDAdBgNVHQ4EFgQU
-CXIGThhDD+XWzMNqizF7eI+og7gwDQYJKoZIhvcNAQEFBQADggEBAKPYjtay284F5zLNAdMEA+V2
-5FYrnJmQ6AgwbN99Pe7lv7UkQIRJ4dEorsTCOlMwiPH1d25Ryvr/ma8kXxug/fKshMrfqfBfBC6t
-Fr8hlxCBPeP/h40y3JTlR4peahPJlJU90u7INJXQgNStMgiAVDzgvVJT11J8smk/f3rPanTK+gQq
-nExaBqXpIK1FZg9p8d2/6eMyi/rgwYZNcjwu2JN4Cir42NInPRmJX1p7ijvMDNpRrscL9yuwNwXs
-vFcj4jjSm2jzVhKIT0J8uDHEtdvkyCE06UgRNe76x5JXxZ805Mf29w4LTJxoeHtxMcfrHuBnQfO3
-oKfN5XozNmr6mis=
------END CERTIFICATE-----
-
-TURKTRUST Certificate Services Provider Root 1
-==============================================
------BEGIN CERTIFICATE-----
-MIID+zCCAuOgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBtzE/MD0GA1UEAww2VMOcUktUUlVTVCBF
-bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGDAJUUjEP
-MA0GA1UEBwwGQU5LQVJBMVYwVAYDVQQKDE0oYykgMjAwNSBUw5xSS1RSVVNUIEJpbGdpIMSwbGV0
-acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLjAeFw0wNTA1MTMx
-MDI3MTdaFw0xNTAzMjIxMDI3MTdaMIG3MT8wPQYDVQQDDDZUw5xSS1RSVVNUIEVsZWt0cm9uaWsg
-U2VydGlmaWthIEhpem1ldCBTYcSfbGF5xLFjxLFzxLExCzAJBgNVBAYMAlRSMQ8wDQYDVQQHDAZB
-TktBUkExVjBUBgNVBAoMTShjKSAyMDA1IFTDnFJLVFJVU1QgQmlsZ2kgxLBsZXRpxZ9pbSB2ZSBC
-aWxpxZ9pbSBHw7x2ZW5sacSfaSBIaXptZXRsZXJpIEEuxZ4uMIIBIjANBgkqhkiG9w0BAQEFAAOC
-AQ8AMIIBCgKCAQEAylIF1mMD2Bxf3dJ7XfIMYGFbazt0K3gNfUW9InTojAPBxhEqPZW8qZSwu5GX
-yGl8hMW0kWxsE2qkVa2kheiVfrMArwDCBRj1cJ02i67L5BuBf5OI+2pVu32Fks66WJ/bMsW9Xe8i
-Si9BB35JYbOG7E6mQW6EvAPs9TscyB/C7qju6hJKjRTP8wrgUDn5CDX4EVmt5yLqS8oUBt5CurKZ
-8y1UiBAG6uEaPj1nH/vO+3yC6BFdSsG5FOpU2WabfIl9BJpiyelSPJ6c79L1JuTm5Rh8i27fbMx4
-W09ysstcP4wFjdFMjK2Sx+F4f2VsSQZQLJ4ywtdKxnWKWU51b0dewQIDAQABoxAwDjAMBgNVHRME
-BTADAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQAV9VX/N5aAWSGk/KEVTCD21F/aAyT8z5Aa9CEKmu46
-sWrv7/hg0Uw2ZkUd82YCdAR7kjCo3gp2D++Vbr3JN+YaDayJSFvMgzbC9UZcWYJWtNX+I7TYVBxE
-q8Sn5RTOPEFhfEPmzcSBCYsk+1Ql1haolgxnB2+zUEfjHCQo3SqYpGH+2+oSN7wBGjSFvW5P55Fy
-B0SFHljKVETd96y5y4khctuPwGkplyqjrhgjlxxBKot8KsF8kOipKMDTkcatKIdAaLX/7KfS0zgY
-nNN9aV3wxqUeJBujR/xpB2jn5Jq07Q+hh4cCzofSSE7hvP/L8XKSRGQDJereW26fyfJOrN3H
------END CERTIFICATE-----
-
-TURKTRUST Certificate Services Provider Root 2
-==============================================
------BEGIN CERTIFICATE-----
-MIIEPDCCAySgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBvjE/MD0GA1UEAww2VMOcUktUUlVTVCBF
-bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEP
-MA0GA1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUg
-QmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgS2FzxLFtIDIwMDUwHhcN
-MDUxMTA3MTAwNzU3WhcNMTUwOTE2MTAwNzU3WjCBvjE/MD0GA1UEAww2VMOcUktUUlVTVCBFbGVr
-dHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEPMA0G
-A1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmls
-acWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgS2FzxLFtIDIwMDUwggEiMA0G
-CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCpNn7DkUNMwxmYCMjHWHtPFoylzkkBH3MOrHUTpvqe
-LCDe2JAOCtFp0if7qnefJ1Il4std2NiDUBd9irWCPwSOtNXwSadktx4uXyCcUHVPr+G1QRT0mJKI
-x+XlZEdhR3n9wFHxwZnn3M5q+6+1ATDcRhzviuyV79z/rxAc653YsKpqhRgNF8k+v/Gb0AmJQv2g
-QrSdiVFVKc8bcLyEVK3BEx+Y9C52YItdP5qtygy/p1Zbj3e41Z55SZI/4PGXJHpsmxcPbe9TmJEr
-5A++WXkHeLuXlfSfadRYhwqp48y2WBmfJiGxxFmNskF1wK1pzpwACPI2/z7woQ8arBT9pmAPAgMB
-AAGjQzBBMB0GA1UdDgQWBBTZN7NOBf3Zz58SFq62iS/rJTqIHDAPBgNVHQ8BAf8EBQMDBwYAMA8G
-A1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAHJglrfJ3NgpXiOFX7KzLXb7iNcX/ntt
-Rbj2hWyfIvwqECLsqrkw9qtY1jkQMZkpAL2JZkH7dN6RwRgLn7Vhy506vvWolKMiVW4XSf/SKfE4
-Jl3vpao6+XF75tpYHdN0wgH6PmlYX63LaL4ULptswLbcoCb6dxriJNoaN+BnrdFzgw2lGh1uEpJ+
-hGIAF728JRhX8tepb1mIvDS3LoV4nZbcFMMsilKbloxSZj2GFotHuFEJjOp9zYhys2AzsfAKRO8P
-9Qk3iCQOLGsgOqL6EfJANZxEaGM7rDNvY7wsu/LSy3Z9fYjYHcgFHW68lKlmjHdxx/qR+i9Rnuk5
-UrbnBEI=
------END CERTIFICATE-----
-
-SwissSign Gold CA - G2
-======================
------BEGIN CERTIFICATE-----
-MIIFujCCA6KgAwIBAgIJALtAHEP1Xk+wMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNVBAYTAkNIMRUw
-EwYDVQQKEwxTd2lzc1NpZ24gQUcxHzAdBgNVBAMTFlN3aXNzU2lnbiBHb2xkIENBIC0gRzIwHhcN
-MDYxMDI1MDgzMDM1WhcNMzYxMDI1MDgzMDM1WjBFMQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dp
-c3NTaWduIEFHMR8wHQYDVQQDExZTd2lzc1NpZ24gR29sZCBDQSAtIEcyMIICIjANBgkqhkiG9w0B
-AQEFAAOCAg8AMIICCgKCAgEAr+TufoskDhJuqVAtFkQ7kpJcyrhdhJJCEyq8ZVeCQD5XJM1QiyUq
-t2/876LQwB8CJEoTlo8jE+YoWACjR8cGp4QjK7u9lit/VcyLwVcfDmJlD909Vopz2q5+bbqBHH5C
-jCA12UNNhPqE21Is8w4ndwtrvxEvcnifLtg+5hg3Wipy+dpikJKVyh+c6bM8K8vzARO/Ws/BtQpg
-vd21mWRTuKCWs2/iJneRjOBiEAKfNA+k1ZIzUd6+jbqEemA8atufK+ze3gE/bk3lUIbLtK/tREDF
-ylqM2tIrfKjuvqblCqoOpd8FUrdVxyJdMmqXl2MT28nbeTZ7hTpKxVKJ+STnnXepgv9VHKVxaSvR
-AiTysybUa9oEVeXBCsdtMDeQKuSeFDNeFhdVxVu1yzSJkvGdJo+hB9TGsnhQ2wwMC3wLjEHXuend
-jIj3o02yMszYF9rNt85mndT9Xv+9lz4pded+p2JYryU0pUHHPbwNUMoDAw8IWh+Vc3hiv69yFGkO
-peUDDniOJihC8AcLYiAQZzlG+qkDzAQ4embvIIO1jEpWjpEA/I5cgt6IoMPiaG59je883WX0XaxR
-7ySArqpWl2/5rX3aYT+YdzylkbYcjCbaZaIJbcHiVOO5ykxMgI93e2CaHt+28kgeDrpOVG2Y4OGi
-GqJ3UM/EY5LsRxmd6+ZrzsECAwEAAaOBrDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUw
-AwEB/zAdBgNVHQ4EFgQUWyV7lqRlUX64OfPAeGZe6Drn8O4wHwYDVR0jBBgwFoAUWyV7lqRlUX64
-OfPAeGZe6Drn8O4wRgYDVR0gBD8wPTA7BglghXQBWQECAQEwLjAsBggrBgEFBQcCARYgaHR0cDov
-L3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBACe645R88a7A3hfm
-5djV9VSwg/S7zV4Fe0+fdWavPOhWfvxyeDgD2StiGwC5+OlgzczOUYrHUDFu4Up+GC9pWbY9ZIEr
-44OE5iKHjn3g7gKZYbge9LgriBIWhMIxkziWMaa5O1M/wySTVltpkuzFwbs4AOPsF6m43Md8AYOf
-Mke6UiI0HTJ6CVanfCU2qT1L2sCCbwq7EsiHSycR+R4tx5M/nttfJmtS2S6K8RTGRI0Vqbe/vd6m
-Gu6uLftIdxf+u+yvGPUqUfA5hJeVbG4bwyvEdGB5JbAKJ9/fXtI5z0V9QkvfsywexcZdylU6oJxp
-mo/a77KwPJ+HbBIrZXAVUjEaJM9vMSNQH4xPjyPDdEFjHFWoFN0+4FFQz/EbMFYOkrCChdiDyyJk
-vC24JdVUorgG6q2SpCSgwYa1ShNqR88uC1aVVMvOmttqtKay20EIhid392qgQmwLOM7XdVAyksLf
-KzAiSNDVQTglXaTpXZ/GlHXQRf0wl0OPkKsKx4ZzYEppLd6leNcG2mqeSz53OiATIgHQv2ieY2Br
-NU0LbbqhPcCT4H8js1WtciVORvnSFu+wZMEBnunKoGqYDs/YYPIvSbjkQuE4NRb0yG5P94FW6Lqj
-viOvrv1vA+ACOzB2+httQc8Bsem4yWb02ybzOqR08kkkW8mw0FfB+j564ZfJ
------END CERTIFICATE-----
-
-SwissSign Silver CA - G2
-========================
------BEGIN CERTIFICATE-----
-MIIFvTCCA6WgAwIBAgIITxvUL1S7L0swDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCQ0gxFTAT
-BgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMB4X
-DTA2MTAyNTA4MzI0NloXDTM2MTAyNTA4MzI0NlowRzELMAkGA1UEBhMCQ0gxFTATBgNVBAoTDFN3
-aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMIICIjANBgkqhkiG
-9w0BAQEFAAOCAg8AMIICCgKCAgEAxPGHf9N4Mfc4yfjDmUO8x/e8N+dOcbpLj6VzHVxumK4DV644
-N0MvFz0fyM5oEMF4rhkDKxD6LHmD9ui5aLlV8gREpzn5/ASLHvGiTSf5YXu6t+WiE7brYT7QbNHm
-+/pe7R20nqA1W6GSy/BJkv6FCgU+5tkL4k+73JU3/JHpMjUi0R86TieFnbAVlDLaYQ1HTWBCrpJH
-6INaUFjpiou5XaHc3ZlKHzZnu0jkg7Y360g6rw9njxcH6ATK72oxh9TAtvmUcXtnZLi2kUpCe2Uu
-MGoM9ZDulebyzYLs2aFK7PayS+VFheZteJMELpyCbTapxDFkH4aDCyr0NQp4yVXPQbBH6TCfmb5h
-qAaEuSh6XzjZG6k4sIN/c8HDO0gqgg8hm7jMqDXDhBuDsz6+pJVpATqJAHgE2cn0mRmrVn5bi4Y5
-FZGkECwJMoBgs5PAKrYYC51+jUnyEEp/+dVGLxmSo5mnJqy7jDzmDrxHB9xzUfFwZC8I+bRHHTBs
-ROopN4WSaGa8gzj+ezku01DwH/teYLappvonQfGbGHLy9YR0SslnxFSuSGTfjNFusB3hB48IHpmc
-celM2KX3RxIfdNFRnobzwqIjQAtz20um53MGjMGg6cFZrEb65i/4z3GcRm25xBWNOHkDRUjvxF3X
-CO6HOSKGsg0PWEP3calILv3q1h8CAwEAAaOBrDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/
-BAUwAwEB/zAdBgNVHQ4EFgQUF6DNweRBtjpbO8tFnb0cwpj6hlgwHwYDVR0jBBgwFoAUF6DNweRB
-tjpbO8tFnb0cwpj6hlgwRgYDVR0gBD8wPTA7BglghXQBWQEDAQEwLjAsBggrBgEFBQcCARYgaHR0
-cDovL3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBAHPGgeAn0i0P
-4JUw4ppBf1AsX19iYamGamkYDHRJ1l2E6kFSGG9YrVBWIGrGvShpWJHckRE1qTodvBqlYJ7YH39F
-kWnZfrt4csEGDyrOj4VwYaygzQu4OSlWhDJOhrs9xCrZ1x9y7v5RoSJBsXECYxqCsGKrXlcSH9/L
-3XWgwF15kIwb4FDm3jH+mHtwX6WQ2K34ArZv02DdQEsixT2tOnqfGhpHkXkzuoLcMmkDlm4fS/Bx
-/uNncqCxv1yL5PqZIseEuRuNI5c/7SXgz2W79WEE790eslpBIlqhn10s6FvJbakMDHiqYMZWjwFa
-DGi8aRl5xB9+lwW/xekkUV7U1UtT7dkjWjYDZaPBA61BMPNGG4WQr2W11bHkFlt4dR2Xem1ZqSqP
-e97Dh4kQmUlzeMg9vVE1dCrV8X5pGyq7O70luJpaPXJhkGaH7gzWTdQRdAtq/gsD/KNVV4n+Ssuu
-WxcFyPKNIzFTONItaj+CuY0IavdeQXRuwxF+B6wpYJE/OMpXEA29MC/HpeZBoNquBYeaoKRlbEwJ
-DIm6uNO5wJOKMPqN5ZprFQFOZ6raYlY+hAhm0sQ2fac+EPyI4NSA5QC9qvNOBqN6avlicuMJT+ub
-DgEj8Z+7fNzcbBGXJbLytGMU0gYqZ4yD9c7qB9iaah7s5Aq7KkzrCWA5zspi2C5u
------END CERTIFICATE-----
-
-GeoTrust Primary Certification Authority
-========================================
------BEGIN CERTIFICATE-----
-MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQG
-EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMoR2VvVHJ1c3QgUHJpbWFyeSBD
-ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjExMjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgx
-CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQ
-cmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
-CgKCAQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9AWbK7hWN
-b6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjAZIVcFU2Ix7e64HXprQU9
-nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE07e9GceBrAqg1cmuXm2bgyxx5X9gaBGge
-RwLmnWDiNpcB3841kt++Z8dtd1k7j53WkBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGt
-tm/81w7a4DSwDRp35+MImO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTAD
-AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJKoZI
-hvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ16CePbJC/kRYkRj5K
-Ts4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl4b7UVXGYNTq+k+qurUKykG/g/CFN
-NWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6KoKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHa
-Floxt/m0cYASSJlyc1pZU8FjUjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG
-1riR/aYNKxoUAT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk=
------END CERTIFICATE-----
-
-thawte Primary Root CA
-======================
------BEGIN CERTIFICATE-----
-MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCBqTELMAkGA1UE
-BhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2
-aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhv
-cml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3
-MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwg
-SW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMv
-KGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMT
-FnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCs
-oPD7gFnUnMekz52hWXMJEEUMDSxuaPFsW0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ
-1CRfBsDMRJSUjQJib+ta3RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGc
-q/gcfomk6KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6Sk/K
-aAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94JNqR32HuHUETVPm4p
-afs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYD
-VR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XPr87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUF
-AAOCAQEAeRHAS7ORtvzw6WfUDW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeE
-uzLlQRHAd9mzYJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAX
-xPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2/qxAeeWsEG89
-jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/LHbTY5xZ3Y+m4Q6gLkH3LpVH
-z7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7jVaMaA==
------END CERTIFICATE-----
-
-VeriSign Class 3 Public Primary Certification Authority - G5
-============================================================
------BEGIN CERTIFICATE-----
-MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCByjELMAkGA1UE
-BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBO
-ZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVk
-IHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRp
-ZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCB
-yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2ln
-biBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBh
-dXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmlt
-YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
-ggEKAoIBAQCvJAgIKXo1nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKz
-j/i5Vbext0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIzSdhD
-Y2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQGBO+QueQA5N06tRn/
-Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+rCpSx4/VBEnkjWNHiDxpg8v+R70r
-fk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/
-BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2Uv
-Z2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy
-aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKvMzEzMA0GCSqG
-SIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzEp6B4Eq1iDkVwZMXnl2YtmAl+
-X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKE
-KQsTb47bDN0lAtukixlE0kF6BWlKWE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiC
-Km0oHw0LxOXnGiYZ4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vE
-ZV8NhnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq
------END CERTIFICATE-----
-
-SecureTrust CA
-==============
------BEGIN CERTIFICATE-----
-MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBIMQswCQYDVQQG
-EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xFzAVBgNVBAMTDlNlY3VyZVRy
-dXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIzMTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAe
-BgNVBAoTF1NlY3VyZVRydXN0IENvcnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCC
-ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQX
-OZEzZum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO0gMdA+9t
-DWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIaowW8xQmxSPmjL8xk037uH
-GFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b
-01k/unK8RCSc43Oz969XL0Imnal0ugBS8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmH
-ursCAwEAAaOBnTCBmjATBgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/
-BAUwAwEB/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCegJYYj
-aHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ
-KoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt36Z3q059c4EVlew3KW+JwULKUBRSu
-SceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHf
-mbx8IVQr5Fiiu1cprp6poxkmD5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZ
-nMUFdAvnZyPSCPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR
-3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE=
------END CERTIFICATE-----
-
-Secure Global CA
-================
------BEGIN CERTIFICATE-----
-MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQG
-EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBH
-bG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkxMjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEg
-MB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwg
-Q0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jx
-YDiJiQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa/FHtaMbQ
-bqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJjnIFHovdRIWCQtBJwB1g
-8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnIHmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYV
-HDGA76oYa8J719rO+TMg1fW9ajMtgQT7sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi
-0XPnj3pDAgMBAAGjgZ0wgZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud
-EwEB/wQFMAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCswKaAn
-oCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsGAQQBgjcVAQQDAgEA
-MA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0LURYD7xh8yOOvaliTFGCRsoTciE6+
-OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXOH0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cn
-CDpOGR86p1hcF895P4vkp9MmI50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/5
-3CYNv6ZHdAbYiNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc
-f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW
------END CERTIFICATE-----
-
-COMODO Certification Authority
-==============================
------BEGIN CERTIFICATE-----
-MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCBgTELMAkGA1UE
-BhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgG
-A1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNVBAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1
-dGhvcml0eTAeFw0wNjEyMDEwMDAwMDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEb
-MBkGA1UECBMSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFD
-T01PRE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0aG9yaXR5
-MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3UcEbVASY06m/weaKXTuH
-+7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI2GqGd0S7WWaXUF601CxwRM/aN5VCaTww
-xHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV
-4EajcNxo2f8ESIl33rXp+2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA
-1KGzqSX+DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5OnKVI
-rLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW/zAOBgNVHQ8BAf8E
-BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6gPKA6hjhodHRwOi8vY3JsLmNvbW9k
-b2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9uQXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOC
-AQEAPpiem/Yb6dc5t3iuHXIYSdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CP
-OGEIqB6BCsAvIC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/
-RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4zJVSk/BwJVmc
-IGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5ddBA6+C4OmF4O5MBKgxTMVBbkN
-+8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IBZQ==
------END CERTIFICATE-----
-
-Network Solutions Certificate Authority
-=======================================
------BEGIN CERTIFICATE-----
-MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBiMQswCQYDVQQG
-EwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydOZXR3b3Jr
-IFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMx
-MjM1OTU5WjBiMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu
-MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0G
-CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwzc7MEL7xx
-jOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPPOCwGJgl6cvf6UDL4wpPT
-aaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rlmGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXT
-crA/vGp97Eh/jcOrqnErU2lBUzS1sLnFBgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc
-/Qzpf14Dl847ABSHJ3A4qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMB
-AAGjgZcwgZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIBBjAP
-BgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwubmV0c29sc3NsLmNv
-bS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3JpdHkuY3JsMA0GCSqGSIb3DQEBBQUA
-A4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc86fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q
-4LqILPxFzBiwmZVRDuwduIj/h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/
-GGUsyfJj4akH/nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv
-wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHNpGxlaKFJdlxD
-ydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey
------END CERTIFICATE-----
-
-WellsSecure Public Root Certificate Authority
-=============================================
------BEGIN CERTIFICATE-----
-MIIEvTCCA6WgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoM
-F1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYw
-NAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcN
-MDcxMjEzMTcwNzU0WhcNMjIxMjE0MDAwNzU0WjCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoMF1dl
-bGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYD
-VQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0G
-CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDub7S9eeKPCCGeOARBJe+rWxxTkqxtnt3CxC5FlAM1
-iGd0V+PfjLindo8796jE2yljDpFoNoqXjopxaAkH5OjUDk/41itMpBb570OYj7OeUt9tkTmPOL13
-i0Nj67eT/DBMHAGTthP796EfvyXhdDcsHqRePGj4S78NuR4uNuip5Kf4D8uCdXw1LSLWwr8L87T8
-bJVhHlfXBIEyg1J55oNjz7fLY4sR4r1e6/aN7ZVyKLSsEmLpSjPmgzKuBXWVvYSV2ypcm44uDLiB
-K0HmOFafSZtsdvqKXfcBeYF8wYNABf5x/Qw/zE5gCQ5lRxAvAcAFP4/4s0HvWkJ+We/SlwxlAgMB
-AAGjggE0MIIBMDAPBgNVHRMBAf8EBTADAQH/MDkGA1UdHwQyMDAwLqAsoCqGKGh0dHA6Ly9jcmwu
-cGtpLndlbGxzZmFyZ28uY29tL3dzcHJjYS5jcmwwDgYDVR0PAQH/BAQDAgHGMB0GA1UdDgQWBBQm
-lRkQ2eihl5H/3BnZtQQ+0nMKajCBsgYDVR0jBIGqMIGngBQmlRkQ2eihl5H/3BnZtQQ+0nMKaqGB
-i6SBiDCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoMF1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRww
-GgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMg
-Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHmCAQEwDQYJKoZIhvcNAQEFBQADggEBALkVsUSRzCPI
-K0134/iaeycNzXK7mQDKfGYZUMbVmO2rvwNa5U3lHshPcZeG1eMd/ZDJPHV3V3p9+N701NX3leZ0
-bh08rnyd2wIDBSxxSyU+B+NemvVmFymIGjifz6pBA4SXa5M4esowRBskRDPQ5NHcKDj0E0M1NSlj
-qHyita04pO2t/caaH/+Xc/77szWnk4bGdpEA5qxRFsQnMlzbc9qlk1eOPm01JghZ1edE13YgY+es
-E2fDbbFwRnzVlhE9iW9dqKHrjQrawx0zbKPqZxmamX9LPYNRKh3KL4YMon4QLSvUFpULB6ouFJJJ
-tylv2G0xffX8oRAHh84vWdw+WNs=
------END CERTIFICATE-----
-
-COMODO ECC Certification Authority
-==================================
------BEGIN CERTIFICATE-----
-MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTELMAkGA1UEBhMC
-R0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UE
-ChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBB
-dXRob3JpdHkwHhcNMDgwMzA2MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0Ix
-GzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMR
-Q09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRo
-b3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSRFtSrYpn1PlILBs5BAH+X
-4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0JcfRK9ChQtP6IHG4/bC8vCVlbpVsLM5ni
-wz2J+Wos77LTBumjQjBAMB0GA1UdDgQWBBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8E
-BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VG
-FAkK+qDmfQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdvGDeA
-U/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY=
------END CERTIFICATE-----
-
-IGC/A
-=====
------BEGIN CERTIFICATE-----
-MIIEAjCCAuqgAwIBAgIFORFFEJQwDQYJKoZIhvcNAQEFBQAwgYUxCzAJBgNVBAYTAkZSMQ8wDQYD
-VQQIEwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQTS9TR0ROMQ4wDAYDVQQLEwVE
-Q1NTSTEOMAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2LmZy
-MB4XDTAyMTIxMzE0MjkyM1oXDTIwMTAxNzE0MjkyMlowgYUxCzAJBgNVBAYTAkZSMQ8wDQYDVQQI
-EwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQTS9TR0ROMQ4wDAYDVQQLEwVEQ1NT
-STEOMAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2LmZyMIIB
-IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsh/R0GLFMzvABIaIs9z4iPf930Pfeo2aSVz2
-TqrMHLmh6yeJ8kbpO0px1R2OLc/mratjUMdUC24SyZA2xtgv2pGqaMVy/hcKshd+ebUyiHDKcMCW
-So7kVc0dJ5S/znIq7Fz5cyD+vfcuiWe4u0dzEvfRNWk68gq5rv9GQkaiv6GFGvm/5P9JhfejcIYy
-HF2fYPepraX/z9E0+X1bF8bc1g4oa8Ld8fUzaJ1O/Id8NhLWo4DoQw1VYZTqZDdH6nfK0LJYBcNd
-frGoRpAxVs5wKpayMLh35nnAvSk7/ZR3TL0gzUEl4C7HG7vupARB0l2tEmqKm0f7yd1GQOGdPDPQ
-tQIDAQABo3cwdTAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIBRjAVBgNVHSAEDjAMMAoGCCqB
-egF5AQEBMB0GA1UdDgQWBBSjBS8YYFDCiQrdKyFP/45OqDAxNjAfBgNVHSMEGDAWgBSjBS8YYFDC
-iQrdKyFP/45OqDAxNjANBgkqhkiG9w0BAQUFAAOCAQEABdwm2Pp3FURo/C9mOnTgXeQp/wYHE4RK
-q89toB9RlPhJy3Q2FLwV3duJL92PoF189RLrn544pEfMs5bZvpwlqwN+Mw+VgQ39FuCIvjfwbF3Q
-MZsyK10XZZOYYLxuj7GoPB7ZHPOpJkL5ZB3C55L29B5aqhlSXa/oovdgoPaN8In1buAKBQGVyYsg
-Crpa/JosPL3Dt8ldeCUFP1YUmwza+zpI/pdpXsoQhvdOlgQITeywvl3cO45Pwf2aNjSaTFR+FwNI
-lQgRHAdvhQh+XU3Endv7rs6y0bO4g2wdsrN58dhwmX7wEwLOXt1R0982gaEbeC9xs/FZTEYYKKuF
-0mBWWg==
------END CERTIFICATE-----
-
-Security Communication EV RootCA1
-=================================
------BEGIN CERTIFICATE-----
-MIIDfTCCAmWgAwIBAgIBADANBgkqhkiG9w0BAQUFADBgMQswCQYDVQQGEwJKUDElMCMGA1UEChMc
-U0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEqMCgGA1UECxMhU2VjdXJpdHkgQ29tbXVuaWNh
-dGlvbiBFViBSb290Q0ExMB4XDTA3MDYwNjAyMTIzMloXDTM3MDYwNjAyMTIzMlowYDELMAkGA1UE
-BhMCSlAxJTAjBgNVBAoTHFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xKjAoBgNVBAsTIVNl
-Y3VyaXR5IENvbW11bmljYXRpb24gRVYgUm9vdENBMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
-AQoCggEBALx/7FebJOD+nLpCeamIivqA4PUHKUPqjgo0No0c+qe1OXj/l3X3L+SqawSERMqm4miO
-/VVQYg+kcQ7OBzgtQoVQrTyWb4vVog7P3kmJPdZkLjjlHmy1V4qe70gOzXppFodEtZDkBp2uoQSX
-WHnvIEqCa4wiv+wfD+mEce3xDuS4GBPMVjZd0ZoeUWs5bmB2iDQL87PRsJ3KYeJkHcFGB7hj3R4z
-ZbOOCVVSPbW9/wfrrWFVGCypaZhKqkDFMxRldAD5kd6vA0jFQFTcD4SQaCDFkpbcLuUCRarAX1T4
-bepJz11sS6/vmsJWXMY1VkJqMF/Cq/biPT+zyRGPMUzXn0kCAwEAAaNCMEAwHQYDVR0OBBYEFDVK
-9U2vP9eCOKyrcWUXdYydVZPmMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqG
-SIb3DQEBBQUAA4IBAQCoh+ns+EBnXcPBZsdAS5f8hxOQWsTvoMpfi7ent/HWtWS3irO4G8za+6xm
-iEHO6Pzk2x6Ipu0nUBsCMCRGef4Eh3CXQHPRwMFXGZpppSeZq51ihPZRwSzJIxXYKLerJRO1RuGG
-Av8mjMSIkh1W/hln8lXkgKNrnKt34VFxDSDbEJrbvXZ5B3eZKK2aXtqxT0QsNY6llsf9g/BYxnnW
-mHyojf6GPgcWkuF75x3sM3Z+Qi5KhfmRiWiEA4Glm5q+4zfFVKtWOxgtQaQM+ELbmaDgcm+7XeEW
-T1MKZPlO9L9OVL14bIjqv5wTJMJwaaJ/D8g8rQjJsJhAoyrniIPtd490
------END CERTIFICATE-----
-
-OISTE WISeKey Global Root GA CA
-===============================
------BEGIN CERTIFICATE-----
-MIID8TCCAtmgAwIBAgIQQT1yx/RrH4FDffHSKFTfmjANBgkqhkiG9w0BAQUFADCBijELMAkGA1UE
-BhMCQ0gxEDAOBgNVBAoTB1dJU2VLZXkxGzAZBgNVBAsTEkNvcHlyaWdodCAoYykgMjAwNTEiMCAG
-A1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNlZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBH
-bG9iYWwgUm9vdCBHQSBDQTAeFw0wNTEyMTExNjAzNDRaFw0zNzEyMTExNjA5NTFaMIGKMQswCQYD
-VQQGEwJDSDEQMA4GA1UEChMHV0lTZUtleTEbMBkGA1UECxMSQ29weXJpZ2h0IChjKSAyMDA1MSIw
-IAYDVQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5
-IEdsb2JhbCBSb290IEdBIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAy0+zAJs9
-Nt350UlqaxBJH+zYK7LG+DKBKUOVTJoZIyEVRd7jyBxRVVuuk+g3/ytr6dTqvirdqFEr12bDYVxg
-Asj1znJ7O7jyTmUIms2kahnBAbtzptf2w93NvKSLtZlhuAGio9RN1AU9ka34tAhxZK9w8RxrfvbD
-d50kc3vkDIzh2TbhmYsFmQvtRTEJysIA2/dyoJaqlYfQjse2YXMNdmaM3Bu0Y6Kff5MTMPGhJ9vZ
-/yxViJGg4E8HsChWjBgbl0SOid3gF27nKu+POQoxhILYQBRJLnpB5Kf+42TMwVlxSywhp1t94B3R
-LoGbw9ho972WG6xwsRYUC9tguSYBBQIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUw
-AwEB/zAdBgNVHQ4EFgQUswN+rja8sHnR3JQmthG+IbJphpQwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ
-KoZIhvcNAQEFBQADggEBAEuh/wuHbrP5wUOxSPMowB0uyQlB+pQAHKSkq0lPjz0e701vvbyk9vIm
-MMkQyh2I+3QZH4VFvbBsUfk2ftv1TDI6QU9bR8/oCy22xBmddMVHxjtqD6wU2zz0c5ypBd8A3HR4
-+vg1YFkCExh8vPtNsCBtQ7tgMHpnM1zFmdH4LTlSc/uMqpclXHLZCB6rTjzjgTGfA6b7wP4piFXa
-hNVQA7bihKOmNqoROgHhGEvWRGizPflTdISzRpFGlgC3gCy24eMQ4tui5yiPAZZiFj4A4xylNoEY
-okxSdsARo27mHbrjWr42U8U+dY+GaSlYU7Wcu2+fXMUY7N0v4ZjJ/L7fCg0=
------END CERTIFICATE-----
-
-Microsec e-Szigno Root CA
-=========================
------BEGIN CERTIFICATE-----
-MIIHqDCCBpCgAwIBAgIRAMy4579OKRr9otxmpRwsDxEwDQYJKoZIhvcNAQEFBQAwcjELMAkGA1UE
-BhMCSFUxETAPBgNVBAcTCEJ1ZGFwZXN0MRYwFAYDVQQKEw1NaWNyb3NlYyBMdGQuMRQwEgYDVQQL
-EwtlLVN6aWdubyBDQTEiMCAGA1UEAxMZTWljcm9zZWMgZS1Temlnbm8gUm9vdCBDQTAeFw0wNTA0
-MDYxMjI4NDRaFw0xNzA0MDYxMjI4NDRaMHIxCzAJBgNVBAYTAkhVMREwDwYDVQQHEwhCdWRhcGVz
-dDEWMBQGA1UEChMNTWljcm9zZWMgTHRkLjEUMBIGA1UECxMLZS1Temlnbm8gQ0ExIjAgBgNVBAMT
-GU1pY3Jvc2VjIGUtU3ppZ25vIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
-AQDtyADVgXvNOABHzNuEwSFpLHSQDCHZU4ftPkNEU6+r+ICbPHiN1I2uuO/TEdyB5s87lozWbxXG
-d36hL+BfkrYn13aaHUM86tnsL+4582pnS4uCzyL4ZVX+LMsvfUh6PXX5qqAnu3jCBspRwn5mS6/N
-oqdNAoI/gqyFxuEPkEeZlApxcpMqyabAvjxWTHOSJ/FrtfX9/DAFYJLG65Z+AZHCabEeHXtTRbjc
-QR/Ji3HWVBTji1R4P770Yjtb9aPs1ZJ04nQw7wHb4dSrmZsqa/i9phyGI0Jf7Enemotb9HI6QMVJ
-PqW+jqpx62z69Rrkav17fVVA71hu5tnVvCSrwe+3AgMBAAGjggQ3MIIEMzBnBggrBgEFBQcBAQRb
-MFkwKAYIKwYBBQUHMAGGHGh0dHBzOi8vcmNhLmUtc3ppZ25vLmh1L29jc3AwLQYIKwYBBQUHMAKG
-IWh0dHA6Ly93d3cuZS1zemlnbm8uaHUvUm9vdENBLmNydDAPBgNVHRMBAf8EBTADAQH/MIIBcwYD
-VR0gBIIBajCCAWYwggFiBgwrBgEEAYGoGAIBAQEwggFQMCgGCCsGAQUFBwIBFhxodHRwOi8vd3d3
-LmUtc3ppZ25vLmh1L1NaU1ovMIIBIgYIKwYBBQUHAgIwggEUHoIBEABBACAAdABhAG4A+gBzAO0A
-dAB2AOEAbgB5ACAA6QByAHQAZQBsAG0AZQB6AOkAcwDpAGgAZQB6ACAA6QBzACAAZQBsAGYAbwBn
-AGEAZADhAHMA4QBoAG8AegAgAGEAIABTAHoAbwBsAGcA4QBsAHQAYQB0APMAIABTAHoAbwBsAGcA
-4QBsAHQAYQB0AOEAcwBpACAAUwB6AGEAYgDhAGwAeQB6AGEAdABhACAAcwB6AGUAcgBpAG4AdAAg
-AGsAZQBsAGwAIABlAGwAagDhAHIAbgBpADoAIABoAHQAdABwADoALwAvAHcAdwB3AC4AZQAtAHMA
-egBpAGcAbgBvAC4AaAB1AC8AUwBaAFMAWgAvMIHIBgNVHR8EgcAwgb0wgbqggbeggbSGIWh0dHA6
-Ly93d3cuZS1zemlnbm8uaHUvUm9vdENBLmNybIaBjmxkYXA6Ly9sZGFwLmUtc3ppZ25vLmh1L0NO
-PU1pY3Jvc2VjJTIwZS1Temlnbm8lMjBSb290JTIwQ0EsT1U9ZS1Temlnbm8lMjBDQSxPPU1pY3Jv
-c2VjJTIwTHRkLixMPUJ1ZGFwZXN0LEM9SFU/Y2VydGlmaWNhdGVSZXZvY2F0aW9uTGlzdDtiaW5h
-cnkwDgYDVR0PAQH/BAQDAgEGMIGWBgNVHREEgY4wgYuBEGluZm9AZS1zemlnbm8uaHWkdzB1MSMw
-IQYDVQQDDBpNaWNyb3NlYyBlLVN6aWduw7MgUm9vdCBDQTEWMBQGA1UECwwNZS1TemlnbsOzIEhT
-WjEWMBQGA1UEChMNTWljcm9zZWMgS2Z0LjERMA8GA1UEBxMIQnVkYXBlc3QxCzAJBgNVBAYTAkhV
-MIGsBgNVHSMEgaQwgaGAFMegSXUWYYTbMUuE0vE3QJDvTtz3oXakdDByMQswCQYDVQQGEwJIVTER
-MA8GA1UEBxMIQnVkYXBlc3QxFjAUBgNVBAoTDU1pY3Jvc2VjIEx0ZC4xFDASBgNVBAsTC2UtU3pp
-Z25vIENBMSIwIAYDVQQDExlNaWNyb3NlYyBlLVN6aWdubyBSb290IENBghEAzLjnv04pGv2i3Gal
-HCwPETAdBgNVHQ4EFgQUx6BJdRZhhNsxS4TS8TdAkO9O3PcwDQYJKoZIhvcNAQEFBQADggEBANMT
-nGZjWS7KXHAM/IO8VbH0jgdsZifOwTsgqRy7RlRw7lrMoHfqaEQn6/Ip3Xep1fvj1KcExJW4C+FE
-aGAHQzAxQmHl7tnlJNUb3+FKG6qfx1/4ehHqE5MAyopYse7tDk2016g2JnzgOsHVV4Lxdbb9iV/a
-86g4nzUGCM4ilb7N1fy+W955a9x6qWVmvrElWl/tftOsRm1M9DKHtCAE4Gx4sHfRhUZLphK3dehK
-yVZs15KrnfVJONJPU+NVkBHbmJbGSfI+9J8b4PeI3CVimUTYc78/MPMMNz7UwiiAc7EBt51alhQB
-S6kRnSlqLtBdgcDPsiBDxwPgN05dCtxZICU=
------END CERTIFICATE-----
-
-Certigna
-========
------BEGIN CERTIFICATE-----
-MIIDqDCCApCgAwIBAgIJAP7c4wEPyUj/MA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNVBAYTAkZSMRIw
-EAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hMB4XDTA3MDYyOTE1MTMwNVoXDTI3
-MDYyOTE1MTMwNVowNDELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCURoaW15b3RpczERMA8GA1UEAwwI
-Q2VydGlnbmEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDIaPHJ1tazNHUmgh7stL7q
-XOEm7RFHYeGifBZ4QCHkYJ5ayGPhxLGWkv8YbWkj4Sti993iNi+RB7lIzw7sebYs5zRLcAglozyH
-GxnygQcPOJAZ0xH+hrTy0V4eHpbNgGzOOzGTtvKg0KmVEn2lmsxryIRWijOp5yIVUxbwzBfsV1/p
-ogqYCd7jX5xv3EjjhQsVWqa6n6xI4wmy9/Qy3l40vhx4XUJbzg4ij02Q130yGLMLLGq/jj8UEYkg
-DncUtT2UCIf3JR7VsmAA7G8qKCVuKj4YYxclPz5EIBb2JsglrgVKtOdjLPOMFlN+XPsRGgjBRmKf
-Irjxwo1p3Po6WAbfAgMBAAGjgbwwgbkwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUGu3+QTmQ
-tCRZvgHyUtVF9lo53BEwZAYDVR0jBF0wW4AUGu3+QTmQtCRZvgHyUtVF9lo53BGhOKQ2MDQxCzAJ
-BgNVBAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hggkA/tzjAQ/J
-SP8wDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG9w0BAQUFAAOCAQEA
-hQMeknH2Qq/ho2Ge6/PAD/Kl1NqV5ta+aDY9fm4fTIrv0Q8hbV6lUmPOEvjvKtpv6zf+EwLHyzs+
-ImvaYS5/1HI93TDhHkxAGYwP15zRgzB7mFncfca5DClMoTOi62c6ZYTTluLtdkVwj7Ur3vkj1klu
-PBS1xp81HlDQwY9qcEQCYsuuHWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY
-1gkIl2PlwS6wt0QmwCbAr1UwnjvVNioZBPRcHv/PLLf/0P2HQBHVESO7SMAhqaQoLf0V+LBOK/Qw
-WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg==
------END CERTIFICATE-----
-
-AC Ra\xC3\xADz Certic\xC3\xA1mara S.A.
-======================================
------BEGIN CERTIFICATE-----
-MIIGZjCCBE6gAwIBAgIPB35Sk3vgFeNX8GmMy+wMMA0GCSqGSIb3DQEBBQUAMHsxCzAJBgNVBAYT
-AkNPMUcwRQYDVQQKDD5Tb2NpZWRhZCBDYW1lcmFsIGRlIENlcnRpZmljYWNpw7NuIERpZ2l0YWwg
-LSBDZXJ0aWPDoW1hcmEgUy5BLjEjMCEGA1UEAwwaQUMgUmHDrXogQ2VydGljw6FtYXJhIFMuQS4w
-HhcNMDYxMTI3MjA0NjI5WhcNMzAwNDAyMjE0MjAyWjB7MQswCQYDVQQGEwJDTzFHMEUGA1UECgw+
-U29jaWVkYWQgQ2FtZXJhbCBkZSBDZXJ0aWZpY2FjacOzbiBEaWdpdGFsIC0gQ2VydGljw6FtYXJh
-IFMuQS4xIzAhBgNVBAMMGkFDIFJhw616IENlcnRpY8OhbWFyYSBTLkEuMIICIjANBgkqhkiG9w0B
-AQEFAAOCAg8AMIICCgKCAgEAq2uJo1PMSCMI+8PPUZYILrgIem08kBeGqentLhM0R7LQcNzJPNCN
-yu5LF6vQhbCnIwTLqKL85XXbQMpiiY9QngE9JlsYhBzLfDe3fezTf3MZsGqy2IiKLUV0qPezuMDU
-2s0iiXRNWhU5cxh0T7XrmafBHoi0wpOQY5fzp6cSsgkiBzPZkc0OnB8OIMfuuzONj8LSWKdf/WU3
-4ojC2I+GdV75LaeHM/J4Ny+LvB2GNzmxlPLYvEqcgxhaBvzz1NS6jBUJJfD5to0EfhcSM2tXSExP
-2yYe68yQ54v5aHxwD6Mq0Do43zeX4lvegGHTgNiRg0JaTASJaBE8rF9ogEHMYELODVoqDA+bMMCm
-8Ibbq0nXl21Ii/kDwFJnmxL3wvIumGVC2daa49AZMQyth9VXAnow6IYm+48jilSH5L887uvDdUhf
-HjlvgWJsxS3EF1QZtzeNnDeRyPYL1epjb4OsOMLzP96a++EjYfDIJss2yKHzMI+ko6Kh3VOz3vCa
-Mh+DkXkwwakfU5tTohVTP92dsxA7SH2JD/ztA/X7JWR1DhcZDY8AFmd5ekD8LVkH2ZD6mq093ICK
-5lw1omdMEWux+IBkAC1vImHFrEsm5VoQgpukg3s0956JkSCXjrdCx2bD0Omk1vUgjcTDlaxECp1b
-czwmPS9KvqfJpxAe+59QafMCAwEAAaOB5jCB4zAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE
-AwIBBjAdBgNVHQ4EFgQU0QnQ6dfOeXRU+Tows/RtLAMDG2gwgaAGA1UdIASBmDCBlTCBkgYEVR0g
-ADCBiTArBggrBgEFBQcCARYfaHR0cDovL3d3dy5jZXJ0aWNhbWFyYS5jb20vZHBjLzBaBggrBgEF
-BQcCAjBOGkxMaW1pdGFjaW9uZXMgZGUgZ2FyYW507WFzIGRlIGVzdGUgY2VydGlmaWNhZG8gc2Ug
-cHVlZGVuIGVuY29udHJhciBlbiBsYSBEUEMuMA0GCSqGSIb3DQEBBQUAA4ICAQBclLW4RZFNjmEf
-AygPU3zmpFmps4p6xbD/CHwso3EcIRNnoZUSQDWDg4902zNc8El2CoFS3UnUmjIz75uny3XlesuX
-EpBcunvFm9+7OSPI/5jOCk0iAUgHforA1SBClETvv3eiiWdIG0ADBaGJ7M9i4z0ldma/Jre7Ir5v
-/zlXdLp6yQGVwZVR6Kss+LGGIOk/yzVb0hfpKv6DExdA7ohiZVvVO2Dpezy4ydV/NgIlqmjCMRW3
-MGXrfx1IebHPOeJCgBbT9ZMj/EyXyVo3bHwi2ErN0o42gzmRkBDI8ck1fj+404HGIGQatlDCIaR4
-3NAvO2STdPCWkPHv+wlaNECW8DYSwaN0jJN+Qd53i+yG2dIPPy3RzECiiWZIHiCznCNZc6lEc7wk
-eZBWN7PGKX6jD/EpOe9+XCgycDWs2rjIdWb8m0w5R44bb5tNAlQiM+9hup4phO9OSzNHdpdqy35f
-/RWmnkJDW2ZaiogN9xa5P1FlK2Zqi9E4UqLWRhH6/JocdJ6PlwsCT2TG9WjTSy3/pDceiz+/RL5h
-RqGEPQgnTIEgd4kI6mdAXmwIUV80WoyWaM3X94nCHNMyAK9Sy9NgWyo6R35rMDOhYil/SrnhLecU
-Iw4OGEfhefwVVdCx/CVxY3UzHCMrr1zZ7Ud3YA47Dx7SwNxkBYn8eNZcLCZDqQ==
------END CERTIFICATE-----
-
-TC TrustCenter Class 2 CA II
-============================
------BEGIN CERTIFICATE-----
-MIIEqjCCA5KgAwIBAgIOLmoAAQACH9dSISwRXDswDQYJKoZIhvcNAQEFBQAwdjELMAkGA1UEBhMC
-REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNVBAsTGVRDIFRydXN0Q2VudGVy
-IENsYXNzIDIgQ0ExJTAjBgNVBAMTHFRDIFRydXN0Q2VudGVyIENsYXNzIDIgQ0EgSUkwHhcNMDYw
-MTEyMTQzODQzWhcNMjUxMjMxMjI1OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1
-c3RDZW50ZXIgR21iSDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQTElMCMGA1UE
-AxMcVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
-AQoCggEBAKuAh5uO8MN8h9foJIIRszzdQ2Lu+MNF2ujhoF/RKrLqk2jftMjWQ+nEdVl//OEd+DFw
-IxuInie5e/060smp6RQvkL4DUsFJzfb95AhmC1eKokKguNV/aVyQMrKXDcpK3EY+AlWJU+MaWss2
-xgdW94zPEfRMuzBwBJWl9jmM/XOBCH2JXjIeIqkiRUuwZi4wzJ9l/fzLganx4Duvo4bRierERXlQ
-Xa7pIXSSTYtZgo+U4+lK8edJsBTj9WLL1XK9H7nSn6DNqPoByNkN39r8R52zyFTfSUrxIan+GE7u
-SNQZu+995OKdy1u2bv/jzVrndIIFuoAlOMvkaZ6vQaoahPUCAwEAAaOCATQwggEwMA8GA1UdEwEB
-/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTjq1RMgKHbVkO3kUrL84J6E1wIqzCB
-7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRydXN0Y2VudGVyLmRlL2NybC92Mi90
-Y19jbGFzc18yX2NhX0lJLmNybIaBn2xkYXA6Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBU
-cnVzdENlbnRlciUyMENsYXNzJTIwMiUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21i
-SCxPVT1yb290Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u
-TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEAjNfffu4bgBCzg/XbEeprS6iSGNn3Bzn1LL4G
-dXpoUxUc6krtXvwjshOg0wn/9vYua0Fxec3ibf2uWWuFHbhOIprtZjluS5TmVfwLG4t3wVMTZonZ
-KNaL80VKY7f9ewthXbhtvsPcW3nS7Yblok2+XnR8au0WOB9/WIFaGusyiC2y8zl3gK9etmF1Kdsj
-TYjKUCjLhdLTEKJZbtOTVAB6okaVhgWcqRmY5TFyDADiZ9lA4CQze28suVyrZZ0srHbqNZn1l7kP
-JOzHdiEoZa5X6AeIdUpWoNIFOqTmjZKILPPy4cHGYdtBxceb9w4aUUXCYWvcZCcXjFq32nQozZfk
-vQ==
------END CERTIFICATE-----
-
-TC TrustCenter Class 3 CA II
-============================
------BEGIN CERTIFICATE-----
-MIIEqjCCA5KgAwIBAgIOSkcAAQAC5aBd1j8AUb8wDQYJKoZIhvcNAQEFBQAwdjELMAkGA1UEBhMC
-REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNVBAsTGVRDIFRydXN0Q2VudGVy
-IENsYXNzIDMgQ0ExJTAjBgNVBAMTHFRDIFRydXN0Q2VudGVyIENsYXNzIDMgQ0EgSUkwHhcNMDYw
-MTEyMTQ0MTU3WhcNMjUxMjMxMjI1OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1
-c3RDZW50ZXIgR21iSDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQTElMCMGA1UE
-AxMcVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
-AQoCggEBALTgu1G7OVyLBMVMeRwjhjEQY0NVJz/GRcekPewJDRoeIMJWHt4bNwcwIi9v8Qbxq63W
-yKthoy9DxLCyLfzDlml7forkzMA5EpBCYMnMNWju2l+QVl/NHE1bWEnrDgFPZPosPIlY2C8u4rBo
-6SI7dYnWRBpl8huXJh0obazovVkdKyT21oQDZogkAHhg8fir/gKya/si+zXmFtGt9i4S5Po1auUZ
-uV3bOx4a+9P/FRQI2AlqukWdFHlgfa9Aigdzs5OW03Q0jTo3Kd5c7PXuLjHCINy+8U9/I1LZW+Jk
-2ZyqBwi1Rb3R0DHBq1SfqdLDYmAD8bs5SpJKPQq5ncWg/jcCAwEAAaOCATQwggEwMA8GA1UdEwEB
-/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTUovyfs8PYA9NXXAek0CSnwPIA1DCB
-7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRydXN0Y2VudGVyLmRlL2NybC92Mi90
-Y19jbGFzc18zX2NhX0lJLmNybIaBn2xkYXA6Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBU
-cnVzdENlbnRlciUyMENsYXNzJTIwMyUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21i
-SCxPVT1yb290Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u
-TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEANmDkcPcGIEPZIxpC8vijsrlNirTzwppVMXzE
-O2eatN9NDoqTSheLG43KieHPOh6sHfGcMrSOWXaiQYUlN6AT0PV8TtXqluJucsG7Kv5sbviRmEb8
-yRtXW+rIGjs/sFGYPAfaLFkB2otE6OF0/ado3VS6g0bsyEa1+K+XwDsJHI/OcpY9M1ZwvJbL2NV9
-IJqDnxrcOfHFcqMRA/07QlIp2+gB95tejNaNhk4Z+rwcvsUhpYeeeC422wlxo3I0+GzjBgnyXlal
-092Y+tTmBvTwtiBjS+opvaqCZh77gaqnN60TGOaSw4HBM7uIHqHn4rS9MWwOUT1v+5ZWgOI2F9Hc
-5A==
------END CERTIFICATE-----
-
-TC TrustCenter Universal CA I
-=============================
------BEGIN CERTIFICATE-----
-MIID3TCCAsWgAwIBAgIOHaIAAQAC7LdggHiNtgYwDQYJKoZIhvcNAQEFBQAweTELMAkGA1UEBhMC
-REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxJDAiBgNVBAsTG1RDIFRydXN0Q2VudGVy
-IFVuaXZlcnNhbCBDQTEmMCQGA1UEAxMdVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBIEkwHhcN
-MDYwMzIyMTU1NDI4WhcNMjUxMjMxMjI1OTU5WjB5MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMg
-VHJ1c3RDZW50ZXIgR21iSDEkMCIGA1UECxMbVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBMSYw
-JAYDVQQDEx1UQyBUcnVzdENlbnRlciBVbml2ZXJzYWwgQ0EgSTCCASIwDQYJKoZIhvcNAQEBBQAD
-ggEPADCCAQoCggEBAKR3I5ZEr5D0MacQ9CaHnPM42Q9e3s9B6DGtxnSRJJZ4Hgmgm5qVSkr1YnwC
-qMqs+1oEdjneX/H5s7/zA1hV0qq34wQi0fiU2iIIAI3TfCZdzHd55yx4Oagmcw6iXSVphU9VDprv
-xrlE4Vc93x9UIuVvZaozhDrzznq+VZeujRIPFDPiUHDDSYcTvFHe15gSWu86gzOSBnWLknwSaHtw
-ag+1m7Z3W0hZneTvWq3zwZ7U10VOylY0Ibw+F1tvdwxIAUMpsN0/lm7mlaoMwCC2/T42J5zjXM9O
-gdwZu5GQfezmlwQek8wiSdeXhrYTCjxDI3d+8NzmzSQfO4ObNDqDNOMCAwEAAaNjMGEwHwYDVR0j
-BBgwFoAUkqR1LKSevoFE63n8isWVpesQdXMwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
-AYYwHQYDVR0OBBYEFJKkdSyknr6BROt5/IrFlaXrEHVzMA0GCSqGSIb3DQEBBQUAA4IBAQAo0uCG
-1eb4e/CX3CJrO5UUVg8RMKWaTzqwOuAGy2X17caXJ/4l8lfmXpWMPmRgFVp/Lw0BxbFg/UU1z/Cy
-vwbZ71q+s2IhtNerNXxTPqYn8aEt2hojnczd7Dwtnic0XQ/CNnm8yUpiLe1r2X1BQ3y2qsrtYbE3
-ghUJGooWMNjsydZHcnhLEEYUjl8Or+zHL6sQ17bxbuyGssLoDZJz3KL0Dzq/YSMQiZxIQG5wALPT
-ujdEWBF6AmqI8Dc08BnprNRlc/ZpjGSUOnmFKbAWKwyCPwacx/0QK54PLLae4xW/2TYcuiUaUj0a
-7CIMHOCkoj3w6DnPgcB77V0fb8XQC9eY
------END CERTIFICATE-----
-
-Deutsche Telekom Root CA 2
-==========================
------BEGIN CERTIFICATE-----
-MIIDnzCCAoegAwIBAgIBJjANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJERTEcMBoGA1UEChMT
-RGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxlU2VjIFRydXN0IENlbnRlcjEjMCEG
-A1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290IENBIDIwHhcNOTkwNzA5MTIxMTAwWhcNMTkwNzA5
-MjM1OTAwWjBxMQswCQYDVQQGEwJERTEcMBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0G
-A1UECxMWVC1UZWxlU2VjIFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBS
-b290IENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrC6M14IspFLEUha88EOQ5
-bzVdSq7d6mGNlUn0b2SjGmBmpKlAIoTZ1KXleJMOaAGtuU1cOs7TuKhCQN/Po7qCWWqSG6wcmtoI
-KyUn+WkjR/Hg6yx6m/UTAtB+NHzCnjwAWav12gz1MjwrrFDa1sPeg5TKqAyZMg4ISFZbavva4VhY
-AUlfckE8FQYBjl2tqriTtM2e66foai1SNNs671x1Udrb8zH57nGYMsRUFUQM+ZtV7a3fGAigo4aK
-Se5TBY8ZTNXeWHmb0mocQqvF1afPaA+W5OFhmHZhyJF81j4A4pFQh+GdCuatl9Idxjp9y7zaAzTV
-jlsB9WoHtxa2bkp/AgMBAAGjQjBAMB0GA1UdDgQWBBQxw3kbuvVT1xfgiXotF2wKsyudMzAPBgNV
-HRMECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAlGRZrTlk5ynr
-E/5aw4sTV8gEJPB0d8Bg42f76Ymmg7+Wgnxu1MM9756AbrsptJh6sTtU6zkXR34ajgv8HzFZMQSy
-zhfzLMdiNlXiItiJVbSYSKpk+tYcNthEeFpaIzpXl/V6ME+un2pMSyuOoAPjPuCp1NJ70rOo4nI8
-rZ7/gFnkm0W09juwzTkZmDLl6iFhkOQxIY40sfcvNUqFENrnijchvllj4PKFiDFT1FQUhXB59C4G
-dyd1Lx+4ivn+xbrYNuSD7Odlt79jWvNGr4GUN9RBjNYj1h7P9WgbRGOiWrqnNVmh5XAFmw4jV5mU
-Cm26OWMohpLzGITY+9HPBVZkVw==
------END CERTIFICATE-----
-
-ComSign Secured CA
-==================
------BEGIN CERTIFICATE-----
-MIIDqzCCApOgAwIBAgIRAMcoRwmzuGxFjB36JPU2TukwDQYJKoZIhvcNAQEFBQAwPDEbMBkGA1UE
-AxMSQ29tU2lnbiBTZWN1cmVkIENBMRAwDgYDVQQKEwdDb21TaWduMQswCQYDVQQGEwJJTDAeFw0w
-NDAzMjQxMTM3MjBaFw0yOTAzMTYxNTA0NTZaMDwxGzAZBgNVBAMTEkNvbVNpZ24gU2VjdXJlZCBD
-QTEQMA4GA1UEChMHQ29tU2lnbjELMAkGA1UEBhMCSUwwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
-ggEKAoIBAQDGtWhfHZQVw6QIVS3joFd67+l0Kru5fFdJGhFeTymHDEjWaueP1H5XJLkGieQcPOqs
-49ohgHMhCu95mGwfCP+hUH3ymBvJVG8+pSjsIQQPRbsHPaHA+iqYHU4Gk/v1iDurX8sWv+bznkqH
-7Rnqwp9D5PGBpX8QTz7RSmKtUxvLg/8HZaWSLWapW7ha9B20IZFKF3ueMv5WJDmyVIRD9YTC2LxB
-kMyd1mja6YJQqTtoz7VdApRgFrFD2UNd3V2Hbuq7s8lr9gOUCXDeFhF6K+h2j0kQmHe5Y1yLM5d1
-9guMsqtb3nQgJT/j8xH5h2iGNXHDHYwt6+UarA9z1YJZQIDTAgMBAAGjgacwgaQwDAYDVR0TBAUw
-AwEB/zBEBgNVHR8EPTA7MDmgN6A1hjNodHRwOi8vZmVkaXIuY29tc2lnbi5jby5pbC9jcmwvQ29t
-U2lnblNlY3VyZWRDQS5jcmwwDgYDVR0PAQH/BAQDAgGGMB8GA1UdIwQYMBaAFMFL7XC29z58ADsA
-j8c+DkWfHl3sMB0GA1UdDgQWBBTBS+1wtvc+fAA7AI/HPg5Fnx5d7DANBgkqhkiG9w0BAQUFAAOC
-AQEAFs/ukhNQq3sUnjO2QiBq1BW9Cav8cujvR3qQrFHBZE7piL1DRYHjZiM/EoZNGeQFsOY3wo3a
-BijJD4mkU6l1P7CW+6tMM1X5eCZGbxs2mPtCdsGCuY7e+0X5YxtiOzkGynd6qDwJz2w2PQ8KRUtp
-FhpFfTMDZflScZAmlaxMDPWLkz/MdXSFmLr/YnpNH4n+rr2UAJm/EaXc4HnFFgt9AmEd6oX5AhVP
-51qJThRv4zdLhfXBPGHg/QVBspJ/wx2g0K5SZGBrGMYmnNj1ZOQ2GmKfig8+/21OGVZOIJFsnzQz
-OjRXUDpvgV4GxvU+fE6OK85lBi5d0ipTdF7Tbieejw==
------END CERTIFICATE-----
-
-Cybertrust Global Root
-======================
------BEGIN CERTIFICATE-----
-MIIDoTCCAomgAwIBAgILBAAAAAABD4WqLUgwDQYJKoZIhvcNAQEFBQAwOzEYMBYGA1UEChMPQ3li
-ZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2JhbCBSb290MB4XDTA2MTIxNTA4
-MDAwMFoXDTIxMTIxNTA4MDAwMFowOzEYMBYGA1UEChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQD
-ExZDeWJlcnRydXN0IEdsb2JhbCBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
-+Mi8vRRQZhP/8NN57CPytxrHjoXxEnOmGaoQ25yiZXRadz5RfVb23CO21O1fWLE3TdVJDm71aofW
-0ozSJ8bi/zafmGWgE07GKmSb1ZASzxQG9Dvj1Ci+6A74q05IlG2OlTEQXO2iLb3VOm2yHLtgwEZL
-AfVJrn5GitB0jaEMAs7u/OePuGtm839EAL9mJRQr3RAwHQeWP032a7iPt3sMpTjr3kfb1V05/Iin
-89cqdPHoWqI7n1C6poxFNcJQZZXcY4Lv3b93TZxiyWNzFtApD0mpSPCzqrdsxacwOUBdrsTiXSZT
-8M4cIwhhqJQZugRiQOwfOHB3EgZxpzAYXSUnpQIDAQABo4GlMIGiMA4GA1UdDwEB/wQEAwIBBjAP
-BgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBS2CHsNesysIEyGVjJez6tuhS1wVzA/BgNVHR8EODA2
-MDSgMqAwhi5odHRwOi8vd3d3Mi5wdWJsaWMtdHJ1c3QuY29tL2NybC9jdC9jdHJvb3QuY3JsMB8G
-A1UdIwQYMBaAFLYIew16zKwgTIZWMl7Pq26FLXBXMA0GCSqGSIb3DQEBBQUAA4IBAQBW7wojoFRO
-lZfJ+InaRcHUowAl9B8Tq7ejhVhpwjCt2BWKLePJzYFa+HMjWqd8BfP9IjsO0QbE2zZMcwSO5bAi
-5MXzLqXZI+O4Tkogp24CJJ8iYGd7ix1yCcUxXOl5n4BHPa2hCwcUPUf/A2kaDAtE52Mlp3+yybh2
-hO0j9n0Hq0V+09+zv+mKts2oomcrUtW3ZfA5TGOgkXmTUg9U3YO7n9GPp1Nzw8v/MOx8BLjYRB+T
-X3EJIrduPuocA06dGiBh+4E37F78CkWr1+cXVdCg6mCbpvbjjFspwgZgFJ0tl0ypkxWdYcQBX0jW
-WL1WMRJOEcgh4LMRkWXbtKaIOM5V
------END CERTIFICATE-----
-
-ePKI Root Certification Authority
-=================================
------BEGIN CERTIFICATE-----
-MIIFsDCCA5igAwIBAgIQFci9ZUdcr7iXAF7kBtK8nTANBgkqhkiG9w0BAQUFADBeMQswCQYDVQQG
-EwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0ZC4xKjAoBgNVBAsMIWVQS0kg
-Um9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNDEyMjAwMjMxMjdaFw0zNDEyMjAwMjMx
-MjdaMF4xCzAJBgNVBAYTAlRXMSMwIQYDVQQKDBpDaHVuZ2h3YSBUZWxlY29tIENvLiwgTHRkLjEq
-MCgGA1UECwwhZVBLSSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0B
-AQEFAAOCAg8AMIICCgKCAgEA4SUP7o3biDN1Z82tH306Tm2d0y8U82N0ywEhajfqhFAHSyZbCUNs
-IZ5qyNUD9WBpj8zwIuQf5/dqIjG3LBXy4P4AakP/h2XGtRrBp0xtInAhijHyl3SJCRImHJ7K2RKi
-lTza6We/CKBk49ZCt0Xvl/T29de1ShUCWH2YWEtgvM3XDZoTM1PRYfl61dd4s5oz9wCGzh1NlDiv
-qOx4UXCKXBCDUSH3ET00hl7lSM2XgYI1TBnsZfZrxQWh7kcT1rMhJ5QQCtkkO7q+RBNGMD+XPNjX
-12ruOzjjK9SXDrkb5wdJfzcq+Xd4z1TtW0ado4AOkUPB1ltfFLqfpo0kR0BZv3I4sjZsN/+Z0V0O
-WQqraffAsgRFelQArr5T9rXn4fg8ozHSqf4hUmTFpmfwdQcGlBSBVcYn5AGPF8Fqcde+S/uUWH1+
-ETOxQvdibBjWzwloPn9s9h6PYq2lY9sJpx8iQkEeb5mKPtf5P0B6ebClAZLSnT0IFaUQAS2zMnao
-lQ2zepr7BxB4EW/hj8e6DyUadCrlHJhBmd8hh+iVBmoKs2pHdmX2Os+PYhcZewoozRrSgx4hxyy/
-vv9haLdnG7t4TY3OZ+XkwY63I2binZB1NJipNiuKmpS5nezMirH4JYlcWrYvjB9teSSnUmjDhDXi
-Zo1jDiVN1Rmy5nk3pyKdVDECAwEAAaNqMGgwHQYDVR0OBBYEFB4M97Zn8uGSJglFwFU5Lnc/Qkqi
-MAwGA1UdEwQFMAMBAf8wOQYEZyoHAAQxMC8wLQIBADAJBgUrDgMCGgUAMAcGBWcqAwAABBRFsMLH
-ClZ87lt4DJX5GFPBphzYEDANBgkqhkiG9w0BAQUFAAOCAgEACbODU1kBPpVJufGBuvl2ICO1J2B0
-1GqZNF5sAFPZn/KmsSQHRGoqxqWOeBLoR9lYGxMqXnmbnwoqZ6YlPwZpVnPDimZI+ymBV3QGypzq
-KOg4ZyYr8dW1P2WT+DZdjo2NQCCHGervJ8A9tDkPJXtoUHRVnAxZfVo9QZQlUgjgRywVMRnVvwdV
-xrsStZf0X4OFunHB2WyBEXYKCrC/gpf36j36+uwtqSiUO1bd0lEursC9CBWMd1I0ltabrNMdjmEP
-NXubrjlpC2JgQCA2j6/7Nu4tCEoduL+bXPjqpRugc6bY+G7gMwRfaKonh+3ZwZCc7b3jajWvY9+r
-GNm65ulK6lCKD2GTHuItGeIwlDWSXQ62B68ZgI9HkFFLLk3dheLSClIKF5r8GrBQAuUBo2M3IUxE
-xJtRmREOc5wGj1QupyheRDmHVi03vYVElOEMSyycw5KFNGHLD7ibSkNS/jQ6fbjpKdx2qcgw+BRx
-gMYeNkh0IkFch4LoGHGLQYlE535YW6i4jRPpp2zDR+2zGp1iro2C6pSe3VkQw63d4k3jMdXH7Ojy
-sP6SHhYKGvzZ8/gntsm+HbRsZJB/9OTEW9c3rkIO3aQab3yIVMUWbuF6aC74Or8NpDyJO3inTmOD
-BCEIZ43ygknQW/2xzQ+DhNQ+IIX3Sj0rnP0qCglN6oH4EZw=
------END CERTIFICATE-----
-
-T\xc3\x9c\x42\xC4\xB0TAK UEKAE K\xC3\xB6k Sertifika Hizmet Sa\xC4\x9Flay\xc4\xb1\x63\xc4\xb1s\xc4\xb1 - S\xC3\xBCr\xC3\xBCm 3
-=============================================================================================================================
------BEGIN CERTIFICATE-----
-MIIFFzCCA/+gAwIBAgIBETANBgkqhkiG9w0BAQUFADCCASsxCzAJBgNVBAYTAlRSMRgwFgYDVQQH
-DA9HZWJ6ZSAtIEtvY2FlbGkxRzBFBgNVBAoMPlTDvHJraXllIEJpbGltc2VsIHZlIFRla25vbG9q
-aWsgQXJhxZ90xLFybWEgS3VydW11IC0gVMOcQsSwVEFLMUgwRgYDVQQLDD9VbHVzYWwgRWxla3Ry
-b25payB2ZSBLcmlwdG9sb2ppIEFyYcWfdMSxcm1hIEVuc3RpdMO8c8O8IC0gVUVLQUUxIzAhBgNV
-BAsMGkthbXUgU2VydGlmaWthc3lvbiBNZXJrZXppMUowSAYDVQQDDEFUw5xCxLBUQUsgVUVLQUUg
-S8O2ayBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsSAtIFPDvHLDvG0gMzAeFw0wNzA4
-MjQxMTM3MDdaFw0xNzA4MjExMTM3MDdaMIIBKzELMAkGA1UEBhMCVFIxGDAWBgNVBAcMD0dlYnpl
-IC0gS29jYWVsaTFHMEUGA1UECgw+VMO8cmtpeWUgQmlsaW1zZWwgdmUgVGVrbm9sb2ppayBBcmHF
-n3TEsXJtYSBLdXJ1bXUgLSBUw5xCxLBUQUsxSDBGBgNVBAsMP1VsdXNhbCBFbGVrdHJvbmlrIHZl
-IEtyaXB0b2xvamkgQXJhxZ90xLFybWEgRW5zdGl0w7xzw7wgLSBVRUtBRTEjMCEGA1UECwwaS2Ft
-dSBTZXJ0aWZpa2FzeW9uIE1lcmtlemkxSjBIBgNVBAMMQVTDnELEsFRBSyBVRUtBRSBLw7ZrIFNl
-cnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxIC0gU8O8csO8bSAzMIIBIjANBgkqhkiG9w0B
-AQEFAAOCAQ8AMIIBCgKCAQEAim1L/xCIOsP2fpTo6iBkcK4hgb46ezzb8R1Sf1n68yJMlaCQvEhO
-Eav7t7WNeoMojCZG2E6VQIdhn8WebYGHV2yKO7Rm6sxA/OOqbLLLAdsyv9Lrhc+hDVXDWzhXcLh1
-xnnRFDDtG1hba+818qEhTsXOfJlfbLm4IpNQp81McGq+agV/E5wrHur+R84EpW+sky58K5+eeROR
-6Oqeyjh1jmKwlZMq5d/pXpduIF9fhHpEORlAHLpVK/swsoHvhOPc7Jg4OQOFCKlUAwUp8MmPi+oL
-hmUZEdPpCSPeaJMDyTYcIW7OjGbxmTDY17PDHfiBLqi9ggtm/oLL4eAagsNAgQIDAQABo0IwQDAd
-BgNVHQ4EFgQUvYiHyY/2pAoLquvF/pEjnatKijIwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF
-MAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAB18+kmPNOm3JpIWmgV050vQbTlswyb2zrgxvMTfvCr4
-N5EY3ATIZJkrGG2AA1nJrvhY0D7twyOfaTyGOBye79oneNGEN3GKPEs5z35FBtYt2IpNeBLWrcLT
-y9LQQfMmNkqblWwM7uXRQydmwYj3erMgbOqwaSvHIOgMA8RBBZniP+Rr+KCGgceExh/VS4ESshYh
-LBOhgLJeDEoTniDYYkCrkOpkSi+sDQESeUWoL4cZaMjihccwsnX5OD+ywJO0a+IDRM5noN+J1q2M
-dqMTw5RhK2vZbMEHCiIHhWyFJEapvj+LeISCfiQMnf2BN+MlqO02TpUsyZyQ2uypQjyttgI=
------END CERTIFICATE-----
-
-Buypass Class 2 CA 1
-====================
------BEGIN CERTIFICATE-----
-MIIDUzCCAjugAwIBAgIBATANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU
-QnV5cGFzcyBBUy05ODMxNjMzMjcxHTAbBgNVBAMMFEJ1eXBhc3MgQ2xhc3MgMiBDQSAxMB4XDTA2
-MTAxMzEwMjUwOVoXDTE2MTAxMzEwMjUwOVowSzELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBh
-c3MgQVMtOTgzMTYzMzI3MR0wGwYDVQQDDBRCdXlwYXNzIENsYXNzIDIgQ0EgMTCCASIwDQYJKoZI
-hvcNAQEBBQADggEPADCCAQoCggEBAIs8B0XY9t/mx8q6jUPFR42wWsE425KEHK8T1A9vNkYgxC7M
-cXA0ojTTNy7Y3Tp3L8DrKehc0rWpkTSHIln+zNvnma+WwajHQN2lFYxuyHyXA8vmIPLXl18xoS83
-0r7uvqmtqEyeIWZDO6i88wmjONVZJMHCR3axiFyCO7srpgTXjAePzdVBHfCuuCkslFJgNJQ72uA4
-0Z0zPhX0kzLFANq1KWYOOngPIVJfAuWSeyXTkh4vFZ2B5J2O6O+JzhRMVB0cgRJNcKi+EAUXfh/R
-uFdV7c27UsKwHnjCTTZoy1YmwVLBvXb3WNVyfh9EdrsAiR0WnVE1703CVu9r4Iw7DekCAwEAAaNC
-MEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUP42aWYv8e3uco684sDntkHGA1sgwDgYDVR0P
-AQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQAVGn4TirnoB6NLJzKyQJHyIdFkhb5jatLPgcIV
-1Xp+DCmsNx4cfHZSldq1fyOhKXdlyTKdqC5Wq2B2zha0jX94wNWZUYN/Xtm+DKhQ7SLHrQVMdvvt
-7h5HZPb3J31cKA9FxVxiXqaakZG3Uxcu3K1gnZZkOb1naLKuBctN518fV4bVIJwo+28TOPX2EZL2
-fZleHwzoq0QkKXJAPTZSr4xYkHPB7GEseaHsh7U/2k3ZIQAw3pDaDtMaSKk+hQsUi4y8QZ5q9w5w
-wDX3OaJdZtB7WZ+oRxKaJyOkLY4ng5IgodcVf/EuGO70SH8vf/GhGLWhC5SgYiAynB321O+/TIho
------END CERTIFICATE-----
-
-Buypass Class 3 CA 1
-====================
------BEGIN CERTIFICATE-----
-MIIDUzCCAjugAwIBAgIBAjANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU
-QnV5cGFzcyBBUy05ODMxNjMzMjcxHTAbBgNVBAMMFEJ1eXBhc3MgQ2xhc3MgMyBDQSAxMB4XDTA1
-MDUwOTE0MTMwM1oXDTE1MDUwOTE0MTMwM1owSzELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBh
-c3MgQVMtOTgzMTYzMzI3MR0wGwYDVQQDDBRCdXlwYXNzIENsYXNzIDMgQ0EgMTCCASIwDQYJKoZI
-hvcNAQEBBQADggEPADCCAQoCggEBAKSO13TZKWTeXx+HgJHqTjnmGcZEC4DVC69TB4sSveZn8AKx
-ifZgisRbsELRwCGoy+Gb72RRtqfPFfV0gGgEkKBYouZ0plNTVUhjP5JW3SROjvi6K//zNIqeKNc0
-n6wv1g/xpC+9UrJJhW05NfBEMJNGJPO251P7vGGvqaMU+8IXF4Rs4HyI+MkcVyzwPX6UvCWThOia
-AJpFBUJXgPROztmuOfbIUxAMZTpHe2DC1vqRycZxbL2RhzyRhkmr8w+gbCZ2Xhysm3HljbybIR6c
-1jh+JIAVMYKWsUnTYjdbiAwKYjT+p0h+mbEwi5A3lRyoH6UsjfRVyNvdWQrCrXig9IsCAwEAAaNC
-MEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUOBTmyPCppAP0Tj4io1vy1uCtQHQwDgYDVR0P
-AQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQABZ6OMySU9E2NdFm/soT4JXJEVKirZgCFPBdy7
-pYmrEzMqnji3jG8CcmPHc3ceCQa6Oyh7pEfJYWsICCD8igWKH7y6xsL+z27sEzNxZy5p+qksP2bA
-EllNC1QCkoS72xLvg3BweMhT+t/Gxv/ciC8HwEmdMldg0/L2mSlf56oBzKwzqBwKu5HEA6BvtjT5
-htOzdlSY9EqBs1OdTUDs5XcTRa9bqh/YL0yCe/4qxFi7T/ye/QNlGioOw6UgFpRreaaiErS7GqQj
-el/wroQk5PMr+4okoyeYZdowdXb8GZHo2+ubPzK/QJcHJrrM85SFSnonk8+QQtS4Wxam58tAA915
------END CERTIFICATE-----
-
-EBG Elektronik Sertifika Hizmet Sa\xC4\x9Flay\xc4\xb1\x63\xc4\xb1s\xc4\xb1
-==========================================================================
------BEGIN CERTIFICATE-----
-MIIF5zCCA8+gAwIBAgIITK9zQhyOdAIwDQYJKoZIhvcNAQEFBQAwgYAxODA2BgNVBAMML0VCRyBF
-bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMTcwNQYDVQQKDC5FQkcg
-QmlsacWfaW0gVGVrbm9sb2ppbGVyaSB2ZSBIaXptZXRsZXJpIEEuxZ4uMQswCQYDVQQGEwJUUjAe
-Fw0wNjA4MTcwMDIxMDlaFw0xNjA4MTQwMDMxMDlaMIGAMTgwNgYDVQQDDC9FQkcgRWxla3Ryb25p
-ayBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsTE3MDUGA1UECgwuRUJHIEJpbGnFn2lt
-IFRla25vbG9qaWxlcmkgdmUgSGl6bWV0bGVyaSBBLsWeLjELMAkGA1UEBhMCVFIwggIiMA0GCSqG
-SIb3DQEBAQUAA4ICDwAwggIKAoICAQDuoIRh0DpqZhAy2DE4f6en5f2h4fuXd7hxlugTlkaDT7by
-X3JWbhNgpQGR4lvFzVcfd2NR/y8927k/qqk153nQ9dAktiHq6yOU/im/+4mRDGSaBUorzAzu8T2b
-gmmkTPiab+ci2hC6X5L8GCcKqKpE+i4stPtGmggDg3KriORqcsnlZR9uKg+ds+g75AxuetpX/dfr
-eYteIAbTdgtsApWjluTLdlHRKJ2hGvxEok3MenaoDT2/F08iiFD9rrbskFBKW5+VQarKD7JK/oCZ
-TqNGFav4c0JqwmZ2sQomFd2TkuzbqV9UIlKRcF0T6kjsbgNs2d1s/OsNA/+mgxKb8amTD8UmTDGy
-Y5lhcucqZJnSuOl14nypqZoaqsNW2xCaPINStnuWt6yHd6i58mcLlEOzrz5z+kI2sSXFCjEmN1Zn
-uqMLfdb3ic1nobc6HmZP9qBVFCVMLDMNpkGMvQQxahByCp0OLna9XvNRiYuoP1Vzv9s6xiQFlpJI
-qkuNKgPlV5EQ9GooFW5Hd4RcUXSfGenmHmMWOeMRFeNYGkS9y8RsZteEBt8w9DeiQyJ50hBs37vm
-ExH8nYQKE3vwO9D8owrXieqWfo1IhR5kX9tUoqzVegJ5a9KK8GfaZXINFHDk6Y54jzJ0fFfy1tb0
-Nokb+Clsi7n2l9GkLqq+CxnCRelwXQIDAJ3Zo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB
-/wQEAwIBBjAdBgNVHQ4EFgQU587GT/wWZ5b6SqMHwQSny2re2kcwHwYDVR0jBBgwFoAU587GT/wW
-Z5b6SqMHwQSny2re2kcwDQYJKoZIhvcNAQEFBQADggIBAJuYml2+8ygjdsZs93/mQJ7ANtyVDR2t
-FcU22NU57/IeIl6zgrRdu0waypIN30ckHrMk2pGI6YNw3ZPX6bqz3xZaPt7gyPvT/Wwp+BVGoGgm
-zJNSroIBk5DKd8pNSe/iWtkqvTDOTLKBtjDOWU/aWR1qeqRFsIImgYZ29fUQALjuswnoT4cCB64k
-XPBfrAowzIpAoHMEwfuJJPaaHFy3PApnNgUIMbOv2AFoKuB4j3TeuFGkjGwgPaL7s9QJ/XvCgKqT
-bCmYIai7FvOpEl90tYeY8pUm3zTvilORiF0alKM/fCL414i6poyWqD1SNGKfAB5UVUJnxk1Gj7sU
-RT0KlhaOEKGXmdXTMIXM3rRyt7yKPBgpaP3ccQfuJDlq+u2lrDgv+R4QDgZxGhBM/nV+/x5XOULK
-1+EVoVZVWRvRo68R2E7DpSvvkL/A7IITW43WciyTTo9qKd+FPNMN4KIYEsxVL0e3p5sC/kH2iExt
-2qkBR4NkJ2IQgtYSe14DHzSpyZH+r11thie3I6p1GMog57AP14kOpmciY/SDQSsGS7tY1dHXt7kQ
-Y9iJSrSq3RZj9W6+YKH47ejWkE8axsWgKdOnIaj1Wjz3x0miIZpKlVIglnKaZsv30oZDfCK+lvm9
-AahH3eU7QPl1K5srRmSGjR70j/sHd9DqSaIcjVIUpgqT
------END CERTIFICATE-----
-
-certSIGN ROOT CA
-================
------BEGIN CERTIFICATE-----
-MIIDODCCAiCgAwIBAgIGIAYFFnACMA0GCSqGSIb3DQEBBQUAMDsxCzAJBgNVBAYTAlJPMREwDwYD
-VQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBDQTAeFw0wNjA3MDQxNzIwMDRa
-Fw0zMTA3MDQxNzIwMDRaMDsxCzAJBgNVBAYTAlJPMREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UE
-CxMQY2VydFNJR04gUk9PVCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALczuX7I
-JUqOtdu0KBuqV5Do0SLTZLrTk+jUrIZhQGpgV2hUhE28alQCBf/fm5oqrl0Hj0rDKH/v+yv6efHH
-rfAQUySQi2bJqIirr1qjAOm+ukbuW3N7LBeCgV5iLKECZbO9xSsAfsT8AzNXDe3i+s5dRdY4zTW2
-ssHQnIFKquSyAVwdj1+ZxLGt24gh65AIgoDzMKND5pCCrlUoSe1b16kQOA7+j0xbm0bqQfWwCHTD
-0IgztnzXdN/chNFDDnU5oSVAKOp4yw4sLjmdjItuFhwvJoIQ4uNllAoEwF73XVv4EOLQunpL+943
-AAAaWyjj0pxzPjKHmKHJUS/X3qwzs08CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8B
-Af8EBAMCAcYwHQYDVR0OBBYEFOCMm9slSbPxfIbWskKHC9BroNnkMA0GCSqGSIb3DQEBBQUAA4IB
-AQA+0hyJLjX8+HXd5n9liPRyTMks1zJO890ZeUe9jjtbkw9QSSQTaxQGcu8J06Gh40CEyecYMnQ8
-SG4Pn0vU9x7Tk4ZkVJdjclDVVc/6IJMCopvDI5NOFlV2oHB5bc0hH88vLbwZ44gx+FkagQnIl6Z0
-x2DEW8xXjrJ1/RsCCdtZb3KTafcxQdaIOL+Hsr0Wefmq5L6IJd1hJyMctTEHBDa0GpC9oHRxUIlt
-vBTjD4au8as+x6AJzKNI0eDbZOeStc+vckNwi/nDhDwTqn6Sm1dTk/pwwpEOMfmbZ13pljheX7Nz
-TogVZ96edhBiIL5VaZVDADlN9u6wWk5JRFRYX0KD
------END CERTIFICATE-----
-
-CNNIC ROOT
-==========
------BEGIN CERTIFICATE-----
-MIIDVTCCAj2gAwIBAgIESTMAATANBgkqhkiG9w0BAQUFADAyMQswCQYDVQQGEwJDTjEOMAwGA1UE
-ChMFQ05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1QwHhcNMDcwNDE2MDcwOTE0WhcNMjcwNDE2MDcw
-OTE0WjAyMQswCQYDVQQGEwJDTjEOMAwGA1UEChMFQ05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1Qw
-ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDTNfc/c3et6FtzF8LRb+1VvG7q6KR5smzD
-o+/hn7E7SIX1mlwhIhAsxYLO2uOabjfhhyzcuQxauohV3/2q2x8x6gHx3zkBwRP9SFIhxFXf2tiz
-VHa6dLG3fdfA6PZZxU3Iva0fFNrfWEQlMhkqx35+jq44sDB7R3IJMfAw28Mbdim7aXZOV/kbZKKT
-VrdvmW7bCgScEeOAH8tjlBAKqeFkgjH5jCftppkA9nCTGPihNIaj3XrCGHn2emU1z5DrvTOTn1Or
-czvmmzQgLx3vqR1jGqCA2wMv+SYahtKNu6m+UjqHZ0gNv7Sg2Ca+I19zN38m5pIEo3/PIKe38zrK
-y5nLAgMBAAGjczBxMBEGCWCGSAGG+EIBAQQEAwIABzAfBgNVHSMEGDAWgBRl8jGtKvf33VKWCscC
-wQ7vptU7ETAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIB/jAdBgNVHQ4EFgQUZfIxrSr3991S
-lgrHAsEO76bVOxEwDQYJKoZIhvcNAQEFBQADggEBAEs17szkrr/Dbq2flTtLP1se31cpolnKOOK5
-Gv+e5m4y3R6u6jW39ZORTtpC4cMXYFDy0VwmuYK36m3knITnA3kXr5g9lNvHugDnuL8BV8F3RTIM
-O/G0HAiw/VGgod2aHRM2mm23xzy54cXZF/qD1T0VoDy7HgviyJA/qIYM/PmLXoXLT1tLYhFHxUV8
-BS9BsZ4QaRuZluBVeftOhpm4lNqGOGqTo+fLbuXf6iFViZx9fX+Y9QCJ7uOEwFyWtcVG6kbghVW2
-G8kS1sHNzYDzAgE8yGnLRUhj2JTQ7IUOO04RZfSCjKY9ri4ilAnIXOo8gV0WKgOXFlUJ24pBgp5m
-mxE=
------END CERTIFICATE-----
-
-ApplicationCA - Japanese Government
-===================================
------BEGIN CERTIFICATE-----
-MIIDoDCCAoigAwIBAgIBMTANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJKUDEcMBoGA1UEChMT
-SmFwYW5lc2UgR292ZXJubWVudDEWMBQGA1UECxMNQXBwbGljYXRpb25DQTAeFw0wNzEyMTIxNTAw
-MDBaFw0xNzEyMTIxNTAwMDBaMEMxCzAJBgNVBAYTAkpQMRwwGgYDVQQKExNKYXBhbmVzZSBHb3Zl
-cm5tZW50MRYwFAYDVQQLEw1BcHBsaWNhdGlvbkNBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
-CgKCAQEAp23gdE6Hj6UG3mii24aZS2QNcfAKBZuOquHMLtJqO8F6tJdhjYq+xpqcBrSGUeQ3DnR4
-fl+Kf5Sk10cI/VBaVuRorChzoHvpfxiSQE8tnfWuREhzNgaeZCw7NCPbXCbkcXmP1G55IrmTwcrN
-wVbtiGrXoDkhBFcsovW8R0FPXjQilbUfKW1eSvNNcr5BViCH/OlQR9cwFO5cjFW6WY2H/CPek9AE
-jP3vbb3QesmlOmpyM8ZKDQUXKi17safY1vC+9D/qDihtQWEjdnjDuGWk81quzMKq2edY3rZ+nYVu
-nyoKb58DKTCXKB28t89UKU5RMfkntigm/qJj5kEW8DOYRwIDAQABo4GeMIGbMB0GA1UdDgQWBBRU
-WssmP3HMlEYNllPqa0jQk/5CdTAOBgNVHQ8BAf8EBAMCAQYwWQYDVR0RBFIwUKROMEwxCzAJBgNV
-BAYTAkpQMRgwFgYDVQQKDA/ml6XmnKzlm73mlL/lupwxIzAhBgNVBAsMGuOCouODl+ODquOCseOD
-vOOCt+ODp+ODs0NBMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADlqRHZ3ODrs
-o2dGD/mLBqj7apAxzn7s2tGJfHrrLgy9mTLnsCTWw//1sogJhyzjVOGjprIIC8CFqMjSnHH2HZ9g
-/DgzE+Ge3Atf2hZQKXsvcJEPmbo0NI2VdMV+eKlmXb3KIXdCEKxmJj3ekav9FfBv7WxfEPjzFvYD
-io+nEhEMy/0/ecGc/WLuo89UDNErXxc+4z6/wCs+CZv+iKZ+tJIX/COUgb1up8WMwusRRdv4QcmW
-dupwX3kSa+SjB1oF7ydJzyGfikwJcGapJsErEU4z0g781mzSDjJkaP+tBXhfAx2o45CsJOAPQKdL
-rosot4LKGAfmt1t06SAZf7IbiVQ=
------END CERTIFICATE-----
-
-GeoTrust Primary Certification Authority - G3
-=============================================
------BEGIN CERTIFICATE-----
-MIID/jCCAuagAwIBAgIQFaxulBmyeUtB9iepwxgPHzANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UE
-BhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChjKSAyMDA4IEdlb1RydXN0
-IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFy
-eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEczMB4XDTA4MDQwMjAwMDAwMFoXDTM3MTIwMTIz
-NTk1OVowgZgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAo
-YykgMjAwOCBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNVBAMT
-LUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZI
-hvcNAQEBBQADggEPADCCAQoCggEBANziXmJYHTNXOTIz+uvLh4yn1ErdBojqZI4xmKU4kB6Yzy5j
-K/BGvESyiaHAKAxJcCGVn2TAppMSAmUmhsalifD614SgcK9PGpc/BkTVyetyEH3kMSj7HGHmKAdE
-c5IiaacDiGydY8hS2pgn5whMcD60yRLBxWeDXTPzAxHsatBT4tG6NmCUgLthY2xbF37fQJQeqw3C
-IShwiP/WJmxsYAQlTlV+fe+/lEjetx3dcI0FX4ilm/LC7urRQEFtYjgdVgbFA0dRIBn8exALDmKu
-dlW/X3e+PkkBUz2YJQN2JFodtNuJ6nnltrM7P7pMKEF/BqxqjsHQ9gUdfeZChuOl1UcCAwEAAaNC
-MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMR5yo6hTgMdHNxr
-2zFblD4/MH8tMA0GCSqGSIb3DQEBCwUAA4IBAQAtxRPPVoB7eni9n64smefv2t+UXglpp+duaIy9
-cr5HqQ6XErhK8WTTOd8lNNTBzU6B8A8ExCSzNJbGpqow32hhc9f5joWJ7w5elShKKiePEI4ufIbE
-Ap7aDHdlDkQNkv39sxY2+hENHYwOB4lqKVb3cvTdFZx3NWZXqxNT2I7BQMXXExZacse3aQHEerGD
-AWh9jUGhlBjBJVz88P6DAod8DQ3PLghcSkANPuyBYeYk28rgDi0Hsj5W3I31QYUHSJsMC8tJP33s
-t/3LjWeJGqvtux6jAAgIFyqCXDFdRootD4abdNlF+9RAsXqqaC2Gspki4cErx5z481+oghLrGREt
------END CERTIFICATE-----
-
-thawte Primary Root CA - G2
-===========================
------BEGIN CERTIFICATE-----
-MIICiDCCAg2gAwIBAgIQNfwmXNmET8k9Jj1Xm67XVjAKBggqhkjOPQQDAzCBhDELMAkGA1UEBhMC
-VVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjE4MDYGA1UECxMvKGMpIDIwMDcgdGhhd3RlLCBJbmMu
-IC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAiBgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3Qg
-Q0EgLSBHMjAeFw0wNzExMDUwMDAwMDBaFw0zODAxMTgyMzU5NTlaMIGEMQswCQYDVQQGEwJVUzEV
-MBMGA1UEChMMdGhhd3RlLCBJbmMuMTgwNgYDVQQLEy8oYykgMjAwNyB0aGF3dGUsIEluYy4gLSBG
-b3IgYXV0aG9yaXplZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAt
-IEcyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEotWcgnuVnfFSeIf+iha/BebfowJPDQfGAFG6DAJS
-LSKkQjnE/o/qycG+1E3/n3qe4rF8mq2nhglzh9HnmuN6papu+7qzcMBniKI11KOasf2twu8x+qi5
-8/sIxpHR+ymVo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQU
-mtgAMADna3+FGO6Lts6KDPgR4bswCgYIKoZIzj0EAwMDaQAwZgIxAN344FdHW6fmCsO99YCKlzUN
-G4k8VIZ3KMqh9HneteY4sPBlcIx/AlTCv//YoT7ZzwIxAMSNlPzcU9LcnXgWHxUzI1NS41oxXZ3K
-rr0TKUQNJ1uo52icEvdYPy5yAlejj6EULg==
------END CERTIFICATE-----
-
-thawte Primary Root CA - G3
-===========================
------BEGIN CERTIFICATE-----
-MIIEKjCCAxKgAwIBAgIQYAGXt0an6rS0mtZLL/eQ+zANBgkqhkiG9w0BAQsFADCBrjELMAkGA1UE
-BhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2
-aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDggdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhv
-cml6ZWQgdXNlIG9ubHkxJDAiBgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMzAeFw0w
-ODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIGuMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhh
-d3RlLCBJbmMuMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlzaW9uMTgwNgYD
-VQQLEy8oYykgMjAwOCB0aGF3dGUsIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEkMCIG
-A1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAtIEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
-MIIBCgKCAQEAsr8nLPvb2FvdeHsbnndmgcs+vHyu86YnmjSjaDFxODNi5PNxZnmxqWWjpYvVj2At
-P0LMqmsywCPLLEHd5N/8YZzic7IilRFDGF/Eth9XbAoFWCLINkw6fKXRz4aviKdEAhN0cXMKQlkC
-+BsUa0Lfb1+6a4KinVvnSr0eAXLbS3ToO39/fR8EtCab4LRarEc9VbjXsCZSKAExQGbY2SS99irY
-7CFJXJv2eul/VTV+lmuNk5Mny5K76qxAwJ/C+IDPXfRa3M50hqY+bAtTyr2SzhkGcuYMXDhpxwTW
-vGzOW/b3aJzcJRVIiKHpqfiYnODz1TEoYRFsZ5aNOZnLwkUkOQIDAQABo0IwQDAPBgNVHRMBAf8E
-BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUrWyqlGCc7eT/+j4KdCtjA/e2Wb8wDQYJ
-KoZIhvcNAQELBQADggEBABpA2JVlrAmSicY59BDlqQ5mU1143vokkbvnRFHfxhY0Cu9qRFHqKweK
-A3rD6z8KLFIWoCtDuSWQP3CpMyVtRRooOyfPqsMpQhvfO0zAMzRbQYi/aytlryjvsvXDqmbOe1bu
-t8jLZ8HJnBoYuMTDSQPxYA5QzUbF83d597YV4Djbxy8ooAw/dyZ02SUS2jHaGh7cKUGRIjxpp7sC
-8rZcJwOJ9Abqm+RyguOhCcHpABnTPtRwa7pxpqpYrvS76Wy274fMm7v/OeZWYdMKp8RcTGB7BXcm
-er/YB1IsYvdwY9k5vG8cwnncdimvzsUsZAReiDZuMdRAGmI0Nj81Aa6sY6A=
------END CERTIFICATE-----
-
-GeoTrust Primary Certification Authority - G2
-=============================================
------BEGIN CERTIFICATE-----
-MIICrjCCAjWgAwIBAgIQPLL0SAoA4v7rJDteYD7DazAKBggqhkjOPQQDAzCBmDELMAkGA1UEBhMC
-VVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChjKSAyMDA3IEdlb1RydXN0IElu
-Yy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBD
-ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMB4XDTA3MTEwNTAwMDAwMFoXDTM4MDExODIzNTk1
-OVowgZgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykg
-MjAwNyBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNVBAMTLUdl
-b1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjB2MBAGByqGSM49AgEG
-BSuBBAAiA2IABBWx6P0DFUPlrOuHNxFi79KDNlJ9RVcLSo17VDs6bl8VAsBQps8lL33KSLjHUGMc
-KiEIfJo22Av+0SbFWDEwKCXzXV2juLaltJLtbCyf691DiaI8S0iRHVDsJt/WYC69IaNCMEAwDwYD
-VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBVfNVdRVfslsq0DafwBo/q+
-EVXVMAoGCCqGSM49BAMDA2cAMGQCMGSWWaboCd6LuvpaiIjwH5HTRqjySkwCY/tsXzjbLkGTqQ7m
-ndwxHLKgpxgceeHHNgIwOlavmnRs9vuD4DPTCF+hnMJbn0bWtsuRBmOiBuczrD6ogRLQy7rQkgu2
-npaqBA+K
------END CERTIFICATE-----
-
-VeriSign Universal Root Certification Authority
-===============================================
------BEGIN CERTIFICATE-----
-MIIEuTCCA6GgAwIBAgIQQBrEZCGzEyEDDrvkEhrFHTANBgkqhkiG9w0BAQsFADCBvTELMAkGA1UE
-BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBO
-ZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVk
-IHVzZSBvbmx5MTgwNgYDVQQDEy9WZXJpU2lnbiBVbml2ZXJzYWwgUm9vdCBDZXJ0aWZpY2F0aW9u
-IEF1dGhvcml0eTAeFw0wODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIG9MQswCQYDVQQGEwJV
-UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
-cmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
-IG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNhbCBSb290IENlcnRpZmljYXRpb24gQXV0
-aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx2E3XrEBNNti1xWb/1hajCMj
-1mCOkdeQmIN65lgZOIzF9uVkhbSicfvtvbnazU0AtMgtc6XHaXGVHzk8skQHnOgO+k1KxCHfKWGP
-MiJhgsWHH26MfF8WIFFE0XBPV+rjHOPMee5Y2A7Cs0WTwCznmhcrewA3ekEzeOEz4vMQGn+HLL72
-9fdC4uW/h2KJXwBL38Xd5HVEMkE6HnFuacsLdUYI0crSK5XQz/u5QGtkjFdN/BMReYTtXlT2NJ8I
-AfMQJQYXStrxHXpma5hgZqTZ79IugvHw7wnqRMkVauIDbjPTrJ9VAMf2CGqUuV/c4DPxhGD5WycR
-tPwW8rtWaoAljQIDAQABo4GyMIGvMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMG0G
-CCsGAQUFBwEMBGEwX6FdoFswWTBXMFUWCWltYWdlL2dpZjAhMB8wBwYFKw4DAhoEFI/l0xqGrI2O
-a8PPgGrUSBgsexkuMCUWI2h0dHA6Ly9sb2dvLnZlcmlzaWduLmNvbS92c2xvZ28uZ2lmMB0GA1Ud
-DgQWBBS2d/ppSEefUxLVwuoHMnYH0ZcHGTANBgkqhkiG9w0BAQsFAAOCAQEASvj4sAPmLGd75JR3
-Y8xuTPl9Dg3cyLk1uXBPY/ok+myDjEedO2Pzmvl2MpWRsXe8rJq+seQxIcaBlVZaDrHC1LGmWazx
-Y8u4TB1ZkErvkBYoH1quEPuBUDgMbMzxPcP1Y+Oz4yHJJDnp/RVmRvQbEdBNc6N9Rvk97ahfYtTx
-P/jgdFcrGJ2BtMQo2pSXpXDrrB2+BxHw1dvd5Yzw1TKwg+ZX4o+/vqGqvz0dtdQ46tewXDpPaj+P
-wGZsY6rp2aQW9IHRlRQOfc2VNNnSj3BzgXucfr2YYdhFh5iQxeuGMMY1v/D/w1WIg0vvBZIGcfK4
-mJO37M2CYfE45k+XmCpajQ==
------END CERTIFICATE-----
-
-VeriSign Class 3 Public Primary Certification Authority - G4
-============================================================
------BEGIN CERTIFICATE-----
-MIIDhDCCAwqgAwIBAgIQL4D+I4wOIg9IZxIokYesszAKBggqhkjOPQQDAzCByjELMAkGA1UEBhMC
-VVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3
-b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVz
-ZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmlj
-YXRpb24gQXV0aG9yaXR5IC0gRzQwHhcNMDcxMTA1MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCByjEL
-MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBU
-cnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRo
-b3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5
-IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzQwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASnVnp8
-Utpkmw4tXNherJI9/gHmGUo9FANL+mAnINmDiWn6VMaaGF5VKmTeBvaNSjutEDxlPZCIBIngMGGz
-rl0Bp3vefLK+ymVhAIau2o970ImtTR1ZmkGxvEeA3J5iw/mjgbIwga8wDwYDVR0TAQH/BAUwAwEB
-/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEw
-HzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVyaXNpZ24u
-Y29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFLMWkf3upm7ktS5Jj4d4gYDs5bG1MAoGCCqGSM49BAMD
-A2gAMGUCMGYhDBgmYFo4e1ZC4Kf8NoRRkSAsdk1DPcQdhCPQrNZ8NQbOzWm9kA3bbEhCHQ6qQgIx
-AJw9SDkjOVgaFRJZap7v1VmyHVIsmXHNxynfGyphe3HR3vPA5Q06Sqotp9iGKt0uEA==
------END CERTIFICATE-----
-
-NetLock Arany (Class Gold) Főtanúsítvány
-============================================
------BEGIN CERTIFICATE-----
-MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQGEwJIVTERMA8G
-A1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3MDUGA1UECwwuVGFuw7pzw610
-dsOhbnlraWFkw7NrIChDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzKTE1MDMGA1UEAwwsTmV0TG9jayBB
-cmFueSAoQ2xhc3MgR29sZCkgRsWRdGFuw7pzw610dsOhbnkwHhcNMDgxMjExMTUwODIxWhcNMjgx
-MjA2MTUwODIxWjCBpzELMAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MRUwEwYDVQQKDAxO
-ZXRMb2NrIEtmdC4xNzA1BgNVBAsMLlRhbsO6c8OtdHbDoW55a2lhZMOzayAoQ2VydGlmaWNhdGlv
-biBTZXJ2aWNlcykxNTAzBgNVBAMMLE5ldExvY2sgQXJhbnkgKENsYXNzIEdvbGQpIEbFkXRhbsO6
-c8OtdHbDoW55MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxCRec75LbRTDofTjl5Bu
-0jBFHjzuZ9lk4BqKf8owyoPjIMHj9DrTlF8afFttvzBPhCf2nx9JvMaZCpDyD/V/Q4Q3Y1GLeqVw
-/HpYzY6b7cNGbIRwXdrzAZAj/E4wqX7hJ2Pn7WQ8oLjJM2P+FpD/sLj916jAwJRDC7bVWaaeVtAk
-H3B5r9s5VA1lddkVQZQBr17s9o3x/61k/iCa11zr/qYfCGSji3ZVrR47KGAuhyXoqq8fxmRGILdw
-fzzeSNuWU7c5d+Qa4scWhHaXWy+7GRWF+GmF9ZmnqfI0p6m2pgP8b4Y9VHx2BJtr+UBdADTHLpl1
-neWIA6pN+APSQnbAGwIDAKiLo0UwQzASBgNVHRMBAf8ECDAGAQH/AgEEMA4GA1UdDwEB/wQEAwIB
-BjAdBgNVHQ4EFgQUzPpnk/C2uNClwB7zU/2MU9+D15YwDQYJKoZIhvcNAQELBQADggEBAKt/7hwW
-qZw8UQCgwBEIBaeZ5m8BiFRhbvG5GK1Krf6BQCOUL/t1fC8oS2IkgYIL9WHxHG64YTjrgfpioTta
-YtOUZcTh5m2C+C8lcLIhJsFyUR+MLMOEkMNaj7rP9KdlpeuY0fsFskZ1FSNqb4VjMIDw1Z4fKRzC
-bLBQWV2QWzuoDTDPv31/zvGdg73JRm4gpvlhUbohL3u+pRVjodSVh/GeufOJ8z2FuLjbvrW5Kfna
-NwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2XjG4Kvte9nHfRCaexOYNkbQu
-dZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E=
------END CERTIFICATE-----
-
-Staat der Nederlanden Root CA - G2
-==================================
------BEGIN CERTIFICATE-----
-MIIFyjCCA7KgAwIBAgIEAJiWjDANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJOTDEeMBwGA1UE
-CgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSswKQYDVQQDDCJTdGFhdCBkZXIgTmVkZXJsYW5kZW4g
-Um9vdCBDQSAtIEcyMB4XDTA4MDMyNjExMTgxN1oXDTIwMDMyNTExMDMxMFowWjELMAkGA1UEBhMC
-TkwxHjAcBgNVBAoMFVN0YWF0IGRlciBOZWRlcmxhbmRlbjErMCkGA1UEAwwiU3RhYXQgZGVyIE5l
-ZGVybGFuZGVuIFJvb3QgQ0EgLSBHMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMVZ
-5291qj5LnLW4rJ4L5PnZyqtdj7U5EILXr1HgO+EASGrP2uEGQxGZqhQlEq0i6ABtQ8SpuOUfiUtn
-vWFI7/3S4GCI5bkYYCjDdyutsDeqN95kWSpGV+RLufg3fNU254DBtvPUZ5uW6M7XxgpT0GtJlvOj
-CwV3SPcl5XCsMBQgJeN/dVrlSPhOewMHBPqCYYdu8DvEpMfQ9XQ+pV0aCPKbJdL2rAQmPlU6Yiil
-e7Iwr/g3wtG61jj99O9JMDeZJiFIhQGp5Rbn3JBV3w/oOM2ZNyFPXfUib2rFEhZgF1XyZWampzCR
-OME4HYYEhLoaJXhena/MUGDWE4dS7WMfbWV9whUYdMrhfmQpjHLYFhN9C0lK8SgbIHRrxT3dsKpI
-CT0ugpTNGmXZK4iambwYfp/ufWZ8Pr2UuIHOzZgweMFvZ9C+X+Bo7d7iscksWXiSqt8rYGPy5V65
-48r6f1CGPqI0GAwJaCgRHOThuVw+R7oyPxjMW4T182t0xHJ04eOLoEq9jWYv6q012iDTiIJh8BIi
-trzQ1aTsr1SIJSQ8p22xcik/Plemf1WvbibG/ufMQFxRRIEKeN5KzlW/HdXZt1bv8Hb/C3m1r737
-qWmRRpdogBQ2HbN/uymYNqUg+oJgYjOk7Na6B6duxc8UpufWkjTYgfX8HV2qXB72o007uPc5AgMB
-AAGjgZcwgZQwDwYDVR0TAQH/BAUwAwEB/zBSBgNVHSAESzBJMEcGBFUdIAAwPzA9BggrBgEFBQcC
-ARYxaHR0cDovL3d3dy5wa2lvdmVyaGVpZC5ubC9wb2xpY2llcy9yb290LXBvbGljeS1HMjAOBgNV
-HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJFoMocVHYnitfGsNig0jQt8YojrMA0GCSqGSIb3DQEBCwUA
-A4ICAQCoQUpnKpKBglBu4dfYszk78wIVCVBR7y29JHuIhjv5tLySCZa59sCrI2AGeYwRTlHSeYAz
-+51IvuxBQ4EffkdAHOV6CMqqi3WtFMTC6GY8ggen5ieCWxjmD27ZUD6KQhgpxrRW/FYQoAUXvQwj
-f/ST7ZwaUb7dRUG/kSS0H4zpX897IZmflZ85OkYcbPnNe5yQzSipx6lVu6xiNGI1E0sUOlWDuYaN
-kqbG9AclVMwWVxJKgnjIFNkXgiYtXSAfea7+1HAWFpWD2DU5/1JddRwWxRNVz0fMdWVSSt7wsKfk
-CpYL+63C4iWEst3kvX5ZbJvw8NjnyvLplzh+ib7M+zkXYT9y2zqR2GUBGR2tUKRXCnxLvJxxcypF
-URmFzI79R6d0lR2o0a9OF7FpJsKqeFdbxU2n5Z4FF5TKsl+gSRiNNOkmbEgeqmiSBeGCc1qb3Adb
-CG19ndeNIdn8FCCqwkXfP+cAslHkwvgFuXkajDTznlvkN1trSt8sV4pAWja63XVECDdCcAz+3F4h
-oKOKwJCcaNpQ5kUQR3i2TtJlycM33+FCY7BXN0Ute4qcvwXqZVUz9zkQxSgqIXobisQk+T8VyJoV
-IPVVYpbtbZNQvOSqeK3Zywplh6ZmwcSBo3c6WB4L7oOLnR7SUqTMHW+wmG2UMbX4cQrcufx9MmDm
-66+KAQ==
------END CERTIFICATE-----
-
-CA Disig
-========
------BEGIN CERTIFICATE-----
-MIIEDzCCAvegAwIBAgIBATANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQGEwJTSzETMBEGA1UEBxMK
-QnJhdGlzbGF2YTETMBEGA1UEChMKRGlzaWcgYS5zLjERMA8GA1UEAxMIQ0EgRGlzaWcwHhcNMDYw
-MzIyMDEzOTM0WhcNMTYwMzIyMDEzOTM0WjBKMQswCQYDVQQGEwJTSzETMBEGA1UEBxMKQnJhdGlz
-bGF2YTETMBEGA1UEChMKRGlzaWcgYS5zLjERMA8GA1UEAxMIQ0EgRGlzaWcwggEiMA0GCSqGSIb3
-DQEBAQUAA4IBDwAwggEKAoIBAQCS9jHBfYj9mQGp2HvycXXxMcbzdWb6UShGhJd4NLxs/LxFWYgm
-GErENx+hSkS943EE9UQX4j/8SFhvXJ56CbpRNyIjZkMhsDxkovhqFQ4/61HhVKndBpnXmjxUizkD
-Pw/Fzsbrg3ICqB9x8y34dQjbYkzo+s7552oftms1grrijxaSfQUMbEYDXcDtab86wYqg6I7ZuUUo
-hwjstMoVvoLdtUSLLa2GDGhibYVW8qwUYzrG0ZmsNHhWS8+2rT+MitcE5eN4TPWGqvWP+j1scaMt
-ymfraHtuM6kMgiioTGohQBUgDCZbg8KpFhXAJIJdKxatymP2dACw30PEEGBWZ2NFAgMBAAGjgf8w
-gfwwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUjbJJaJ1yCCW5wCf1UJNWSEZx+Y8wDgYDVR0P
-AQH/BAQDAgEGMDYGA1UdEQQvMC2BE2Nhb3BlcmF0b3JAZGlzaWcuc2uGFmh0dHA6Ly93d3cuZGlz
-aWcuc2svY2EwZgYDVR0fBF8wXTAtoCugKYYnaHR0cDovL3d3dy5kaXNpZy5zay9jYS9jcmwvY2Ff
-ZGlzaWcuY3JsMCygKqAohiZodHRwOi8vY2EuZGlzaWcuc2svY2EvY3JsL2NhX2Rpc2lnLmNybDAa
-BgNVHSAEEzARMA8GDSuBHpGT5goAAAABAQEwDQYJKoZIhvcNAQEFBQADggEBAF00dGFMrzvY/59t
-WDYcPQuBDRIrRhCA/ec8J9B6yKm2fnQwM6M6int0wHl5QpNt/7EpFIKrIYwvF/k/Ji/1WcbvgAa3
-mkkp7M5+cTxqEEHA9tOasnxakZzArFvITV734VP/Q3f8nktnbNfzg9Gg4H8l37iYC5oyOGwwoPP/
-CBUz91BKez6jPiCp3C9WgArtQVCwyfTssuMmRAAOb54GvCKWU3BlxFAKRmukLyeBEicTXxChds6K
-ezfqwzlhA5WYOudsiCUI/HloDYd9Yvi0X/vF2Ey9WLw/Q1vUHgFNPGO+I++MzVpQuGhU+QqZMxEA
-4Z7CRneC9VkGjCFMhwnN5ag=
------END CERTIFICATE-----
-
-Juur-SK
-=======
------BEGIN CERTIFICATE-----
-MIIE5jCCA86gAwIBAgIEO45L/DANBgkqhkiG9w0BAQUFADBdMRgwFgYJKoZIhvcNAQkBFglwa2lA
-c2suZWUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKExlBUyBTZXJ0aWZpdHNlZXJpbWlza2Vza3VzMRAw
-DgYDVQQDEwdKdXVyLVNLMB4XDTAxMDgzMDE0MjMwMVoXDTE2MDgyNjE0MjMwMVowXTEYMBYGCSqG
-SIb3DQEJARYJcGtpQHNrLmVlMQswCQYDVQQGEwJFRTEiMCAGA1UEChMZQVMgU2VydGlmaXRzZWVy
-aW1pc2tlc2t1czEQMA4GA1UEAxMHSnV1ci1TSzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
-ggEBAIFxNj4zB9bjMI0TfncyRsvPGbJgMUaXhvSYRqTCZUXP00B841oiqBB4M8yIsdOBSvZiF3tf
-TQou0M+LI+5PAk676w7KvRhj6IAcjeEcjT3g/1tf6mTll+g/mX8MCgkzABpTpyHhOEvWgxutr2TC
-+Rx6jGZITWYfGAriPrsfB2WThbkasLnE+w0R9vXW+RvHLCu3GFH+4Hv2qEivbDtPL+/40UceJlfw
-UR0zlv/vWT3aTdEVNMfqPxZIe5EcgEMPPbgFPtGzlc3Yyg/CQ2fbt5PgIoIuvvVoKIO5wTtpeyDa
-Tpxt4brNj3pssAki14sL2xzVWiZbDcDq5WDQn/413z8CAwEAAaOCAawwggGoMA8GA1UdEwEB/wQF
-MAMBAf8wggEWBgNVHSAEggENMIIBCTCCAQUGCisGAQQBzh8BAQEwgfYwgdAGCCsGAQUFBwICMIHD
-HoHAAFMAZQBlACAAcwBlAHIAdABpAGYAaQBrAGEAYQB0ACAAbwBuACAAdgDkAGwAagBhAHMAdABh
-AHQAdQBkACAAQQBTAC0AaQBzACAAUwBlAHIAdABpAGYAaQB0AHMAZQBlAHIAaQBtAGkAcwBrAGUA
-cwBrAHUAcwAgAGEAbABhAG0ALQBTAEsAIABzAGUAcgB0AGkAZgBpAGsAYQBhAHQAaQBkAGUAIABr
-AGkAbgBuAGkAdABhAG0AaQBzAGUAawBzMCEGCCsGAQUFBwIBFhVodHRwOi8vd3d3LnNrLmVlL2Nw
-cy8wKwYDVR0fBCQwIjAgoB6gHIYaaHR0cDovL3d3dy5zay5lZS9qdXVyL2NybC8wHQYDVR0OBBYE
-FASqekej5ImvGs8KQKcYP2/v6X2+MB8GA1UdIwQYMBaAFASqekej5ImvGs8KQKcYP2/v6X2+MA4G
-A1UdDwEB/wQEAwIB5jANBgkqhkiG9w0BAQUFAAOCAQEAe8EYlFOiCfP+JmeaUOTDBS8rNXiRTHyo
-ERF5TElZrMj3hWVcRrs7EKACr81Ptcw2Kuxd/u+gkcm2k298gFTsxwhwDY77guwqYHhpNjbRxZyL
-abVAyJRld/JXIWY7zoVAtjNjGr95HvxcHdMdkxuLDF2FvZkwMhgJkVLpfKG6/2SSmuz+Ne6ML678
-IIbsSt4beDI3poHSna9aEhbKmVv8b20OxaAehsmR0FyYgl9jDIpaq9iVpszLita/ZEuOyoqysOkh
-Mp6qqIWYNIE5ITuoOlIyPfZrN4YGWhWY3PARZv40ILcD9EEQfTmEeZZyY7aWAuVrua0ZTbvGRNs2
-yyqcjg==
------END CERTIFICATE-----
-
-Hongkong Post Root CA 1
-=======================
------BEGIN CERTIFICATE-----
-MIIDMDCCAhigAwIBAgICA+gwDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoT
-DUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMB4XDTAzMDUx
-NTA1MTMxNFoXDTIzMDUxNTA0NTIyOVowRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoTDUhvbmdrb25n
-IFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMIIBIjANBgkqhkiG9w0BAQEF
-AAOCAQ8AMIIBCgKCAQEArP84tulmAknjorThkPlAj3n54r15/gK97iSSHSL22oVyaf7XPwnU3ZG1
-ApzQjVrhVcNQhrkpJsLj2aDxaQMoIIBFIi1WpztUlVYiWR8o3x8gPW2iNr4joLFutbEnPzlTCeqr
-auh0ssJlXI6/fMN4hM2eFvz1Lk8gKgifd/PFHsSaUmYeSF7jEAaPIpjhZY4bXSNmO7ilMlHIhqqh
-qZ5/dpTCpmy3QfDVyAY45tQM4vM7TG1QjMSDJ8EThFk9nnV0ttgCXjqQesBCNnLsak3c78QA3xMY
-V18meMjWCnl3v/evt3a5pQuEF10Q6m/hq5URX208o1xNg1vysxmKgIsLhwIDAQABoyYwJDASBgNV
-HRMBAf8ECDAGAQH/AgEDMA4GA1UdDwEB/wQEAwIBxjANBgkqhkiG9w0BAQUFAAOCAQEADkbVPK7i
-h9legYsCmEEIjEy82tvuJxuC52pF7BaLT4Wg87JwvVqWuspube5Gi27nKi6Wsxkz67SfqLI37pio
-l7Yutmcn1KZJ/RyTZXaeQi/cImyaT/JaFTmxcdcrUehtHJjA2Sr0oYJ71clBoiMBdDhViw+5Lmei
-IAQ32pwL0xch4I+XeTRvhEgCIDMb5jREn5Fw9IBehEPCKdJsEhTkYY2sEJCehFC78JZvRZ+K88ps
-T/oROhUVRsPNH4NbLUES7VBnQRM9IauUiqpOfMGx+6fWtScvl6tu4B3i0RwsH0Ti/L6RoZz71ilT
-c4afU9hDDl3WY4JxHYB0yvbiAmvZWg==
------END CERTIFICATE-----
-
-SecureSign RootCA11
-===================
------BEGIN CERTIFICATE-----
-MIIDbTCCAlWgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJKUDErMCkGA1UEChMi
-SmFwYW4gQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcywgSW5jLjEcMBoGA1UEAxMTU2VjdXJlU2lnbiBS
-b290Q0ExMTAeFw0wOTA0MDgwNDU2NDdaFw0yOTA0MDgwNDU2NDdaMFgxCzAJBgNVBAYTAkpQMSsw
-KQYDVQQKEyJKYXBhbiBDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzLCBJbmMuMRwwGgYDVQQDExNTZWN1
-cmVTaWduIFJvb3RDQTExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA/XeqpRyQBTvL
-TJszi1oURaTnkBbR31fSIRCkF/3frNYfp+TbfPfs37gD2pRY/V1yfIw/XwFndBWW4wI8h9uuywGO
-wvNmxoVF9ALGOrVisq/6nL+k5tSAMJjzDbaTj6nU2DbysPyKyiyhFTOVMdrAG/LuYpmGYz+/3ZMq
-g6h2uRMft85OQoWPIucuGvKVCbIFtUROd6EgvanyTgp9UK31BQ1FT0Zx/Sg+U/sE2C3XZR1KG/rP
-O7AxmjVuyIsG0wCR8pQIZUyxNAYAeoni8McDWc/V1uinMrPmmECGxc0nEovMe863ETxiYAcjPitA
-bpSACW22s293bzUIUPsCh8U+iQIDAQABo0IwQDAdBgNVHQ4EFgQUW/hNT7KlhtQ60vFjmqC+CfZX
-t94wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAKCh
-OBZmLqdWHyGcBvod7bkixTgm2E5P7KN/ed5GIaGHd48HCJqypMWvDzKYC3xmKbabfSVSSUOrTC4r
-bnpwrxYO4wJs+0LmGJ1F2FXI6Dvd5+H0LgscNFxsWEr7jIhQX5Ucv+2rIrVls4W6ng+4reV6G4pQ
-Oh29Dbx7VFALuUKvVaAYga1lme++5Jy/xIWrQbJUb9wlze144o4MjQlJ3WN7WmmWAiGovVJZ6X01
-y8hSyn+B/tlr0/cR7SXf+Of5pPpyl4RTDaXQMhhRdlkUbA/r7F+AjHVDg8OFmP9Mni0N5HeDk061
-lgeLKBObjBmNQSdJQO7e5iNEOdyhIta6A/I=
------END CERTIFICATE-----
-
-ACEDICOM Root
-=============
------BEGIN CERTIFICATE-----
-MIIFtTCCA52gAwIBAgIIYY3HhjsBggUwDQYJKoZIhvcNAQEFBQAwRDEWMBQGA1UEAwwNQUNFRElD
-T00gUm9vdDEMMAoGA1UECwwDUEtJMQ8wDQYDVQQKDAZFRElDT00xCzAJBgNVBAYTAkVTMB4XDTA4
-MDQxODE2MjQyMloXDTI4MDQxMzE2MjQyMlowRDEWMBQGA1UEAwwNQUNFRElDT00gUm9vdDEMMAoG
-A1UECwwDUEtJMQ8wDQYDVQQKDAZFRElDT00xCzAJBgNVBAYTAkVTMIICIjANBgkqhkiG9w0BAQEF
-AAOCAg8AMIICCgKCAgEA/5KV4WgGdrQsyFhIyv2AVClVYyT/kGWbEHV7w2rbYgIB8hiGtXxaOLHk
-WLn709gtn70yN78sFW2+tfQh0hOR2QetAQXW8713zl9CgQr5auODAKgrLlUTY4HKRxx7XBZXehuD
-YAQ6PmXDzQHe3qTWDLqO3tkE7hdWIpuPY/1NFgu3e3eM+SW10W2ZEi5PGrjm6gSSrj0RuVFCPYew
-MYWveVqc/udOXpJPQ/yrOq2lEiZmueIM15jO1FillUAKt0SdE3QrwqXrIhWYENiLxQSfHY9g5QYb
-m8+5eaA9oiM/Qj9r+hwDezCNzmzAv+YbX79nuIQZ1RXve8uQNjFiybwCq0Zfm/4aaJQ0PZCOrfbk
-HQl/Sog4P75n/TSW9R28MHTLOO7VbKvU/PQAtwBbhTIWdjPp2KOZnQUAqhbm84F9b32qhm2tFXTT
-xKJxqvQUfecyuB+81fFOvW8XAjnXDpVCOscAPukmYxHqC9FK/xidstd7LzrZlvvoHpKuE1XI2Sf2
-3EgbsCTBheN3nZqk8wwRHQ3ItBTutYJXCb8gWH8vIiPYcMt5bMlL8qkqyPyHK9caUPgn6C9D4zq9
-2Fdx/c6mUlv53U3t5fZvie27k5x2IXXwkkwp9y+cAS7+UEaeZAwUswdbxcJzbPEHXEUkFDWug/Fq
-TYl6+rPYLWbwNof1K1MCAwEAAaOBqjCBpzAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKaz
-4SsrSbbXc6GqlPUB53NlTKxQMA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUprPhKytJttdzoaqU
-9QHnc2VMrFAwRAYDVR0gBD0wOzA5BgRVHSAAMDEwLwYIKwYBBQUHAgEWI2h0dHA6Ly9hY2VkaWNv
-bS5lZGljb21ncm91cC5jb20vZG9jMA0GCSqGSIb3DQEBBQUAA4ICAQDOLAtSUWImfQwng4/F9tqg
-aHtPkl7qpHMyEVNEskTLnewPeUKzEKbHDZ3Ltvo/Onzqv4hTGzz3gvoFNTPhNahXwOf9jU8/kzJP
-eGYDdwdY6ZXIfj7QeQCM8htRM5u8lOk6e25SLTKeI6RF+7YuE7CLGLHdztUdp0J/Vb77W7tH1Pwk
-zQSulgUV1qzOMPPKC8W64iLgpq0i5ALudBF/TP94HTXa5gI06xgSYXcGCRZj6hitoocf8seACQl1
-ThCojz2GuHURwCRiipZ7SkXp7FnFvmuD5uHorLUwHv4FB4D54SMNUI8FmP8sX+g7tq3PgbUhh8oI
-KiMnMCArz+2UW6yyetLHKKGKC5tNSixthT8Jcjxn4tncB7rrZXtaAWPWkFtPF2Y9fwsZo5NjEFIq
-nxQWWOLcpfShFosOkYuByptZ+thrkQdlVV9SH686+5DdaaVbnG0OLLb6zqylfDJKZ0DcMDQj3dcE
-I2bw/FWAp/tmGYI1Z2JwOV5vx+qQQEQIHriy1tvuWacNGHk0vFQYXlPKNFHtRQrmjseCNj6nOGOp
-MCwXEGCSn1WHElkQwg9naRHMTh5+Spqtr0CodaxWkHS4oJyleW/c6RrIaQXpuvoDs3zk4E7Czp3o
-tkYNbn5XOmeUwssfnHdKZ05phkOTOPu220+DkdRgfks+KzgHVZhepA==
------END CERTIFICATE-----
-
-Verisign Class 3 Public Primary Certification Authority
-=======================================================
------BEGIN CERTIFICATE-----
-MIICPDCCAaUCEDyRMcsf9tAbDpq40ES/Er4wDQYJKoZIhvcNAQEFBQAwXzELMAkGA1UEBhMCVVMx
-FzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmltYXJ5
-IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2MDEyOTAwMDAwMFoXDTI4MDgwMjIzNTk1OVow
-XzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAz
-IFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUA
-A4GNADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhEBarsAx94
-f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/isI19wKTakyYbnsZogy1Ol
-hec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBABByUqkFFBky
-CEHwxWsKzH4PIRnN5GfcX6kb5sroc50i2JhucwNhkcV8sEVAbkSdjbCxlnRhLQ2pRdKkkirWmnWX
-bj9T/UWZYB2oK0z5XqcJ2HUw19JlYD1n1khVdWk/kfVIC0dpImmClr7JyDiGSnoscxlIaU5rfGW/
-D/xwzoiQ
------END CERTIFICATE-----
-
-Microsec e-Szigno Root CA 2009
-==============================
------BEGIN CERTIFICATE-----
-MIIECjCCAvKgAwIBAgIJAMJ+QwRORz8ZMA0GCSqGSIb3DQEBCwUAMIGCMQswCQYDVQQGEwJIVTER
-MA8GA1UEBwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jv
-c2VjIGUtU3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5o
-dTAeFw0wOTA2MTYxMTMwMThaFw0yOTEyMzAxMTMwMThaMIGCMQswCQYDVQQGEwJIVTERMA8GA1UE
-BwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUt
-U3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5odTCCASIw
-DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOn4j/NjrdqG2KfgQvvPkd6mJviZpWNwrZuuyjNA
-fW2WbqEORO7hE52UQlKavXWFdCyoDh2Tthi3jCyoz/tccbna7P7ofo/kLx2yqHWH2Leh5TvPmUpG
-0IMZfcChEhyVbUr02MelTTMuhTlAdX4UfIASmFDHQWe4oIBhVKZsTh/gnQ4H6cm6M+f+wFUoLAKA
-pxn1ntxVUwOXewdI/5n7N4okxFnMUBBjjqqpGrCEGob5X7uxUG6k0QrM1XF+H6cbfPVTbiJfyyvm
-1HxdrtbCxkzlBQHZ7Vf8wSN5/PrIJIOV87VqUQHQd9bpEqH5GoP7ghu5sJf0dgYzQ0mg/wu1+rUC
-AwEAAaOBgDB+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTLD8bf
-QkPMPcu1SCOhGnqmKrs0aDAfBgNVHSMEGDAWgBTLD8bfQkPMPcu1SCOhGnqmKrs0aDAbBgNVHREE
-FDASgRBpbmZvQGUtc3ppZ25vLmh1MA0GCSqGSIb3DQEBCwUAA4IBAQDJ0Q5eLtXMs3w+y/w9/w0o
-lZMEyL/azXm4Q5DwpL7v8u8hmLzU1F0G9u5C7DBsoKqpyvGvivo/C3NqPuouQH4frlRheesuCDfX
-I/OMn74dseGkddug4lQUsbocKaQY9hK6ohQU4zE1yED/t+AFdlfBHFny+L/k7SViXITwfn4fs775
-tyERzAMBVnCnEJIeGzSBHq2cGsMEPO0CYdYeBvNfOofyK/FFh+U9rNHHV4S9a67c2Pm2G2JwCz02
-yULyMtd6YebS2z3PyKnJm9zbWETXbzivf3jTo60adbocwTZ8jx5tHMN1Rq41Bab2XD0h7lbwyYIi
-LXpUq3DDfSJlgnCW
------END CERTIFICATE-----
-
-E-Guven Kok Elektronik Sertifika Hizmet Saglayicisi
-===================================================
------BEGIN CERTIFICATE-----
-MIIDtjCCAp6gAwIBAgIQRJmNPMADJ72cdpW56tustTANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQG
-EwJUUjEoMCYGA1UEChMfRWxla3Ryb25payBCaWxnaSBHdXZlbmxpZ2kgQS5TLjE8MDoGA1UEAxMz
-ZS1HdXZlbiBLb2sgRWxla3Ryb25payBTZXJ0aWZpa2EgSGl6bWV0IFNhZ2xheWljaXNpMB4XDTA3
-MDEwNDExMzI0OFoXDTE3MDEwNDExMzI0OFowdTELMAkGA1UEBhMCVFIxKDAmBgNVBAoTH0VsZWt0
-cm9uaWsgQmlsZ2kgR3V2ZW5saWdpIEEuUy4xPDA6BgNVBAMTM2UtR3V2ZW4gS29rIEVsZWt0cm9u
-aWsgU2VydGlmaWthIEhpem1ldCBTYWdsYXlpY2lzaTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
-AQoCggEBAMMSIJ6wXgBljU5Gu4Bc6SwGl9XzcslwuedLZYDBS75+PNdUMZTe1RK6UxYC6lhj71vY
-8+0qGqpxSKPcEC1fX+tcS5yWCEIlKBHMilpiAVDV6wlTL/jDj/6z/P2douNffb7tC+Bg62nsM+3Y
-jfsSSYMAyYuXjDtzKjKzEve5TfL0TW3H5tYmNwjy2f1rXKPlSFxYvEK+A1qBuhw1DADT9SN+cTAI
-JjjcJRFHLfO6IxClv7wC90Nex/6wN1CZew+TzuZDLMN+DfIcQ2Zgy2ExR4ejT669VmxMvLz4Bcpk
-9Ok0oSy1c+HCPujIyTQlCFzz7abHlJ+tiEMl1+E5YP6sOVkCAwEAAaNCMEAwDgYDVR0PAQH/BAQD
-AgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFJ/uRLOU1fqRTy7ZVZoEVtstxNulMA0GCSqG
-SIb3DQEBBQUAA4IBAQB/X7lTW2M9dTLn+sR0GstG30ZpHFLPqk/CaOv/gKlR6D1id4k9CnU58W5d
-F4dvaAXBlGzZXd/aslnLpRCKysw5zZ/rTt5S/wzw9JKp8mxTq5vSR6AfdPebmvEvFZ96ZDAYBzwq
-D2fK/A+JYZ1lpTzlvBNbCNvj/+27BrtqBrF6T2XGgv0enIu1De5Iu7i9qgi0+6N8y5/NkHZchpZ4
-Vwpm+Vganf2XKWDeEaaQHBkc7gGWIjQ0LpH5t8Qn0Xvmv/uARFoW5evg1Ao4vOSR49XrXMGs3xtq
-fJ7lddK2l4fbzIcrQzqECK+rPNv3PGYxhrCdU3nt+CPeQuMtgvEP5fqX
------END CERTIFICATE-----
-
-GlobalSign Root CA - R3
-=======================
------BEGIN CERTIFICATE-----
-MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4GA1UECxMXR2xv
-YmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh
-bFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT
-aWduIFJvb3QgQ0EgLSBSMzETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln
-bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWt
-iHL8RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsTgHeMCOFJ
-0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmmKPZpO/bLyCiR5Z2KYVc3
-rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zdQQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjl
-OCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZXriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2
-xmmFghcCAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE
-FI/wS3+oLkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZURUm7
-lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMpjjM5RcOO5LlXbKr8
-EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK6fBdRoyV3XpYKBovHd7NADdBj+1E
-bddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQXmcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18
-YIvDQVETI53O9zJrlAGomecsMx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7r
-kpeDMdmztcpHWD9f
------END CERTIFICATE-----
-
-Autoridad de Certificacion Firmaprofesional CIF A62634068
-=========================================================
------BEGIN CERTIFICATE-----
-MIIGFDCCA/ygAwIBAgIIU+w77vuySF8wDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCRVMxQjBA
-BgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2
-MjYzNDA2ODAeFw0wOTA1MjAwODM4MTVaFw0zMDEyMzEwODM4MTVaMFExCzAJBgNVBAYTAkVTMUIw
-QAYDVQQDDDlBdXRvcmlkYWQgZGUgQ2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBB
-NjI2MzQwNjgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKlmuO6vj78aI14H9M2uDD
-Utd9thDIAl6zQyrET2qyyhxdKJp4ERppWVevtSBC5IsP5t9bpgOSL/UR5GLXMnE42QQMcas9UX4P
-B99jBVzpv5RvwSmCwLTaUbDBPLutN0pcyvFLNg4kq7/DhHf9qFD0sefGL9ItWY16Ck6WaVICqjaY
-7Pz6FIMMNx/Jkjd/14Et5cS54D40/mf0PmbR0/RAz15iNA9wBj4gGFrO93IbJWyTdBSTo3OxDqqH
-ECNZXyAFGUftaI6SEspd/NYrspI8IM/hX68gvqB2f3bl7BqGYTM+53u0P6APjqK5am+5hyZvQWyI
-plD9amML9ZMWGxmPsu2bm8mQ9QEM3xk9Dz44I8kvjwzRAv4bVdZO0I08r0+k8/6vKtMFnXkIoctX
-MbScyJCyZ/QYFpM6/EfY0XiWMR+6KwxfXZmtY4laJCB22N/9q06mIqqdXuYnin1oKaPnirjaEbsX
-LZmdEyRG98Xi2J+Of8ePdG1asuhy9azuJBCtLxTa/y2aRnFHvkLfuwHb9H/TKI8xWVvTyQKmtFLK
-bpf7Q8UIJm+K9Lv9nyiqDdVF8xM6HdjAeI9BZzwelGSuewvF6NkBiDkal4ZkQdU7hwxu+g/GvUgU
-vzlN1J5Bto+WHWOWk9mVBngxaJ43BjuAiUVhOSPHG0SjFeUc+JIwuwIDAQABo4HvMIHsMBIGA1Ud
-EwEB/wQIMAYBAf8CAQEwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRlzeurNR4APn7VdMActHNH
-DhpkLzCBpgYDVR0gBIGeMIGbMIGYBgRVHSAAMIGPMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmZp
-cm1hcHJvZmVzaW9uYWwuY29tL2NwczBcBggrBgEFBQcCAjBQHk4AUABhAHMAZQBvACAAZABlACAA
-bABhACAAQgBvAG4AYQBuAG8AdgBhACAANAA3ACAAQgBhAHIAYwBlAGwAbwBuAGEAIAAwADgAMAAx
-ADcwDQYJKoZIhvcNAQEFBQADggIBABd9oPm03cXF661LJLWhAqvdpYhKsg9VSytXjDvlMd3+xDLx
-51tkljYyGOylMnfX40S2wBEqgLk9am58m9Ot/MPWo+ZkKXzR4Tgegiv/J2Wv+xYVxC5xhOW1//qk
-R71kMrv2JYSiJ0L1ILDCExARzRAVukKQKtJE4ZYm6zFIEv0q2skGz3QeqUvVhyj5eTSSPi5E6PaP
-T481PyWzOdxjKpBrIF/EUhJOlywqrJ2X3kjyo2bbwtKDlaZmp54lD+kLM5FlClrD2VQS3a/DTg4f
-Jl4N3LON7NWBcN7STyQF82xO9UxJZo3R/9ILJUFI/lGExkKvgATP0H5kSeTy36LssUzAKh3ntLFl
-osS88Zj0qnAHY7S42jtM+kAiMFsRpvAFDsYCA0irhpuF3dvd6qJ2gHN99ZwExEWN57kci57q13XR
-crHedUTnQn3iV2t93Jm8PYMo6oCTjcVMZcFwgbg4/EMxsvYDNEeyrPsiBsse3RdHHF9mudMaotoR
-saS8I8nkvof/uZS2+F0gStRf571oe2XyFR7SOqkt6dhrJKyXWERHrVkY8SFlcN7ONGCoQPHzPKTD
-KCOM/iczQ0CgFzzr6juwcqajuUpLXhZI9LK8yIySxZ2frHI2vDSANGupi5LAuBft7HZT9SQBjLMi
-6Et8Vcad+qMUu2WFbm5PEn4KPJ2V
------END CERTIFICATE-----
-
-Izenpe.com
-==========
------BEGIN CERTIFICATE-----
-MIIF8TCCA9mgAwIBAgIQALC3WhZIX7/hy/WL1xnmfTANBgkqhkiG9w0BAQsFADA4MQswCQYDVQQG
-EwJFUzEUMBIGA1UECgwLSVpFTlBFIFMuQS4xEzARBgNVBAMMCkl6ZW5wZS5jb20wHhcNMDcxMjEz
-MTMwODI4WhcNMzcxMjEzMDgyNzI1WjA4MQswCQYDVQQGEwJFUzEUMBIGA1UECgwLSVpFTlBFIFMu
-QS4xEzARBgNVBAMMCkl6ZW5wZS5jb20wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDJ
-03rKDx6sp4boFmVqscIbRTJxldn+EFvMr+eleQGPicPK8lVx93e+d5TzcqQsRNiekpsUOqHnJJAK
-ClaOxdgmlOHZSOEtPtoKct2jmRXagaKH9HtuJneJWK3W6wyyQXpzbm3benhB6QiIEn6HLmYRY2xU
-+zydcsC8Lv/Ct90NduM61/e0aL6i9eOBbsFGb12N4E3GVFWJGjMxCrFXuaOKmMPsOzTFlUFpfnXC
-PCDFYbpRR6AgkJOhkEvzTnyFRVSa0QUmQbC1TR0zvsQDyCV8wXDbO/QJLVQnSKwv4cSsPsjLkkxT
-OTcj7NMB+eAJRE1NZMDhDVqHIrytG6P+JrUV86f8hBnp7KGItERphIPzidF0BqnMC9bC3ieFUCbK
-F7jJeodWLBoBHmy+E60QrLUk9TiRodZL2vG70t5HtfG8gfZZa88ZU+mNFctKy6lvROUbQc/hhqfK
-0GqfvEyNBjNaooXlkDWgYlwWTvDjovoDGrQscbNYLN57C9saD+veIR8GdwYDsMnvmfzAuU8Lhij+
-0rnq49qlw0dpEuDb8PYZi+17cNcC1u2HGCgsBCRMd+RIihrGO5rUD8r6ddIBQFqNeb+Lz0vPqhbB
-leStTIo+F5HUsWLlguWABKQDfo2/2n+iD5dPDNMN+9fR5XJ+HMh3/1uaD7euBUbl8agW7EekFwID
-AQABo4H2MIHzMIGwBgNVHREEgagwgaWBD2luZm9AaXplbnBlLmNvbaSBkTCBjjFHMEUGA1UECgw+
-SVpFTlBFIFMuQS4gLSBDSUYgQTAxMzM3MjYwLVJNZXJjLlZpdG9yaWEtR2FzdGVpeiBUMTA1NSBG
-NjIgUzgxQzBBBgNVBAkMOkF2ZGEgZGVsIE1lZGl0ZXJyYW5lbyBFdG9yYmlkZWEgMTQgLSAwMTAx
-MCBWaXRvcmlhLUdhc3RlaXowDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0O
-BBYEFB0cZQ6o8iV7tJHP5LGx5r1VdGwFMA0GCSqGSIb3DQEBCwUAA4ICAQB4pgwWSp9MiDrAyw6l
-Fn2fuUhfGI8NYjb2zRlrrKvV9pF9rnHzP7MOeIWblaQnIUdCSnxIOvVFfLMMjlF4rJUT3sb9fbga
-kEyrkgPH7UIBzg/YsfqikuFgba56awmqxinuaElnMIAkejEWOVt+8Rwu3WwJrfIxwYJOubv5vr8q
-hT/AQKM6WfxZSzwoJNu0FXWuDYi6LnPAvViH5ULy617uHjAimcs30cQhbIHsvm0m5hzkQiCeR7Cs
-g1lwLDXWrzY0tM07+DKo7+N4ifuNRSzanLh+QBxh5z6ikixL8s36mLYp//Pye6kfLqCTVyvehQP5
-aTfLnnhqBbTFMXiJ7HqnheG5ezzevh55hM6fcA5ZwjUukCox2eRFekGkLhObNA5me0mrZJfQRsN5
-nXJQY6aYWwa9SG3YOYNw6DXwBdGqvOPbyALqfP2C2sJbUjWumDqtujWTI6cfSN01RpiyEGjkpTHC
-ClguGYEQyVB1/OpaFs4R1+7vUIgtYf8/QnMFlEPVjjxOAToZpR9GTnfQXeWBIiGH/pR9hNiTrdZo
-Q0iy2+tzJOeRf1SktoA+naM8THLCV8Sg1Mw4J87VBp6iSNnpn86CcDaTmjvfliHjWbcM2pE38P1Z
-WrOZyGlsQyYBNWNgVYkDOnXYukrZVP/u3oDYLdE41V4tC5h9Pmzb/CaIxw==
------END CERTIFICATE-----
-
-Chambers of Commerce Root - 2008
-================================
------BEGIN CERTIFICATE-----
-MIIHTzCCBTegAwIBAgIJAKPaQn6ksa7aMA0GCSqGSIb3DQEBBQUAMIGuMQswCQYDVQQGEwJFVTFD
-MEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNv
-bS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMu
-QS4xKTAnBgNVBAMTIENoYW1iZXJzIG9mIENvbW1lcmNlIFJvb3QgLSAyMDA4MB4XDTA4MDgwMTEy
-Mjk1MFoXDTM4MDczMTEyMjk1MFowga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNl
-ZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29tL2FkZHJlc3MpMRIwEAYDVQQF
-EwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVyZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJl
-cnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC
-AQCvAMtwNyuAWko6bHiUfaN/Gh/2NdW928sNRHI+JrKQUrpjOyhYb6WzbZSm891kDFX29ufyIiKA
-XuFixrYp4YFs8r/lfTJqVKAyGVn+H4vXPWCGhSRv4xGzdz4gljUha7MI2XAuZPeEklPWDrCQiorj
-h40G072QDuKZoRuGDtqaCrsLYVAGUvGef3bsyw/QHg3PmTA9HMRFEFis1tPo1+XqxQEHd9ZR5gN/
-ikilTWh1uem8nk4ZcfUyS5xtYBkL+8ydddy/Js2Pk3g5eXNeJQ7KXOt3EgfLZEFHcpOrUMPrCXZk
-NNI5t3YRCQ12RcSprj1qr7V9ZS+UWBDsXHyvfuK2GNnQm05aSd+pZgvMPMZ4fKecHePOjlO+Bd5g
-D2vlGts/4+EhySnB8esHnFIbAURRPHsl18TlUlRdJQfKFiC4reRB7noI/plvg6aRArBsNlVq5331
-lubKgdaX8ZSD6e2wsWsSaR6s+12pxZjptFtYer49okQ6Y1nUCyXeG0+95QGezdIp1Z8XGQpvvwyQ
-0wlf2eOKNcx5Wk0ZN5K3xMGtr/R5JJqyAQuxr1yW84Ay+1w9mPGgP0revq+ULtlVmhduYJ1jbLhj
-ya6BXBg14JC7vjxPNyK5fuvPnnchpj04gftI2jE9K+OJ9dC1vX7gUMQSibMjmhAxhduub+84Mxh2
-EQIDAQABo4IBbDCCAWgwEgYDVR0TAQH/BAgwBgEB/wIBDDAdBgNVHQ4EFgQU+SSsD7K1+HnA+mCI
-G8TZTQKeFxkwgeMGA1UdIwSB2zCB2IAU+SSsD7K1+HnA+mCIG8TZTQKeFxmhgbSkgbEwga4xCzAJ
-BgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNlZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNh
-bWVyZmlybWEuY29tL2FkZHJlc3MpMRIwEAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENh
-bWVyZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDiC
-CQCj2kJ+pLGu2jAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUH
-AgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZIhvcNAQEFBQADggIBAJASryI1
-wqM58C7e6bXpeHxIvj99RZJe6dqxGfwWPJ+0W2aeaufDuV2I6A+tzyMP3iU6XsxPpcG1Lawk0lgH
-3qLPaYRgM+gQDROpI9CF5Y57pp49chNyM/WqfcZjHwj0/gF/JM8rLFQJ3uIrbZLGOU8W6jx+ekbU
-RWpGqOt1glanq6B8aBMz9p0w8G8nOSQjKpD9kCk18pPfNKXG9/jvjA9iSnyu0/VU+I22mlaHFoI6
-M6taIgj3grrqLuBHmrS1RaMFO9ncLkVAO+rcf+g769HsJtg1pDDFOqxXnrN2pSB7+R5KBWIBpih1
-YJeSDW4+TTdDDZIVnBgizVGZoCkaPF+KMjNbMMeJL0eYD6MDxvbxrN8y8NmBGuScvfaAFPDRLLmF
-9dijscilIeUcE5fuDr3fKanvNFNb0+RqE4QGtjICxFKuItLcsiFCGtpA8CnJ7AoMXOLQusxI0zcK
-zBIKinmwPQN/aUv0NCB9szTqjktk9T79syNnFQ0EuPAtwQlRPLJsFfClI9eDdOTlLsn+mCdCxqvG
-nrDQWzilm1DefhiYtUU79nm06PcaewaD+9CL2rvHvRirCG88gGtAPxkZumWK5r7VXNM21+9AUiRg
-OGcEMeyP84LG3rlV8zsxkVrctQgVrXYlCg17LofiDKYGvCYQbTed7N14jHyAxfDZd0jQ
------END CERTIFICATE-----
-
-Global Chambersign Root - 2008
-==============================
------BEGIN CERTIFICATE-----
-MIIHSTCCBTGgAwIBAgIJAMnN0+nVfSPOMA0GCSqGSIb3DQEBBQUAMIGsMQswCQYDVQQGEwJFVTFD
-MEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNv
-bS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMu
-QS4xJzAlBgNVBAMTHkdsb2JhbCBDaGFtYmVyc2lnbiBSb290IC0gMjAwODAeFw0wODA4MDExMjMx
-NDBaFw0zODA3MzExMjMxNDBaMIGsMQswCQYDVQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUg
-Y3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJ
-QTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAlBgNVBAMTHkdsb2JhbCBD
-aGFtYmVyc2lnbiBSb290IC0gMjAwODCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMDf
-VtPkOpt2RbQT2//BthmLN0EYlVJH6xedKYiONWwGMi5HYvNJBL99RDaxccy9Wglz1dmFRP+RVyXf
-XjaOcNFccUMd2drvXNL7G706tcuto8xEpw2uIRU/uXpbknXYpBI4iRmKt4DS4jJvVpyR1ogQC7N0
-ZJJ0YPP2zxhPYLIj0Mc7zmFLmY/CDNBAspjcDahOo7kKrmCgrUVSY7pmvWjg+b4aqIG7HkF4ddPB
-/gBVsIdU6CeQNR1MM62X/JcumIS/LMmjv9GYERTtY/jKmIhYF5ntRQOXfjyGHoiMvvKRhI9lNNgA
-TH23MRdaKXoKGCQwoze1eqkBfSbW+Q6OWfH9GzO1KTsXO0G2Id3UwD2ln58fQ1DJu7xsepeY7s2M
-H/ucUa6LcL0nn3HAa6x9kGbo1106DbDVwo3VyJ2dwW3Q0L9R5OP4wzg2rtandeavhENdk5IMagfe
-Ox2YItaswTXbo6Al/3K1dh3ebeksZixShNBFks4c5eUzHdwHU1SjqoI7mjcv3N2gZOnm3b2u/GSF
-HTynyQbehP9r6GsaPMWis0L7iwk+XwhSx2LE1AVxv8Rk5Pihg+g+EpuoHtQ2TS9x9o0o9oOpE9Jh
-wZG7SMA0j0GMS0zbaRL/UJScIINZc+18ofLx/d33SdNDWKBWY8o9PeU1VlnpDsogzCtLkykPAgMB
-AAGjggFqMIIBZjASBgNVHRMBAf8ECDAGAQH/AgEMMB0GA1UdDgQWBBS5CcqcHtvTbDprru1U8VuT
-BjUuXjCB4QYDVR0jBIHZMIHWgBS5CcqcHtvTbDprru1U8VuTBjUuXqGBsqSBrzCBrDELMAkGA1UE
-BhMCRVUxQzBBBgNVBAcTOk1hZHJpZCAoc2VlIGN1cnJlbnQgYWRkcmVzcyBhdCB3d3cuY2FtZXJm
-aXJtYS5jb20vYWRkcmVzcykxEjAQBgNVBAUTCUE4Mjc0MzI4NzEbMBkGA1UEChMSQUMgQ2FtZXJm
-aXJtYSBTLkEuMScwJQYDVQQDEx5HbG9iYWwgQ2hhbWJlcnNpZ24gUm9vdCAtIDIwMDiCCQDJzdPp
-1X0jzjAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUHAgEWHGh0
-dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZIhvcNAQEFBQADggIBAICIf3DekijZBZRG
-/5BXqfEv3xoNa/p8DhxJJHkn2EaqbylZUohwEurdPfWbU1Rv4WCiqAm57OtZfMY18dwY6fFn5a+6
-ReAJ3spED8IXDneRRXozX1+WLGiLwUePmJs9wOzL9dWCkoQ10b42OFZyMVtHLaoXpGNR6woBrX/s
-dZ7LoR/xfxKxueRkf2fWIyr0uDldmOghp+G9PUIadJpwr2hsUF1Jz//7Dl3mLEfXgTpZALVza2Mg
-9jFFCDkO9HB+QHBaP9BrQql0PSgvAm11cpUJjUhjxsYjV5KTXjXBjfkK9yydYhz2rXzdpjEetrHH
-foUm+qRqtdpjMNHvkzeyZi99Bffnt0uYlDXA2TopwZ2yUDMdSqlapskD7+3056huirRXhOukP9Du
-qqqHW2Pok+JrqNS4cnhrG+055F3Lm6qH1U9OAP7Zap88MQ8oAgF9mOinsKJknnn4SPIVqczmyETr
-P3iZ8ntxPjzxmKfFGBI/5rsoM0LpRQp8bfKGeS/Fghl9CYl8slR2iK7ewfPM4W7bMdaTrpmg7yVq
-c5iJWzouE4gev8CSlDQb4ye3ix5vQv/n6TebUB0tovkC7stYWDpxvGjjqsGvHCgfotwjZT+B6q6Z
-09gwzxMNTxXJhLynSC34MCN32EZLeW32jO06f2ARePTpm67VVMB0gNELQp/B
------END CERTIFICATE-----
-
-Go Daddy Root Certificate Authority - G2
-========================================
------BEGIN CERTIFICATE-----
-MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT
-B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoTEUdvRGFkZHkuY29tLCBJbmMu
-MTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5
-MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6
-b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8G
-A1UEAxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI
-hvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKDE6bFIEMBO4Tx5oVJnyfq
-9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD
-+qK+ihVqf94Lw7YZFAXK6sOoBJQ7RnwyDfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutd
-fMh8+7ArU6SSYmlRJQVhGkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMl
-NAJWJwGRtDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEAAaNC
-MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFDqahQcQZyi27/a9
-BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmXWWcDYfF+OwYxdS2hII5PZYe096ac
-vNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r
-5N9ss4UXnT3ZJE95kTXWXwTrgIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYV
-N8Gb5DKj7Tjo2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO
-LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI4uJEvlz36hz1
------END CERTIFICATE-----
-
-Starfield Root Certificate Authority - G2
-=========================================
------BEGIN CERTIFICATE-----
-MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT
-B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s
-b2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVsZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0
-eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAw
-DgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQg
-VGVjaG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZpY2F0ZSBB
-dXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL3twQP89o/8ArFv
-W59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMgnLRJdzIpVv257IzdIvpy3Cdhl+72WoTs
-bhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1HOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNk
-N3mSwOxGXn/hbVNMYq/NHwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7Nf
-ZTD4p7dNdloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0HZbU
-JtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
-AQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0GCSqGSIb3DQEBCwUAA4IBAQARWfol
-TwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjUsHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx
-4mcujJUDJi5DnUox9g61DLu34jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUw
-F5okxBDgBPfg8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/K
-pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1mMpYjn0q7pBZ
-c2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0
------END CERTIFICATE-----
-
-Starfield Services Root Certificate Authority - G2
-==================================================
------BEGIN CERTIFICATE-----
-MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMxEDAOBgNVBAgT
-B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s
-b2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVsZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRl
-IEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNV
-BAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxT
-dGFyZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2VydmljZXMg
-Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
-AQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20pOsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2
-h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm28xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4Pa
-hHQUw2eeBGg6345AWh1KTs9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLP
-LJGmpufehRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk6mFB
-rMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAwDwYDVR0TAQH/BAUw
-AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+qAdcwKziIorhtSpzyEZGDMA0GCSqG
-SIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMIbw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPP
-E95Dz+I0swSdHynVv/heyNXBve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTy
-xQGjhdByPq1zqwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd
-iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn0q23KXB56jza
-YyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCNsSi6
------END CERTIFICATE-----
-
-AffirmTrust Commercial
-======================
------BEGIN CERTIFICATE-----
-MIIDTDCCAjSgAwIBAgIId3cGJyapsXwwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UEBhMCVVMxFDAS
-BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMB4XDTEw
-MDEyOTE0MDYwNloXDTMwMTIzMTE0MDYwNlowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly
-bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMIIBIjANBgkqhkiG9w0BAQEF
-AAOCAQ8AMIIBCgKCAQEA9htPZwcroRX1BiLLHwGy43NFBkRJLLtJJRTWzsO3qyxPxkEylFf6Eqdb
-DuKPHx6GGaeqtS25Xw2Kwq+FNXkyLbscYjfysVtKPcrNcV/pQr6U6Mje+SJIZMblq8Yrba0F8PrV
-C8+a5fBQpIs7R6UjW3p6+DM/uO+Zl+MgwdYoic+U+7lF7eNAFxHUdPALMeIrJmqbTFeurCA+ukV6
-BfO9m2kVrn1OIGPENXY6BwLJN/3HR+7o8XYdcxXyl6S1yHp52UKqK39c/s4mT6NmgTWvRLpUHhww
-MmWd5jyTXlBOeuM61G7MGvv50jeuJCqrVwMiKA1JdX+3KNp1v47j3A55MQIDAQABo0IwQDAdBgNV
-HQ4EFgQUnZPGU4teyq8/nx4P5ZmVvCT2lI8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
-AQYwDQYJKoZIhvcNAQELBQADggEBAFis9AQOzcAN/wr91LoWXym9e2iZWEnStB03TX8nfUYGXUPG
-hi4+c7ImfU+TqbbEKpqrIZcUsd6M06uJFdhrJNTxFq7YpFzUf1GO7RgBsZNjvbz4YYCanrHOQnDi
-qX0GJX0nof5v7LMeJNrjS1UaADs1tDvZ110w/YETifLCBivtZ8SOyUOyXGsViQK8YvxO8rUzqrJv
-0wqiUOP2O+guRMLbZjipM1ZI8W0bM40NjD9gN53Tym1+NH4Nn3J2ixufcv1SNUFFApYvHLKac0kh
-sUlHRUe072o0EclNmsxZt9YCnlpOZbWUrhvfKbAW8b8Angc6F2S1BLUjIZkKlTuXfO8=
------END CERTIFICATE-----
-
-AffirmTrust Networking
-======================
------BEGIN CERTIFICATE-----
-MIIDTDCCAjSgAwIBAgIIfE8EORzUmS0wDQYJKoZIhvcNAQEFBQAwRDELMAkGA1UEBhMCVVMxFDAS
-BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMB4XDTEw
-MDEyOTE0MDgyNFoXDTMwMTIzMTE0MDgyNFowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly
-bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMIIBIjANBgkqhkiG9w0BAQEF
-AAOCAQ8AMIIBCgKCAQEAtITMMxcua5Rsa2FSoOujz3mUTOWUgJnLVWREZY9nZOIG41w3SfYvm4SE
-Hi3yYJ0wTsyEheIszx6e/jarM3c1RNg1lho9Nuh6DtjVR6FqaYvZ/Ls6rnla1fTWcbuakCNrmreI
-dIcMHl+5ni36q1Mr3Lt2PpNMCAiMHqIjHNRqrSK6mQEubWXLviRmVSRLQESxG9fhwoXA3hA/Pe24
-/PHxI1Pcv2WXb9n5QHGNfb2V1M6+oF4nI979ptAmDgAp6zxG8D1gvz9Q0twmQVGeFDdCBKNwV6gb
-h+0t+nvujArjqWaJGctB+d1ENmHP4ndGyH329JKBNv3bNPFyfvMMFr20FQIDAQABo0IwQDAdBgNV
-HQ4EFgQUBx/S55zawm6iQLSwelAQUHTEyL0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
-AQYwDQYJKoZIhvcNAQEFBQADggEBAIlXshZ6qML91tmbmzTCnLQyFE2npN/svqe++EPbkTfOtDIu
-UFUaNU52Q3Eg75N3ThVwLofDwR1t3Mu1J9QsVtFSUzpE0nPIxBsFZVpikpzuQY0x2+c06lkh1QF6
-12S4ZDnNye2v7UsDSKegmQGA3GWjNq5lWUhPgkvIZfFXHeVZLgo/bNjR9eUJtGxUAArgFU2HdW23
-WJZa3W3SAKD0m0i+wzekujbgfIeFlxoVot4uolu9rxj5kFDNcFn4J2dHy8egBzp90SxdbBk6ZrV9
-/ZFvgrG+CJPbFEfxojfHRZ48x3evZKiT3/Zpg4Jg8klCNO1aAFSFHBY2kgxc+qatv9s=
------END CERTIFICATE-----
-
-AffirmTrust Premium
-===================
------BEGIN CERTIFICATE-----
-MIIFRjCCAy6gAwIBAgIIbYwURrGmCu4wDQYJKoZIhvcNAQEMBQAwQTELMAkGA1UEBhMCVVMxFDAS
-BgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVzdCBQcmVtaXVtMB4XDTEwMDEy
-OTE0MTAzNloXDTQwMTIzMTE0MTAzNlowQTELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRy
-dXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVzdCBQcmVtaXVtMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A
-MIICCgKCAgEAxBLfqV/+Qd3d9Z+K4/as4Tx4mrzY8H96oDMq3I0gW64tb+eT2TZwamjPjlGjhVtn
-BKAQJG9dKILBl1fYSCkTtuG+kU3fhQxTGJoeJKJPj/CihQvL9Cl/0qRY7iZNyaqoe5rZ+jjeRFcV
-5fiMyNlI4g0WJx0eyIOFJbe6qlVBzAMiSy2RjYvmia9mx+n/K+k8rNrSs8PhaJyJ+HoAVt70VZVs
-+7pk3WKL3wt3MutizCaam7uqYoNMtAZ6MMgpv+0GTZe5HMQxK9VfvFMSF5yZVylmd2EhMQcuJUmd
-GPLu8ytxjLW6OQdJd/zvLpKQBY0tL3d770O/Nbua2Plzpyzy0FfuKE4mX4+QaAkvuPjcBukumj5R
-p9EixAqnOEhss/n/fauGV+O61oV4d7pD6kh/9ti+I20ev9E2bFhc8e6kGVQa9QPSdubhjL08s9NI
-S+LI+H+SqHZGnEJlPqQewQcDWkYtuJfzt9WyVSHvutxMAJf7FJUnM7/oQ0dG0giZFmA7mn7S5u04
-6uwBHjxIVkkJx0w3AJ6IDsBz4W9m6XJHMD4Q5QsDyZpCAGzFlH5hxIrff4IaC1nEWTJ3s7xgaVY5
-/bQGeyzWZDbZvUjthB9+pSKPKrhC9IK31FOQeE4tGv2Bb0TXOwF0lkLgAOIua+rF7nKsu7/+6qqo
-+Nz2snmKtmcCAwEAAaNCMEAwHQYDVR0OBBYEFJ3AZ6YMItkm9UWrpmVSESfYRaxjMA8GA1UdEwEB
-/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBDAUAA4ICAQCzV00QYk465KzquByv
-MiPIs0laUZx2KI15qldGF9X1Uva3ROgIRL8YhNILgM3FEv0AVQVhh0HctSSePMTYyPtwni94loMg
-Nt58D2kTiKV1NpgIpsbfrM7jWNa3Pt668+s0QNiigfV4Py/VpfzZotReBA4Xrf5B8OWycvpEgjNC
-6C1Y91aMYj+6QrCcDFx+LmUmXFNPALJ4fqENmS2NuB2OosSw/WDQMKSOyARiqcTtNd56l+0OOF6S
-L5Nwpamcb6d9Ex1+xghIsV5n61EIJenmJWtSKZGc0jlzCFfemQa0W50QBuHCAKi4HEoCChTQwUHK
-+4w1IX2COPKpVJEZNZOUbWo6xbLQu4mGk+ibyQ86p3q4ofB4Rvr8Ny/lioTz3/4E2aFooC8k4gmV
-BtWVyuEklut89pMFu+1z6S3RdTnX5yTb2E5fQ4+e0BQ5v1VwSJlXMbSc7kqYA5YwH2AG7hsj/oFg
-IxpHYoWlzBk0gG+zrBrjn/B7SK3VAdlntqlyk+otZrWyuOQ9PLLvTIzq6we/qzWaVYa8GKa1qF60
-g2xraUDTn9zxw2lrueFtCfTxqlB2Cnp9ehehVZZCmTEJ3WARjQUwfuaORtGdFNrHF+QFlozEJLUb
-zxQHskD4o55BhrwE0GuWyCqANP2/7waj3VjFhT0+j/6eKeC2uAloGRwYQw==
------END CERTIFICATE-----
-
-AffirmTrust Premium ECC
-=======================
------BEGIN CERTIFICATE-----
-MIIB/jCCAYWgAwIBAgIIdJclisc/elQwCgYIKoZIzj0EAwMwRTELMAkGA1UEBhMCVVMxFDASBgNV
-BAoMC0FmZmlybVRydXN0MSAwHgYDVQQDDBdBZmZpcm1UcnVzdCBQcmVtaXVtIEVDQzAeFw0xMDAx
-MjkxNDIwMjRaFw00MDEyMzExNDIwMjRaMEUxCzAJBgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1U
-cnVzdDEgMB4GA1UEAwwXQWZmaXJtVHJ1c3QgUHJlbWl1bSBFQ0MwdjAQBgcqhkjOPQIBBgUrgQQA
-IgNiAAQNMF4bFZ0D0KF5Nbc6PJJ6yhUczWLznCZcBz3lVPqj1swS6vQUX+iOGasvLkjmrBhDeKzQ
-N8O9ss0s5kfiGuZjuD0uL3jET9v0D6RoTFVya5UdThhClXjMNzyR4ptlKymjQjBAMB0GA1UdDgQW
-BBSaryl6wBE1NSZRMADDav5A1a7WPDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAK
-BggqhkjOPQQDAwNnADBkAjAXCfOHiFBar8jAQr9HX/VsaobgxCd05DhT1wV/GzTjxi+zygk8N53X
-57hG8f2h4nECMEJZh0PUUd+60wkyWs6Iflc9nF9Ca/UHLbXwgpP5WW+uZPpY5Yse42O+tYHNbwKM
-eQ==
------END CERTIFICATE-----
-
-Certum Trusted Network CA
-=========================
------BEGIN CERTIFICATE-----
-MIIDuzCCAqOgAwIBAgIDBETAMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAlBMMSIwIAYDVQQK
-ExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlv
-biBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBUcnVzdGVkIE5ldHdvcmsgQ0EwHhcNMDgxMDIy
-MTIwNzM3WhcNMjkxMjMxMTIwNzM3WjB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBU
-ZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5
-MSIwIAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMIIBIjANBgkqhkiG9w0BAQEFAAOC
-AQ8AMIIBCgKCAQEA4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/91sts1rHUV+rpDKmYYe2bg+G0jAC
-l/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LMTXPb865Px1bVWqeWifrzq2jUI4ZZJ88J
-J7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVUBBvXQzmtVSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4
-fOQtf/WsX+sWn7Et0brMkUJ3TCXJkDhv2/DM+44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0
-cvW0QM8xAcPs3hEtF10fuFDRXhmnad4HMyjKUJX5p1TLVIZQRan5SQIDAQABo0IwQDAPBgNVHRMB
-Af8EBTADAQH/MB0GA1UdDgQWBBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNVHQ8BAf8EBAMCAQYw
-DQYJKoZIhvcNAQEFBQADggEBAKaorSLOAT2mo/9i0Eidi15ysHhE49wcrwn9I0j6vSrEuVUEtRCj
-jSfeC4Jj0O7eDDd5QVsisrCaQVymcODU0HfLI9MA4GxWL+FpDQ3Zqr8hgVDZBqWo/5U30Kr+4rP1
-mS1FhIrlQgnXdAIv94nYmem8J9RHjboNRhx3zxSkHLmkMcScKHQDNP8zGSal6Q10tz6XxnboJ5aj
-Zt3hrvJBW8qYVoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI
-03YnnZotBqbJ7DnSq9ufmgsnAjUpsUCV5/nonFWIGUbWtzT1fs45mtk48VH3Tyw=
------END CERTIFICATE-----
-
-Certinomis - Autorité Racine
-=============================
------BEGIN CERTIFICATE-----
-MIIFnDCCA4SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJGUjETMBEGA1UEChMK
-Q2VydGlub21pczEXMBUGA1UECxMOMDAwMiA0MzM5OTg5MDMxJjAkBgNVBAMMHUNlcnRpbm9taXMg
-LSBBdXRvcml0w6kgUmFjaW5lMB4XDTA4MDkxNzA4Mjg1OVoXDTI4MDkxNzA4Mjg1OVowYzELMAkG
-A1UEBhMCRlIxEzARBgNVBAoTCkNlcnRpbm9taXMxFzAVBgNVBAsTDjAwMDIgNDMzOTk4OTAzMSYw
-JAYDVQQDDB1DZXJ0aW5vbWlzIC0gQXV0b3JpdMOpIFJhY2luZTCCAiIwDQYJKoZIhvcNAQEBBQAD
-ggIPADCCAgoCggIBAJ2Fn4bT46/HsmtuM+Cet0I0VZ35gb5j2CN2DpdUzZlMGvE5x4jYF1AMnmHa
-wE5V3udauHpOd4cN5bjr+p5eex7Ezyh0x5P1FMYiKAT5kcOrJ3NqDi5N8y4oH3DfVS9O7cdxbwly
-Lu3VMpfQ8Vh30WC8Tl7bmoT2R2FFK/ZQpn9qcSdIhDWerP5pqZ56XjUl+rSnSTV3lqc2W+HN3yNw
-2F1MpQiD8aYkOBOo7C+ooWfHpi2GR+6K/OybDnT0K0kCe5B1jPyZOQE51kqJ5Z52qz6WKDgmi92N
-jMD2AR5vpTESOH2VwnHu7XSu5DaiQ3XV8QCb4uTXzEIDS3h65X27uK4uIJPT5GHfceF2Z5c/tt9q
-c1pkIuVC28+BA5PY9OMQ4HL2AHCs8MF6DwV/zzRpRbWT5BnbUhYjBYkOjUjkJW+zeL9i9Qf6lSTC
-lrLooyPCXQP8w9PlfMl1I9f09bze5N/NgL+RiH2nE7Q5uiy6vdFrzPOlKO1Enn1So2+WLhl+HPNb
-xxaOu2B9d2ZHVIIAEWBsMsGoOBvrbpgT1u449fCfDu/+MYHB0iSVL1N6aaLwD4ZFjliCK0wi1F6g
-530mJ0jfJUaNSih8hp75mxpZuWW/Bd22Ql095gBIgl4g9xGC3srYn+Y3RyYe63j3YcNBZFgCQfna
-4NH4+ej9Uji29YnfAgMBAAGjWzBZMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0G
-A1UdDgQWBBQNjLZh2kS40RR9w759XkjwzspqsDAXBgNVHSAEEDAOMAwGCiqBegFWAgIAAQEwDQYJ
-KoZIhvcNAQEFBQADggIBACQ+YAZ+He86PtvqrxyaLAEL9MW12Ukx9F1BjYkMTv9sov3/4gbIOZ/x
-WqndIlgVqIrTseYyCYIDbNc/CMf4uboAbbnW/FIyXaR/pDGUu7ZMOH8oMDX/nyNTt7buFHAAQCva
-R6s0fl6nVjBhK4tDrP22iCj1a7Y+YEq6QpA0Z43q619FVDsXrIvkxmUP7tCMXWY5zjKn2BCXwH40
-nJ+U8/aGH88bc62UeYdocMMzpXDn2NU4lG9jeeu/Cg4I58UvD0KgKxRA/yHgBcUn4YQRE7rWhh1B
-CxMjidPJC+iKunqjo3M3NYB9Ergzd0A4wPpeMNLytqOx1qKVl4GbUu1pTP+A5FPbVFsDbVRfsbjv
-JL1vnxHDx2TCDyhihWZeGnuyt++uNckZM6i4J9szVb9o4XVIRFb7zdNIu0eJOqxp9YDG5ERQL1TE
-qkPFMTFYvZbF6nVsmnWxTfj3l/+WFvKXTej28xH5On2KOG4Ey+HTRRWqpdEdnV1j6CTmNhTih60b
-WfVEm/vXd3wfAXBioSAaosUaKPQhA+4u2cGA6rnZgtZbdsLLO7XSAPCjDuGtbkD326C00EauFddE
-wk01+dIL8hf2rGbVJLJP0RyZwG71fet0BLj5TXcJ17TPBzAJ8bgAVtkXFhYKK4bfjwEZGuW7gmP/
-vgt2Fl43N+bYdJeimUV5
------END CERTIFICATE-----
-
-Root CA Generalitat Valenciana
-==============================
------BEGIN CERTIFICATE-----
-MIIGizCCBXOgAwIBAgIEO0XlaDANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJFUzEfMB0GA1UE
-ChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UECxMGUEtJR1ZBMScwJQYDVQQDEx5Sb290
-IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmEwHhcNMDEwNzA2MTYyMjQ3WhcNMjEwNzAxMTUyMjQ3
-WjBoMQswCQYDVQQGEwJFUzEfMB0GA1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UE
-CxMGUEtJR1ZBMScwJQYDVQQDEx5Sb290IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmEwggEiMA0G
-CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDGKqtXETcvIorKA3Qdyu0togu8M1JAJke+WmmmO3I2
-F0zo37i7L3bhQEZ0ZQKQUgi0/6iMweDHiVYQOTPvaLRfX9ptI6GJXiKjSgbwJ/BXufjpTjJ3Cj9B
-ZPPrZe52/lSqfR0grvPXdMIKX/UIKFIIzFVd0g/bmoGlu6GzwZTNVOAydTGRGmKy3nXiz0+J2ZGQ
-D0EbtFpKd71ng+CT516nDOeB0/RSrFOyA8dEJvt55cs0YFAQexvba9dHq198aMpunUEDEO5rmXte
-JajCq+TA81yc477OMUxkHl6AovWDfgzWyoxVjr7gvkkHD6MkQXpYHYTqWBLI4bft75PelAgxAgMB
-AAGjggM7MIIDNzAyBggrBgEFBQcBAQQmMCQwIgYIKwYBBQUHMAGGFmh0dHA6Ly9vY3NwLnBraS5n
-dmEuZXMwEgYDVR0TAQH/BAgwBgEB/wIBAjCCAjQGA1UdIASCAiswggInMIICIwYKKwYBBAG/VQIB
-ADCCAhMwggHoBggrBgEFBQcCAjCCAdoeggHWAEEAdQB0AG8AcgBpAGQAYQBkACAAZABlACAAQwBl
-AHIAdABpAGYAaQBjAGEAYwBpAPMAbgAgAFIAYQDtAHoAIABkAGUAIABsAGEAIABHAGUAbgBlAHIA
-YQBsAGkAdABhAHQAIABWAGEAbABlAG4AYwBpAGEAbgBhAC4ADQAKAEwAYQAgAEQAZQBjAGwAYQBy
-AGEAYwBpAPMAbgAgAGQAZQAgAFAAcgDhAGMAdABpAGMAYQBzACAAZABlACAAQwBlAHIAdABpAGYA
-aQBjAGEAYwBpAPMAbgAgAHEAdQBlACAAcgBpAGcAZQAgAGUAbAAgAGYAdQBuAGMAaQBvAG4AYQBt
-AGkAZQBuAHQAbwAgAGQAZQAgAGwAYQAgAHAAcgBlAHMAZQBuAHQAZQAgAEEAdQB0AG8AcgBpAGQA
-YQBkACAAZABlACAAQwBlAHIAdABpAGYAaQBjAGEAYwBpAPMAbgAgAHMAZQAgAGUAbgBjAHUAZQBu
-AHQAcgBhACAAZQBuACAAbABhACAAZABpAHIAZQBjAGMAaQDzAG4AIAB3AGUAYgAgAGgAdAB0AHAA
-OgAvAC8AdwB3AHcALgBwAGsAaQAuAGcAdgBhAC4AZQBzAC8AYwBwAHMwJQYIKwYBBQUHAgEWGWh0
-dHA6Ly93d3cucGtpLmd2YS5lcy9jcHMwHQYDVR0OBBYEFHs100DSHHgZZu90ECjcPk+yeAT8MIGV
-BgNVHSMEgY0wgYqAFHs100DSHHgZZu90ECjcPk+yeAT8oWykajBoMQswCQYDVQQGEwJFUzEfMB0G
-A1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UECxMGUEtJR1ZBMScwJQYDVQQDEx5S
-b290IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmGCBDtF5WgwDQYJKoZIhvcNAQEFBQADggEBACRh
-TvW1yEICKrNcda3FbcrnlD+laJWIwVTAEGmiEi8YPyVQqHxK6sYJ2fR1xkDar1CdPaUWu20xxsdz
-Ckj+IHLtb8zog2EWRpABlUt9jppSCS/2bxzkoXHPjCpaF3ODR00PNvsETUlR4hTJZGH71BTg9J63
-NI8KJr2XXPR5OkowGcytT6CYirQxlyric21+eLj4iIlPsSKRZEv1UN4D2+XFducTZnV+ZfsBn5OH
-iJ35Rld8TWCvmHMTI6QgkYH60GFmuH3Rr9ZvHmw96RH9qfmCIoaZM3Fa6hlXPZHNqcCjbgcTpsnt
-+GijnsNacgmHKNHEc8RzGF9QdRYxn7fofMM=
------END CERTIFICATE-----
-
-A-Trust-nQual-03
-================
------BEGIN CERTIFICATE-----
-MIIDzzCCAregAwIBAgIDAWweMA0GCSqGSIb3DQEBBQUAMIGNMQswCQYDVQQGEwJBVDFIMEYGA1UE
-Cgw/QS1UcnVzdCBHZXMuIGYuIFNpY2hlcmhlaXRzc3lzdGVtZSBpbSBlbGVrdHIuIERhdGVudmVy
-a2VociBHbWJIMRkwFwYDVQQLDBBBLVRydXN0LW5RdWFsLTAzMRkwFwYDVQQDDBBBLVRydXN0LW5R
-dWFsLTAzMB4XDTA1MDgxNzIyMDAwMFoXDTE1MDgxNzIyMDAwMFowgY0xCzAJBgNVBAYTAkFUMUgw
-RgYDVQQKDD9BLVRydXN0IEdlcy4gZi4gU2ljaGVyaGVpdHNzeXN0ZW1lIGltIGVsZWt0ci4gRGF0
-ZW52ZXJrZWhyIEdtYkgxGTAXBgNVBAsMEEEtVHJ1c3QtblF1YWwtMDMxGTAXBgNVBAMMEEEtVHJ1
-c3QtblF1YWwtMDMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtPWFuA/OQO8BBC4SA
-zewqo51ru27CQoT3URThoKgtUaNR8t4j8DRE/5TrzAUjlUC5B3ilJfYKvUWG6Nm9wASOhURh73+n
-yfrBJcyFLGM/BWBzSQXgYHiVEEvc+RFZznF/QJuKqiTfC0Li21a8StKlDJu3Qz7dg9MmEALP6iPE
-SU7l0+m0iKsMrmKS1GWH2WrX9IWf5DMiJaXlyDO6w8dB3F/GaswADm0yqLaHNgBid5seHzTLkDx4
-iHQF63n1k3Flyp3HaxgtPVxO59X4PzF9j4fsCiIvI+n+u33J4PTs63zEsMMtYrWacdaxaujs2e3V
-cuy+VwHOBVWf3tFgiBCzAgMBAAGjNjA0MA8GA1UdEwEB/wQFMAMBAf8wEQYDVR0OBAoECERqlWdV
-eRFPMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAVdRU0VlIXLOThaq/Yy/kgM40
-ozRiPvbY7meIMQQDbwvUB/tOdQ/TLtPAF8fGKOwGDREkDg6lXb+MshOWcdzUzg4NCmgybLlBMRmr
-sQd7TZjTXLDR8KdCoLXEjq/+8T/0709GAHbrAvv5ndJAlseIOrifEXnzgGWovR/TeIGgUUw3tKZd
-JXDRZslo+S4RFGjxVJgIrCaSD96JntT6s3kr0qN51OyLrIdTaEJMUVF0HhsnLuP1Hyl0Te2v9+GS
-mYHovjrHF1D2t8b8m7CKa9aIA5GPBnc6hQLdmNVDeD/GMBWsm2vLV7eJUYs66MmEDNuxUCAKGkq6
-ahq97BvIxYSazQ==
------END CERTIFICATE-----
-
-TWCA Root Certification Authority
-=================================
------BEGIN CERTIFICATE-----
-MIIDezCCAmOgAwIBAgIBATANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJUVzESMBAGA1UECgwJ
-VEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NBIFJvb3QgQ2VydGlmaWNh
-dGlvbiBBdXRob3JpdHkwHhcNMDgwODI4MDcyNDMzWhcNMzAxMjMxMTU1OTU5WjBfMQswCQYDVQQG
-EwJUVzESMBAGA1UECgwJVEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NB
-IFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
-AoIBAQCwfnK4pAOU5qfeCTiRShFAh6d8WWQUe7UREN3+v9XAu1bihSX0NXIP+FPQQeFEAcK0HMMx
-QhZHhTMidrIKbw/lJVBPhYa+v5guEGcevhEFhgWQxFnQfHgQsIBct+HHK3XLfJ+utdGdIzdjp9xC
-oi2SBBtQwXu4PhvJVgSLL1KbralW6cH/ralYhzC2gfeXRfwZVzsrb+RH9JlF/h3x+JejiB03HFyP
-4HYlmlD4oFT/RJB2I9IyxsOrBr/8+7/zrX2SYgJbKdM1o5OaQ2RgXbL6Mv87BK9NQGr5x+PvI/1r
-y+UPizgN7gr8/g+YnzAx3WxSZfmLgb4i4RxYA7qRG4kHAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIB
-BjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqOFsmjd6LWvJPelSDGRjjCDWmujANBgkqhkiG
-9w0BAQUFAAOCAQEAPNV3PdrfibqHDAhUaiBQkr6wQT25JmSDCi/oQMCXKCeCMErJk/9q56YAf4lC
-mtYR5VPOL8zy2gXE/uJQxDqGfczafhAJO5I1KlOy/usrBdlsXebQ79NqZp4VKIV66IIArB6nCWlW
-QtNoURi+VJq/REG6Sb4gumlc7rh3zc5sH62Dlhh9DrUUOYTxKOkto557HnpyWoOzeW/vtPzQCqVY
-T0bf+215WfKEIlKuD8z7fDvnaspHYcN6+NOSBB+4IIThNlQWx0DeO4pz3N/GCUzf7Nr/1FNCocny
-Yh0igzyXxfkZYiesZSLX0zzG5Y6yU8xJzrww/nsOM5D77dIUkR8Hrw==
------END CERTIFICATE-----
-
-Security Communication RootCA2
-==============================
------BEGIN CERTIFICATE-----
-MIIDdzCCAl+gAwIBAgIBADANBgkqhkiG9w0BAQsFADBdMQswCQYDVQQGEwJKUDElMCMGA1UEChMc
-U0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEnMCUGA1UECxMeU2VjdXJpdHkgQ29tbXVuaWNh
-dGlvbiBSb290Q0EyMB4XDTA5MDUyOTA1MDAzOVoXDTI5MDUyOTA1MDAzOVowXTELMAkGA1UEBhMC
-SlAxJTAjBgNVBAoTHFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xJzAlBgNVBAsTHlNlY3Vy
-aXR5IENvbW11bmljYXRpb24gUm9vdENBMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
-ANAVOVKxUrO6xVmCxF1SrjpDZYBLx/KWvNs2l9amZIyoXvDjChz335c9S672XewhtUGrzbl+dp++
-+T42NKA7wfYxEUV0kz1XgMX5iZnK5atq1LXaQZAQwdbWQonCv/Q4EpVMVAX3NuRFg3sUZdbcDE3R
-3n4MqzvEFb46VqZab3ZpUql6ucjrappdUtAtCms1FgkQhNBqyjoGADdH5H5XTz+L62e4iKrFvlNV
-spHEfbmwhRkGeC7bYRr6hfVKkaHnFtWOojnflLhwHyg/i/xAXmODPIMqGplrz95Zajv8bxbXH/1K
-EOtOghY6rCcMU/Gt1SSwawNQwS08Ft1ENCcadfsCAwEAAaNCMEAwHQYDVR0OBBYEFAqFqXdlBZh8
-QIH4D5csOPEK7DzPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEB
-CwUAA4IBAQBMOqNErLlFsceTfsgLCkLfZOoc7llsCLqJX2rKSpWeeo8HxdpFcoJxDjrSzG+ntKEj
-u/Ykn8sX/oymzsLS28yN/HH8AynBbF0zX2S2ZTuJbxh2ePXcokgfGT+Ok+vx+hfuzU7jBBJV1uXk
-3fs+BXziHV7Gp7yXT2g69ekuCkO2r1dcYmh8t/2jioSgrGK+KwmHNPBqAbubKVY8/gA3zyNs8U6q
-tnRGEmyR7jTV7JqR50S+kDFy1UkC9gLl9B/rfNmWVan/7Ir5mUf/NVoCqgTLiluHcSmRvaS0eg29
-mvVXIwAHIRc/SjnRBUkLp7Y3gaVdjKozXoEofKd9J+sAro03
------END CERTIFICATE-----
-
-EC-ACC
-======
------BEGIN CERTIFICATE-----
-MIIFVjCCBD6gAwIBAgIQ7is969Qh3hSoYqwE893EATANBgkqhkiG9w0BAQUFADCB8zELMAkGA1UE
-BhMCRVMxOzA5BgNVBAoTMkFnZW5jaWEgQ2F0YWxhbmEgZGUgQ2VydGlmaWNhY2lvIChOSUYgUS0w
-ODAxMTc2LUkpMSgwJgYDVQQLEx9TZXJ2ZWlzIFB1YmxpY3MgZGUgQ2VydGlmaWNhY2lvMTUwMwYD
-VQQLEyxWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbCAoYykwMzE1MDMGA1UE
-CxMsSmVyYXJxdWlhIEVudGl0YXRzIGRlIENlcnRpZmljYWNpbyBDYXRhbGFuZXMxDzANBgNVBAMT
-BkVDLUFDQzAeFw0wMzAxMDcyMzAwMDBaFw0zMTAxMDcyMjU5NTlaMIHzMQswCQYDVQQGEwJFUzE7
-MDkGA1UEChMyQWdlbmNpYSBDYXRhbGFuYSBkZSBDZXJ0aWZpY2FjaW8gKE5JRiBRLTA4MDExNzYt
-SSkxKDAmBgNVBAsTH1NlcnZlaXMgUHVibGljcyBkZSBDZXJ0aWZpY2FjaW8xNTAzBgNVBAsTLFZl
-Z2V1IGh0dHBzOi8vd3d3LmNhdGNlcnQubmV0L3ZlcmFycmVsIChjKTAzMTUwMwYDVQQLEyxKZXJh
-cnF1aWEgRW50aXRhdHMgZGUgQ2VydGlmaWNhY2lvIENhdGFsYW5lczEPMA0GA1UEAxMGRUMtQUND
-MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsyLHT+KXQpWIR4NA9h0X84NzJB5R85iK
-w5K4/0CQBXCHYMkAqbWUZRkiFRfCQ2xmRJoNBD45b6VLeqpjt4pEndljkYRm4CgPukLjbo73FCeT
-ae6RDqNfDrHrZqJyTxIThmV6PttPB/SnCWDaOkKZx7J/sxaVHMf5NLWUhdWZXqBIoH7nF2W4onW4
-HvPlQn2v7fOKSGRdghST2MDk/7NQcvJ29rNdQlB50JQ+awwAvthrDk4q7D7SzIKiGGUzE3eeml0a
-E9jD2z3Il3rucO2n5nzbcc8tlGLfbdb1OL4/pYUKGbio2Al1QnDE6u/LDsg0qBIimAy4E5S2S+zw
-0JDnJwIDAQABo4HjMIHgMB0GA1UdEQQWMBSBEmVjX2FjY0BjYXRjZXJ0Lm5ldDAPBgNVHRMBAf8E
-BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUoMOLRKo3pUW/l4Ba0fF4opvpXY0wfwYD
-VR0gBHgwdjB0BgsrBgEEAfV4AQMBCjBlMCwGCCsGAQUFBwIBFiBodHRwczovL3d3dy5jYXRjZXJ0
-Lm5ldC92ZXJhcnJlbDA1BggrBgEFBQcCAjApGidWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5l
-dC92ZXJhcnJlbCAwDQYJKoZIhvcNAQEFBQADggEBAKBIW4IB9k1IuDlVNZyAelOZ1Vr/sXE7zDkJ
-lF7W2u++AVtd0x7Y/X1PzaBB4DSTv8vihpw3kpBWHNzrKQXlxJ7HNd+KDM3FIUPpqojlNcAZQmNa
-Al6kSBg6hW/cnbw/nZzBh7h6YQjpdwt/cKt63dmXLGQehb+8dJahw3oS7AwaboMMPOhyRp/7SNVe
-l+axofjk70YllJyJ22k4vuxcDlbHZVHlUIiIv0LVKz3l+bqeLrPK9HOSAgu+TGbrIP65y7WZf+a2
-E/rKS03Z7lNGBjvGTq2TWoF+bCpLagVFjPIhpDGQh2xlnJ2lYJU6Un/10asIbvPuW/mIPX64b24D
-5EI=
------END CERTIFICATE-----
-
-Hellenic Academic and Research Institutions RootCA 2011
-=======================================================
------BEGIN CERTIFICATE-----
-MIIEMTCCAxmgAwIBAgIBADANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UEBhMCR1IxRDBCBgNVBAoT
-O0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9y
-aXR5MUAwPgYDVQQDEzdIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z
-IFJvb3RDQSAyMDExMB4XDTExMTIwNjEzNDk1MloXDTMxMTIwMTEzNDk1MlowgZUxCzAJBgNVBAYT
-AkdSMUQwQgYDVQQKEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z
-IENlcnQuIEF1dGhvcml0eTFAMD4GA1UEAxM3SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNo
-IEluc3RpdHV0aW9ucyBSb290Q0EgMjAxMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
-AKlTAOMupvaO+mDYLZU++CwqVE7NuYRhlFhPjz2L5EPzdYmNUeTDN9KKiE15HrcS3UN4SoqS5tdI
-1Q+kOilENbgH9mgdVc04UfCMJDGFr4PJfel3r+0ae50X+bOdOFAPplp5kYCvN66m0zH7tSYJnTxa
-71HFK9+WXesyHgLacEnsbgzImjeN9/E2YEsmLIKe0HjzDQ9jpFEw4fkrJxIH2Oq9GGKYsFk3fb7u
-8yBRQlqD75O6aRXxYp2fmTmCobd0LovUxQt7L/DICto9eQqakxylKHJzkUOap9FNhYS5qXSPFEDH
-3N6sQWRstBmbAmNtJGSPRLIl6s5ddAxjMlyNh+UCAwEAAaOBiTCBhjAPBgNVHRMBAf8EBTADAQH/
-MAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQUppFC/RNhSiOeCKQp5dgTBCPuQSUwRwYDVR0eBEAwPqA8
-MAWCAy5ncjAFggMuZXUwBoIELmVkdTAGggQub3JnMAWBAy5ncjAFgQMuZXUwBoEELmVkdTAGgQQu
-b3JnMA0GCSqGSIb3DQEBBQUAA4IBAQAf73lB4XtuP7KMhjdCSk4cNx6NZrokgclPEg8hwAOXhiVt
-XdMiKahsog2p6z0GW5k6x8zDmjR/qw7IThzh+uTczQ2+vyT+bOdrwg3IBp5OjWEopmr95fZi6hg8
-TqBTnbI6nOulnJEWtk2C4AwFSKls9cz4y51JtPACpf1wA+2KIaWuE4ZJwzNzvoc7dIsXRSZMFpGD
-/md9zU1jZ/rzAxKWeAaNsWftjj++n08C9bMJL/NMh98qy5V8AcysNnq/onN694/BtZqhFLKPM58N
-7yLcZnuEvUUXBj08yrl3NI/K6s8/MT7jiOOASSXIl7WdmplNsDz4SgCbZN2fOUvRJ9e4
------END CERTIFICATE-----
-
-Actalis Authentication Root CA
-==============================
------BEGIN CERTIFICATE-----
-MIIFuzCCA6OgAwIBAgIIVwoRl0LE48wwDQYJKoZIhvcNAQELBQAwazELMAkGA1UEBhMCSVQxDjAM
-BgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8wMzM1ODUyMDk2NzEnMCUGA1UE
-AwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290IENBMB4XDTExMDkyMjExMjIwMloXDTMwMDky
-MjExMjIwMlowazELMAkGA1UEBhMCSVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlz
-IFMucC5BLi8wMzM1ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290
-IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAp8bEpSmkLO/lGMWwUKNvUTufClrJ
-wkg4CsIcoBh/kbWHuUA/3R1oHwiD1S0eiKD4j1aPbZkCkpAW1V8IbInX4ay8IMKx4INRimlNAJZa
-by/ARH6jDuSRzVju3PvHHkVH3Se5CAGfpiEd9UEtL0z9KK3giq0itFZljoZUj5NDKd45RnijMCO6
-zfB9E1fAXdKDa0hMxKufgFpbOr3JpyI/gCczWw63igxdBzcIy2zSekciRDXFzMwujt0q7bd9Zg1f
-YVEiVRvjRuPjPdA1YprbrxTIW6HMiRvhMCb8oJsfgadHHwTrozmSBp+Z07/T6k9QnBn+locePGX2
-oxgkg4YQ51Q+qDp2JE+BIcXjDwL4k5RHILv+1A7TaLndxHqEguNTVHnd25zS8gebLra8Pu2Fbe8l
-EfKXGkJh90qX6IuxEAf6ZYGyojnP9zz/GPvG8VqLWeICrHuS0E4UT1lF9gxeKF+w6D9Fz8+vm2/7
-hNN3WpVvrJSEnu68wEqPSpP4RCHiMUVhUE4Q2OM1fEwZtN4Fv6MGn8i1zeQf1xcGDXqVdFUNaBr8
-EBtiZJ1t4JWgw5QHVw0U5r0F+7if5t+L4sbnfpb2U8WANFAoWPASUHEXMLrmeGO89LKtmyuy/uE5
-jF66CyCU3nuDuP/jVo23Eek7jPKxwV2dpAtMK9myGPW1n0sCAwEAAaNjMGEwHQYDVR0OBBYEFFLY
-iDrIn3hm7YnzezhwlMkCAjbQMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUUtiIOsifeGbt
-ifN7OHCUyQICNtAwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQALe3KHwGCmSUyI
-WOYdiPcUZEim2FgKDk8TNd81HdTtBjHIgT5q1d07GjLukD0R0i70jsNjLiNmsGe+b7bAEzlgqqI0
-JZN1Ut6nna0Oh4lScWoWPBkdg/iaKWW+9D+a2fDzWochcYBNy+A4mz+7+uAwTc+G02UQGRjRlwKx
-K3JCaKygvU5a2hi/a5iB0P2avl4VSM0RFbnAKVy06Ij3Pjaut2L9HmLecHgQHEhb2rykOLpn7VU+
-Xlff1ANATIGk0k9jpwlCCRT8AKnCgHNPLsBA2RF7SOp6AsDT6ygBJlh0wcBzIm2Tlf05fbsq4/aC
-4yyXX04fkZT6/iyj2HYauE2yOE+b+h1IYHkm4vP9qdCa6HCPSXrW5b0KDtst842/6+OkfcvHlXHo
-2qN8xcL4dJIEG4aspCJTQLas/kx2z/uUMsA1n3Y/buWQbqCmJqK4LL7RK4X9p2jIugErsWx0Hbhz
-lefut8cl8ABMALJ+tguLHPPAUJ4lueAI3jZm/zel0btUZCzJJ7VLkn5l/9Mt4blOvH+kQSGQQXem
-OR/qnuOf0GZvBeyqdn6/axag67XH/JJULysRJyU3eExRarDzzFhdFPFqSBX/wge2sY0PjlxQRrM9
-vwGYT7JZVEc+NHt4bVaTLnPqZih4zR0Uv6CPLy64Lo7yFIrM6bV8+2ydDKXhlg==
------END CERTIFICATE-----
-
-Trustis FPS Root CA
-===================
------BEGIN CERTIFICATE-----
-MIIDZzCCAk+gAwIBAgIQGx+ttiD5JNM2a/fH8YygWTANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQG
-EwJHQjEYMBYGA1UEChMPVHJ1c3RpcyBMaW1pdGVkMRwwGgYDVQQLExNUcnVzdGlzIEZQUyBSb290
-IENBMB4XDTAzMTIyMzEyMTQwNloXDTI0MDEyMTExMzY1NFowRTELMAkGA1UEBhMCR0IxGDAWBgNV
-BAoTD1RydXN0aXMgTGltaXRlZDEcMBoGA1UECxMTVHJ1c3RpcyBGUFMgUm9vdCBDQTCCASIwDQYJ
-KoZIhvcNAQEBBQADggEPADCCAQoCggEBAMVQe547NdDfxIzNjpvto8A2mfRC6qc+gIMPpqdZh8mQ
-RUN+AOqGeSoDvT03mYlmt+WKVoaTnGhLaASMk5MCPjDSNzoiYYkchU59j9WvezX2fihHiTHcDnlk
-H5nSW7r+f2C/revnPDgpai/lkQtV/+xvWNUtyd5MZnGPDNcE2gfmHhjjvSkCqPoc4Vu5g6hBSLwa
-cY3nYuUtsuvffM/bq1rKMfFMIvMFE/eC+XN5DL7XSxzA0RU8k0Fk0ea+IxciAIleH2ulrG6nS4zt
-o3Lmr2NNL4XSFDWaLk6M6jKYKIahkQlBOrTh4/L68MkKokHdqeMDx4gVOxzUGpTXn2RZEm0CAwEA
-AaNTMFEwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBS6+nEleYtXQSUhhgtx67JkDoshZzAd
-BgNVHQ4EFgQUuvpxJXmLV0ElIYYLceuyZA6LIWcwDQYJKoZIhvcNAQEFBQADggEBAH5Y//01GX2c
-GE+esCu8jowU/yyg2kdbw++BLa8F6nRIW/M+TgfHbcWzk88iNVy2P3UnXwmWzaD+vkAMXBJV+JOC
-yinpXj9WV4s4NvdFGkwozZ5BuO1WTISkQMi4sKUraXAEasP41BIy+Q7DsdwyhEQsb8tGD+pmQQ9P
-8Vilpg0ND2HepZ5dfWWhPBfnqFVO76DH7cZEf1T1o+CP8HxVIo8ptoGj4W1OLBuAZ+ytIJ8MYmHV
-l/9D7S3B2l0pKoU/rGXuhg8FjZBf3+6f9L/uHfuY5H+QK4R4EA5sSVPvFVtlRkpdr7r7OnIdzfYl
-iB6XzCGcKQENZetX2fNXlrtIzYE=
------END CERTIFICATE-----
-
-StartCom Certification Authority
-================================
------BEGIN CERTIFICATE-----
-MIIHhzCCBW+gAwIBAgIBLTANBgkqhkiG9w0BAQsFADB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMN
-U3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmlu
-ZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0
-NjM3WhcNMzYwOTE3MTk0NjM2WjB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRk
-LjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMg
-U3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw
-ggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZkpMyONvg45iPwbm2xPN1y
-o4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rfOQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/
-Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/CJi/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/d
-eMotHweXMAEtcnn6RtYTKqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt
-2PZE4XNiHzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMMAv+Z
-6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w+2OqqGwaVLRcJXrJ
-osmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/
-untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVc
-UjyJthkqcwEKDwOzEmDyei+B26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT
-37uMdBNSSwIDAQABo4ICEDCCAgwwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYD
-VR0OBBYEFE4L7xqkQFulF2mHMMo0aEPQQa7yMB8GA1UdIwQYMBaAFE4L7xqkQFulF2mHMMo0aEPQ
-Qa7yMIIBWgYDVR0gBIIBUTCCAU0wggFJBgsrBgEEAYG1NwEBATCCATgwLgYIKwYBBQUHAgEWImh0
-dHA6Ly93d3cuc3RhcnRzc2wuY29tL3BvbGljeS5wZGYwNAYIKwYBBQUHAgEWKGh0dHA6Ly93d3cu
-c3RhcnRzc2wuY29tL2ludGVybWVkaWF0ZS5wZGYwgc8GCCsGAQUFBwICMIHCMCcWIFN0YXJ0IENv
-bW1lcmNpYWwgKFN0YXJ0Q29tKSBMdGQuMAMCAQEagZZMaW1pdGVkIExpYWJpbGl0eSwgcmVhZCB0
-aGUgc2VjdGlvbiAqTGVnYWwgTGltaXRhdGlvbnMqIG9mIHRoZSBTdGFydENvbSBDZXJ0aWZpY2F0
-aW9uIEF1dGhvcml0eSBQb2xpY3kgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuc3RhcnRzc2wuY29t
-L3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilTdGFydENvbSBG
-cmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQsFAAOCAgEAjo/n3JR5
-fPGFf59Jb2vKXfuM/gTFwWLRfUKKvFO3lANmMD+x5wqnUCBVJX92ehQN6wQOQOY+2IirByeDqXWm
-N3PH/UvSTa0XQMhGvjt/UfzDtgUx3M2FIk5xt/JxXrAaxrqTi3iSSoX4eA+D/i+tLPfkpLst0OcN
-Org+zvZ49q5HJMqjNTbOx8aHmNrs++myziebiMMEofYLWWivydsQD032ZGNcpRJvkrKTlMeIFw6T
-tn5ii5B/q06f/ON1FE8qMt9bDeD1e5MNq6HPh+GlBEXoPBKlCcWw0bdT82AUuoVpaiF8H3VhFyAX
-e2w7QSlc4axa0c2Mm+tgHRns9+Ww2vl5GKVFP0lDV9LdJNUso/2RjSe15esUBppMeyG7Oq0wBhjA
-2MFrLH9ZXF2RsXAiV+uKa0hK1Q8p7MZAwC+ITGgBF3f0JBlPvfrhsiAhS90a2Cl9qrjeVOwhVYBs
-HvUwyKMQ5bLmKhQxw4UtjJixhlpPiVktucf3HMiKf8CdBUrmQk9io20ppB+Fq9vlgcitKj1MXVuE
-JnHEhV5xJMqlG2zYYdMa4FTbzrqpMrUi9nNBCV24F10OD5mQ1kfabwo6YigUZ4LZ8dCAWZvLMdib
-D4x3TrVoivJs9iQOLWxwxXPR3hTQcY+203sC9uO41Alua551hDnmfyWl8kgAwKQB2j8=
------END CERTIFICATE-----
-
-StartCom Certification Authority G2
-===================================
------BEGIN CERTIFICATE-----
-MIIFYzCCA0ugAwIBAgIBOzANBgkqhkiG9w0BAQsFADBTMQswCQYDVQQGEwJJTDEWMBQGA1UEChMN
-U3RhcnRDb20gTHRkLjEsMCoGA1UEAxMjU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
-RzIwHhcNMTAwMTAxMDEwMDAxWhcNMzkxMjMxMjM1OTAxWjBTMQswCQYDVQQGEwJJTDEWMBQGA1UE
-ChMNU3RhcnRDb20gTHRkLjEsMCoGA1UEAxMjU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3Jp
-dHkgRzIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2iTZbB7cgNr2Cu+EWIAOVeq8O
-o1XJJZlKxdBWQYeQTSFgpBSHO839sj60ZwNq7eEPS8CRhXBF4EKe3ikj1AENoBB5uNsDvfOpL9HG
-4A/LnooUCri99lZi8cVytjIl2bLzvWXFDSxu1ZJvGIsAQRSCb0AgJnooD/Uefyf3lLE3PbfHkffi
-Aez9lInhzG7TNtYKGXmu1zSCZf98Qru23QumNK9LYP5/Q0kGi4xDuFby2X8hQxfqp0iVAXV16iul
-Q5XqFYSdCI0mblWbq9zSOdIxHWDirMxWRST1HFSr7obdljKF+ExP6JV2tgXdNiNnvP8V4so75qbs
-O+wmETRIjfaAKxojAuuKHDp2KntWFhxyKrOq42ClAJ8Em+JvHhRYW6Vsi1g8w7pOOlz34ZYrPu8H
-vKTlXcxNnw3h3Kq74W4a7I/htkxNeXJdFzULHdfBR9qWJODQcqhaX2YtENwvKhOuJv4KHBnM0D4L
-nMgJLvlblnpHnOl68wVQdJVznjAJ85eCXuaPOQgeWeU1FEIT/wCc976qUM/iUUjXuG+v+E5+M5iS
-FGI6dWPPe/regjupuznixL0sAA7IF6wT700ljtizkC+p2il9Ha90OrInwMEePnWjFqmveiJdnxMa
-z6eg6+OGCtP95paV1yPIN93EfKo2rJgaErHgTuixO/XWb/Ew1wIDAQABo0IwQDAPBgNVHRMBAf8E
-BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUS8W0QGutHLOlHGVuRjaJhwUMDrYwDQYJ
-KoZIhvcNAQELBQADggIBAHNXPyzVlTJ+N9uWkusZXn5T50HsEbZH77Xe7XRcxfGOSeD8bpkTzZ+K
-2s06Ctg6Wgk/XzTQLwPSZh0avZyQN8gMjgdalEVGKua+etqhqaRpEpKwfTbURIfXUfEpY9Z1zRbk
-J4kd+MIySP3bmdCPX1R0zKxnNBFi2QwKN4fRoxdIjtIXHfbX/dtl6/2o1PXWT6RbdejF0mCy2wl+
-JYt7ulKSnj7oxXehPOBKc2thz4bcQ///If4jXSRK9dNtD2IEBVeC2m6kMyV5Sy5UGYvMLD0w6dEG
-/+gyRr61M3Z3qAFdlsHB1b6uJcDJHgoJIIihDsnzb02CVAAgp9KP5DlUFy6NHrgbuxu9mk47EDTc
-nIhT76IxW1hPkWLIwpqazRVdOKnWvvgTtZ8SafJQYqz7Fzf07rh1Z2AQ+4NQ+US1dZxAF7L+/Xld
-blhYXzD8AK6vM8EOTmy6p6ahfzLbOOCxchcKK5HsamMm7YnUeMx0HgX4a/6ManY5Ka5lIxKVCCIc
-l85bBu4M4ru8H0ST9tg4RQUh7eStqxK2A6RCLi3ECToDZ2mEmuFZkIoohdVddLHRDiBYmxOlsGOm
-7XtH/UVVMKTumtTm4ofvmMkyghEpIrwACjFeLQ/Ajulrso8uBtjRkcfGEvRM/TAXw8HaOFvjqerm
-obp573PYtlNXLfbQ4ddI
------END CERTIFICATE-----
-
-Buypass Class 2 Root CA
-=======================
------BEGIN CERTIFICATE-----
-MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU
-QnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3MgQ2xhc3MgMiBSb290IENBMB4X
-DTEwMTAyNjA4MzgwM1oXDTQwMTAyNjA4MzgwM1owTjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1
-eXBhc3MgQVMtOTgzMTYzMzI3MSAwHgYDVQQDDBdCdXlwYXNzIENsYXNzIDIgUm9vdCBDQTCCAiIw
-DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANfHXvfBB9R3+0Mh9PT1aeTuMgHbo4Yf5FkNuud1
-g1Lr6hxhFUi7HQfKjK6w3Jad6sNgkoaCKHOcVgb/S2TwDCo3SbXlzwx87vFKu3MwZfPVL4O2fuPn
-9Z6rYPnT8Z2SdIrkHJasW4DptfQxh6NR/Md+oW+OU3fUl8FVM5I+GC911K2GScuVr1QGbNgGE41b
-/+EmGVnAJLqBcXmQRFBoJJRfuLMR8SlBYaNByyM21cHxMlAQTn/0hpPshNOOvEu/XAFOBz3cFIqU
-CqTqc/sLUegTBxj6DvEr0VQVfTzh97QZQmdiXnfgolXsttlpF9U6r0TtSsWe5HonfOV116rLJeff
-awrbD02TTqigzXsu8lkBarcNuAeBfos4GzjmCleZPe4h6KP1DBbdi+w0jpwqHAAVF41og9JwnxgI
-zRFo1clrUs3ERo/ctfPYV3Me6ZQ5BL/T3jjetFPsaRyifsSP5BtwrfKi+fv3FmRmaZ9JUaLiFRhn
-Bkp/1Wy1TbMz4GHrXb7pmA8y1x1LPC5aAVKRCfLf6o3YBkBjqhHk/sM3nhRSP/TizPJhk9H9Z2vX
-Uq6/aKtAQ6BXNVN48FP4YUIHZMbXb5tMOA1jrGKvNouicwoN9SG9dKpN6nIDSdvHXx1iY8f93ZHs
-M+71bbRuMGjeyNYmsHVee7QHIJihdjK4TWxPAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYD
-VR0OBBYEFMmAd+BikoL1RpzzuvdMw964o605MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsF
-AAOCAgEAU18h9bqwOlI5LJKwbADJ784g7wbylp7ppHR/ehb8t/W2+xUbP6umwHJdELFx7rxP462s
-A20ucS6vxOOto70MEae0/0qyexAQH6dXQbLArvQsWdZHEIjzIVEpMMpghq9Gqx3tOluwlN5E40EI
-osHsHdb9T7bWR9AUC8rmyrV7d35BH16Dx7aMOZawP5aBQW9gkOLo+fsicdl9sz1Gv7SEr5AcD48S
-aq/v7h56rgJKihcrdv6sVIkkLE8/trKnToyokZf7KcZ7XC25y2a2t6hbElGFtQl+Ynhw/qlqYLYd
-DnkM/crqJIByw5c/8nerQyIKx+u2DISCLIBrQYoIwOula9+ZEsuK1V6ADJHgJgg2SMX6OBE1/yWD
-LfJ6v9r9jv6ly0UsH8SIU653DtmadsWOLB2jutXsMq7Aqqz30XpN69QH4kj3Io6wpJ9qzo6ysmD0
-oyLQI+uUWnpp3Q+/QFesa1lQ2aOZ4W7+jQF5JyMV3pKdewlNWudLSDBaGOYKbeaP4NK75t98biGC
-wWg5TbSYWGZizEqQXsP6JwSxeRV0mcy+rSDeJmAc61ZRpqPq5KM/p/9h3PFaTWwyI0PurKju7koS
-CTxdccK+efrCh2gdC/1cacwG0Jp9VJkqyTkaGa9LKkPzY11aWOIv4x3kqdbQCtCev9eBCfHJxyYN
-rJgWVqA=
------END CERTIFICATE-----
-
-Buypass Class 3 Root CA
-=======================
------BEGIN CERTIFICATE-----
-MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU
-QnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3MgQ2xhc3MgMyBSb290IENBMB4X
-DTEwMTAyNjA4Mjg1OFoXDTQwMTAyNjA4Mjg1OFowTjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1
-eXBhc3MgQVMtOTgzMTYzMzI3MSAwHgYDVQQDDBdCdXlwYXNzIENsYXNzIDMgUm9vdCBDQTCCAiIw
-DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKXaCpUWUOOV8l6ddjEGMnqb8RB2uACatVI2zSRH
-sJ8YZLya9vrVediQYkwiL944PdbgqOkcLNt4EemOaFEVcsfzM4fkoF0LXOBXByow9c3EN3coTRiR
-5r/VUv1xLXA+58bEiuPwKAv0dpihi4dVsjoT/Lc+JzeOIuOoTyrvYLs9tznDDgFHmV0ST9tD+leh
-7fmdvhFHJlsTmKtdFoqwNxxXnUX/iJY2v7vKB3tvh2PX0DJq1l1sDPGzbjniazEuOQAnFN44wOwZ
-ZoYS6J1yFhNkUsepNxz9gjDthBgd9K5c/3ATAOux9TN6S9ZV+AWNS2mw9bMoNlwUxFFzTWsL8TQH
-2xc519woe2v1n/MuwU8XKhDzzMro6/1rqy6any2CbgTUUgGTLT2G/H783+9CHaZr77kgxve9oKeV
-/afmiSTYzIw0bOIjL9kSGiG5VZFvC5F5GQytQIgLcOJ60g7YaEi7ghM5EFjp2CoHxhLbWNvSO1UQ
-RwUVZ2J+GGOmRj8JDlQyXr8NYnon74Do29lLBlo3WiXQCBJ31G8JUJc9yB3D34xFMFbG02SrZvPA
-Xpacw8Tvw3xrizp5f7NJzz3iiZ+gMEuFuZyUJHmPfWupRWgPK9Dx2hzLabjKSWJtyNBjYt1gD1iq
-j6G8BaVmos8bdrKEZLFMOVLAMLrwjEsCsLa3AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYD
-VR0OBBYEFEe4zf/lb+74suwvTg75JbCOPGvDMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsF
-AAOCAgEAACAjQTUEkMJAYmDv4jVM1z+s4jSQuKFvdvoWFqRINyzpkMLyPPgKn9iB5btb2iUspKdV
-cSQy9sgL8rxq+JOssgfCX5/bzMiKqr5qb+FJEMwx14C7u8jYog5kV+qi9cKpMRXSIGrs/CIBKM+G
-uIAeqcwRpTzyFrNHnfzSgCHEy9BHcEGhyoMZCCxt8l13nIoUE9Q2HJLw5QY33KbmkJs4j1xrG0aG
-Q0JfPgEHU1RdZX33inOhmlRaHylDFCfChQ+1iHsaO5S3HWCntZznKWlXWpuTekMwGwPXYshApqr8
-ZORK15FTAaggiG6cX0S5y2CBNOxv033aSF/rtJC8LakcC6wc1aJoIIAE1vyxjy+7SjENSoYc6+I2
-KSb12tjE8nVhz36udmNKekBlk4f4HoCMhuWG1o8O/FMsYOgWYRqiPkN7zTlgVGr18okmAWiDSKIz
-6MkEkbIRNBE+6tBDGR8Dk5AM/1E9V/RBbuHLoL7ryWPNbczk+DaqaJ3tvV2XcEQNtg413OEMXbug
-UZTLfhbrES+jkkXITHHZvMmZUldGL1DPvTVp9D0VzgalLA8+9oG6lLvDu79leNKGef9JOxqDDPDe
-eOzI8k1MGt6CKfjBWtrt7uYnXuhF0J0cUahoq0Tj0Itq4/g7u9xN12TyUb7mqqta6THuBrxzvxNi
-Cp/HuZc=
------END CERTIFICATE-----
-
-T-TeleSec GlobalRoot Class 3
-============================
------BEGIN CERTIFICATE-----
-MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoM
-IlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBU
-cnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwHhcNMDgx
-MDAxMTAyOTU2WhcNMzMxMDAxMjM1OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lz
-dGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBD
-ZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwggEiMA0GCSqGSIb3
-DQEBAQUAA4IBDwAwggEKAoIBAQC9dZPwYiJvJK7genasfb3ZJNW4t/zN8ELg63iIVl6bmlQdTQyK
-9tPPcPRStdiTBONGhnFBSivwKixVA9ZIw+A5OO3yXDw/RLyTPWGrTs0NvvAgJ1gORH8EGoel15YU
-NpDQSXuhdfsaa3Ox+M6pCSzyU9XDFES4hqX2iys52qMzVNn6chr3IhUciJFrf2blw2qAsCTz34ZF
-iP0Zf3WHHx+xGwpzJFu5ZeAsVMhg02YXP+HMVDNzkQI6pn97djmiH5a2OK61yJN0HZ65tOVgnS9W
-0eDrXltMEnAMbEQgqxHY9Bn20pxSN+f6tsIxO0rUFJmtxxr1XV/6B7h8DR/Wgx6zAgMBAAGjQjBA
-MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS1A/d2O2GCahKqGFPr
-AyGUv/7OyjANBgkqhkiG9w0BAQsFAAOCAQEAVj3vlNW92nOyWL6ukK2YJ5f+AbGwUgC4TeQbIXQb
-fsDuXmkqJa9c1h3a0nnJ85cp4IaH3gRZD/FZ1GSFS5mvJQQeyUapl96Cshtwn5z2r3Ex3XsFpSzT
-ucpH9sry9uetuUg/vBa3wW306gmv7PO15wWeph6KU1HWk4HMdJP2udqmJQV0eVp+QD6CSyYRMG7h
-P0HHRwA11fXT91Q+gT3aSWqas+8QPebrb9HIIkfLzM8BMZLZGOMivgkeGj5asuRrDFR6fUNOuIml
-e9eiPZaGzPImNC1qkp2aGtAw4l1OBLBfiyB+d8E9lYLRRpo7PHi4b6HQDWSieB4pTpPDpFQUWw==
------END CERTIFICATE-----
-
-EE Certification Centre Root CA
-===============================
------BEGIN CERTIFICATE-----
-MIIEAzCCAuugAwIBAgIQVID5oHPtPwBMyonY43HmSjANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQG
-EwJFRTEiMCAGA1UECgwZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1czEoMCYGA1UEAwwfRUUgQ2Vy
-dGlmaWNhdGlvbiBDZW50cmUgUm9vdCBDQTEYMBYGCSqGSIb3DQEJARYJcGtpQHNrLmVlMCIYDzIw
-MTAxMDMwMTAxMDMwWhgPMjAzMDEyMTcyMzU5NTlaMHUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKDBlB
-UyBTZXJ0aWZpdHNlZXJpbWlza2Vza3VzMSgwJgYDVQQDDB9FRSBDZXJ0aWZpY2F0aW9uIENlbnRy
-ZSBSb290IENBMRgwFgYJKoZIhvcNAQkBFglwa2lAc2suZWUwggEiMA0GCSqGSIb3DQEBAQUAA4IB
-DwAwggEKAoIBAQDIIMDs4MVLqwd4lfNE7vsLDP90jmG7sWLqI9iroWUyeuuOF0+W2Ap7kaJjbMeM
-TC55v6kF/GlclY1i+blw7cNRfdCT5mzrMEvhvH2/UpvObntl8jixwKIy72KyaOBhU8E2lf/slLo2
-rpwcpzIP5Xy0xm90/XsY6KxX7QYgSzIwWFv9zajmofxwvI6Sc9uXp3whrj3B9UiHbCe9nyV0gVWw
-93X2PaRka9ZP585ArQ/dMtO8ihJTmMmJ+xAdTX7Nfh9WDSFwhfYggx/2uh8Ej+p3iDXE/+pOoYtN
-P2MbRMNE1CV2yreN1x5KZmTNXMWcg+HCCIia7E6j8T4cLNlsHaFLAgMBAAGjgYowgYcwDwYDVR0T
-AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBLyWj7qVhy/zQas8fElyalL1BSZ
-MEUGA1UdJQQ+MDwGCCsGAQUFBwMCBggrBgEFBQcDAQYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEF
-BQcDCAYIKwYBBQUHAwkwDQYJKoZIhvcNAQEFBQADggEBAHv25MANqhlHt01Xo/6tu7Fq1Q+e2+Rj
-xY6hUFaTlrg4wCQiZrxTFGGVv9DHKpY5P30osxBAIWrEr7BSdxjhlthWXePdNl4dp1BUoMUq5KqM
-lIpPnTX/dqQGE5Gion0ARD9V04I8GtVbvFZMIi5GQ4okQC3zErg7cBqklrkar4dBGmoYDQZPxz5u
-uSlNDUmJEYcyW+ZLBMjkXOZ0c5RdFpgTlf7727FE5TpwrDdr5rMzcijJs1eg9gIWiAYLtqZLICjU
-3j2LrTcFU3T+bsy8QxdxXvnFzBqpYe73dgzzcvRyrc9yAjYHR8/vGVCJYMzpJJUPwssd8m92kMfM
-dcGWxZ0=
------END CERTIFICATE-----
-
-TURKTRUST Certificate Services Provider Root 2007
-=================================================
------BEGIN CERTIFICATE-----
-MIIEPTCCAyWgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBvzE/MD0GA1UEAww2VMOcUktUUlVTVCBF
-bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEP
-MA0GA1UEBwwGQW5rYXJhMV4wXAYDVQQKDFVUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUg
-QmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgQXJhbMSxayAyMDA3MB4X
-DTA3MTIyNTE4MzcxOVoXDTE3MTIyMjE4MzcxOVowgb8xPzA9BgNVBAMMNlTDnFJLVFJVU1QgRWxl
-a3Ryb25payBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsTELMAkGA1UEBhMCVFIxDzAN
-BgNVBAcMBkFua2FyYTFeMFwGA1UECgxVVMOcUktUUlVTVCBCaWxnaSDEsGxldGnFn2ltIHZlIEJp
-bGnFn2ltIEfDvHZlbmxpxJ9pIEhpem1ldGxlcmkgQS7Fni4gKGMpIEFyYWzEsWsgMjAwNzCCASIw
-DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKu3PgqMyKVYFeaK7yc9SrToJdPNM8Ig3BnuiD9N
-YvDdE3ePYakqtdTyuTFYKTsvP2qcb3N2Je40IIDu6rfwxArNK4aUyeNgsURSsloptJGXg9i3phQv
-KUmi8wUG+7RP2qFsmmaf8EMJyupyj+sA1zU511YXRxcw9L6/P8JorzZAwan0qafoEGsIiveGHtya
-KhUG9qPw9ODHFNRRf8+0222vR5YXm3dx2KdxnSQM9pQ/hTEST7ruToK4uT6PIzdezKKqdfcYbwnT
-rqdUKDT74eA7YH2gvnmJhsifLfkKS8RQouf9eRbHegsYz85M733WB2+Y8a+xwXrXgTW4qhe04MsC
-AwEAAaNCMEAwHQYDVR0OBBYEFCnFkKslrxHkYb+j/4hhkeYO/pyBMA4GA1UdDwEB/wQEAwIBBjAP
-BgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQAQDdr4Ouwo0RSVgrESLFF6QSU2TJ/s
-Px+EnWVUXKgWAkD6bho3hO9ynYYKVZ1WKKxmLNA6VpM0ByWtCLCPyA8JWcqdmBzlVPi5RX9ql2+I
-aE1KBiY3iAIOtsbWcpnOa3faYjGkVh+uX4132l32iPwa2Z61gfAyuOOI0JzzaqC5mxRZNTZPz/OO
-Xl0XrRWV2N2y1RVuAE6zS89mlOTgzbUF2mNXi+WzqtvALhyQRNsaXRik7r4EW5nVcV9VZWRi1aKb
-BFmGyGJ353yCRWo9F7/snXUMrqNvWtMvmDb08PUZqxFdyKbjKlhqQgnDvZImZjINXQhVdP+MmNAK
-poRq0Tl9
------END CERTIFICATE-----
-
-D-TRUST Root Class 3 CA 2 2009
-==============================
------BEGIN CERTIFICATE-----
-MIIEMzCCAxugAwIBAgIDCYPzMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQK
-DAxELVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTAe
-Fw0wOTExMDUwODM1NThaFw0yOTExMDUwODM1NThaME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxE
-LVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTCCASIw
-DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANOySs96R+91myP6Oi/WUEWJNTrGa9v+2wBoqOAD
-ER03UAifTUpolDWzU9GUY6cgVq/eUXjsKj3zSEhQPgrfRlWLJ23DEE0NkVJD2IfgXU42tSHKXzlA
-BF9bfsyjxiupQB7ZNoTWSPOSHjRGICTBpFGOShrvUD9pXRl/RcPHAY9RySPocq60vFYJfxLLHLGv
-KZAKyVXMD9O0Gu1HNVpK7ZxzBCHQqr0ME7UAyiZsxGsMlFqVlNpQmvH/pStmMaTJOKDfHR+4CS7z
-p+hnUquVH+BGPtikw8paxTGA6Eian5Rp/hnd2HN8gcqW3o7tszIFZYQ05ub9VxC1X3a/L7AQDcUC
-AwEAAaOCARowggEWMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFP3aFMSfMN4hvR5COfyrYyNJ
-4PGEMA4GA1UdDwEB/wQEAwIBBjCB0wYDVR0fBIHLMIHIMIGAoH6gfIZ6bGRhcDovL2RpcmVjdG9y
-eS5kLXRydXN0Lm5ldC9DTj1ELVRSVVNUJTIwUm9vdCUyMENsYXNzJTIwMyUyMENBJTIwMiUyMDIw
-MDksTz1ELVRydXN0JTIwR21iSCxDPURFP2NlcnRpZmljYXRlcmV2b2NhdGlvbmxpc3QwQ6BBoD+G
-PWh0dHA6Ly93d3cuZC10cnVzdC5uZXQvY3JsL2QtdHJ1c3Rfcm9vdF9jbGFzc18zX2NhXzJfMjAw
-OS5jcmwwDQYJKoZIhvcNAQELBQADggEBAH+X2zDI36ScfSF6gHDOFBJpiBSVYEQBrLLpME+bUMJm
-2H6NMLVwMeniacfzcNsgFYbQDfC+rAF1hM5+n02/t2A7nPPKHeJeaNijnZflQGDSNiH+0LS4F9p0
-o3/U37CYAqxva2ssJSRyoWXuJVrl5jLn8t+rSfrzkGkj2wTZ51xY/GXUl77M/C4KzCUqNQT4YJEV
-dT1B/yMfGchs64JTBKbkTCJNjYy6zltz7GRUUG3RnFX7acM2w4y8PIWmawomDeCTmGCufsYkl4ph
-X5GOZpIJhzbNi5stPvZR1FDUWSi9g/LMKHtThm3YJohw1+qRzT65ysCQblrGXnRl11z+o+I=
------END CERTIFICATE-----
-
-D-TRUST Root Class 3 CA 2 EV 2009
-=================================
------BEGIN CERTIFICATE-----
-MIIEQzCCAyugAwIBAgIDCYP0MA0GCSqGSIb3DQEBCwUAMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQK
-DAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAw
-OTAeFw0wOTExMDUwODUwNDZaFw0yOTExMDUwODUwNDZaMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQK
-DAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAw
-OTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJnxhDRwui+3MKCOvXwEz75ivJn9gpfS
-egpnljgJ9hBOlSJzmY3aFS3nBfwZcyK3jpgAvDw9rKFs+9Z5JUut8Mxk2og+KbgPCdM03TP1YtHh
-zRnp7hhPTFiu4h7WDFsVWtg6uMQYZB7jM7K1iXdODL/ZlGsTl28So/6ZqQTMFexgaDbtCHu39b+T
-7WYxg4zGcTSHThfqr4uRjRxWQa4iN1438h3Z0S0NL2lRp75mpoo6Kr3HGrHhFPC+Oh25z1uxav60
-sUYgovseO3Dvk5h9jHOW8sXvhXCtKSb8HgQ+HKDYD8tSg2J87otTlZCpV6LqYQXY+U3EJ/pure35
-11H3a6UCAwEAAaOCASQwggEgMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNOUikxiEyoZLsyv
-cop9NteaHNxnMA4GA1UdDwEB/wQEAwIBBjCB3QYDVR0fBIHVMIHSMIGHoIGEoIGBhn9sZGFwOi8v
-ZGlyZWN0b3J5LmQtdHJ1c3QubmV0L0NOPUQtVFJVU1QlMjBSb290JTIwQ2xhc3MlMjAzJTIwQ0El
-MjAyJTIwRVYlMjAyMDA5LE89RC1UcnVzdCUyMEdtYkgsQz1ERT9jZXJ0aWZpY2F0ZXJldm9jYXRp
-b25saXN0MEagRKBChkBodHRwOi8vd3d3LmQtdHJ1c3QubmV0L2NybC9kLXRydXN0X3Jvb3RfY2xh
-c3NfM19jYV8yX2V2XzIwMDkuY3JsMA0GCSqGSIb3DQEBCwUAA4IBAQA07XtaPKSUiO8aEXUHL7P+
-PPoeUSbrh/Yp3uDx1MYkCenBz1UbtDDZzhr+BlGmFaQt77JLvyAoJUnRpjZ3NOhk31KxEcdzes05
-nsKtjHEh8lprr988TlWvsoRlFIm5d8sqMb7Po23Pb0iUMkZv53GMoKaEGTcH8gNFCSuGdXzfX2lX
-ANtu2KZyIktQ1HWYVt+3GP9DQ1CuekR78HlR10M9p9OB0/DJT7naxpeG0ILD5EJt/rDiZE4OJudA
-NCa1CInXCGNjOCd1HjPqbqjdn5lPdE2BiYBL3ZqXKVwvvoFBuYz/6n1gBp7N1z3TLqMVvKjmJuVv
-w9y4AyHqnxbxLFS1
------END CERTIFICATE-----
-
-PSCProcert
-==========
------BEGIN CERTIFICATE-----
-MIIJhjCCB26gAwIBAgIBCzANBgkqhkiG9w0BAQsFADCCAR4xPjA8BgNVBAMTNUF1dG9yaWRhZCBk
-ZSBDZXJ0aWZpY2FjaW9uIFJhaXogZGVsIEVzdGFkbyBWZW5lem9sYW5vMQswCQYDVQQGEwJWRTEQ
-MA4GA1UEBxMHQ2FyYWNhczEZMBcGA1UECBMQRGlzdHJpdG8gQ2FwaXRhbDE2MDQGA1UEChMtU2lz
-dGVtYSBOYWNpb25hbCBkZSBDZXJ0aWZpY2FjaW9uIEVsZWN0cm9uaWNhMUMwQQYDVQQLEzpTdXBl
-cmludGVuZGVuY2lhIGRlIFNlcnZpY2lvcyBkZSBDZXJ0aWZpY2FjaW9uIEVsZWN0cm9uaWNhMSUw
-IwYJKoZIhvcNAQkBFhZhY3JhaXpAc3VzY2VydGUuZ29iLnZlMB4XDTEwMTIyODE2NTEwMFoXDTIw
-MTIyNTIzNTk1OVowgdExJjAkBgkqhkiG9w0BCQEWF2NvbnRhY3RvQHByb2NlcnQubmV0LnZlMQ8w
-DQYDVQQHEwZDaGFjYW8xEDAOBgNVBAgTB01pcmFuZGExKjAoBgNVBAsTIVByb3ZlZWRvciBkZSBD
-ZXJ0aWZpY2Fkb3MgUFJPQ0VSVDE2MDQGA1UEChMtU2lzdGVtYSBOYWNpb25hbCBkZSBDZXJ0aWZp
-Y2FjaW9uIEVsZWN0cm9uaWNhMQswCQYDVQQGEwJWRTETMBEGA1UEAxMKUFNDUHJvY2VydDCCAiIw
-DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANW39KOUM6FGqVVhSQ2oh3NekS1wwQYalNo97BVC
-wfWMrmoX8Yqt/ICV6oNEolt6Vc5Pp6XVurgfoCfAUFM+jbnADrgV3NZs+J74BCXfgI8Qhd19L3uA
-3VcAZCP4bsm+lU/hdezgfl6VzbHvvnpC2Mks0+saGiKLt38GieU89RLAu9MLmV+QfI4tL3czkkoh
-RqipCKzx9hEC2ZUWno0vluYC3XXCFCpa1sl9JcLB/KpnheLsvtF8PPqv1W7/U0HU9TI4seJfxPmO
-EO8GqQKJ/+MMbpfg353bIdD0PghpbNjU5Db4g7ayNo+c7zo3Fn2/omnXO1ty0K+qP1xmk6wKImG2
-0qCZyFSTXai20b1dCl53lKItwIKOvMoDKjSuc/HUtQy9vmebVOvh+qBa7Dh+PsHMosdEMXXqP+UH
-0quhJZb25uSgXTcYOWEAM11G1ADEtMo88aKjPvM6/2kwLkDd9p+cJsmWN63nOaK/6mnbVSKVUyqU
-td+tFjiBdWbjxywbk5yqjKPK2Ww8F22c3HxT4CAnQzb5EuE8XL1mv6JpIzi4mWCZDlZTOpx+FIyw
-Bm/xhnaQr/2v/pDGj59/i5IjnOcVdo/Vi5QTcmn7K2FjiO/mpF7moxdqWEfLcU8UC17IAggmosvp
-r2uKGcfLFFb14dq12fy/czja+eevbqQ34gcnAgMBAAGjggMXMIIDEzASBgNVHRMBAf8ECDAGAQH/
-AgEBMDcGA1UdEgQwMC6CD3N1c2NlcnRlLmdvYi52ZaAbBgVghl4CAqASDBBSSUYtRy0yMDAwNDAz
-Ni0wMB0GA1UdDgQWBBRBDxk4qpl/Qguk1yeYVKIXTC1RVDCCAVAGA1UdIwSCAUcwggFDgBStuyId
-xuDSAaj9dlBSk+2YwU2u06GCASakggEiMIIBHjE+MDwGA1UEAxM1QXV0b3JpZGFkIGRlIENlcnRp
-ZmljYWNpb24gUmFpeiBkZWwgRXN0YWRvIFZlbmV6b2xhbm8xCzAJBgNVBAYTAlZFMRAwDgYDVQQH
-EwdDYXJhY2FzMRkwFwYDVQQIExBEaXN0cml0byBDYXBpdGFsMTYwNAYDVQQKEy1TaXN0ZW1hIE5h
-Y2lvbmFsIGRlIENlcnRpZmljYWNpb24gRWxlY3Ryb25pY2ExQzBBBgNVBAsTOlN1cGVyaW50ZW5k
-ZW5jaWEgZGUgU2VydmljaW9zIGRlIENlcnRpZmljYWNpb24gRWxlY3Ryb25pY2ExJTAjBgkqhkiG
-9w0BCQEWFmFjcmFpekBzdXNjZXJ0ZS5nb2IudmWCAQowDgYDVR0PAQH/BAQDAgEGME0GA1UdEQRG
-MESCDnByb2NlcnQubmV0LnZloBUGBWCGXgIBoAwMClBTQy0wMDAwMDKgGwYFYIZeAgKgEgwQUklG
-LUotMzE2MzUzNzMtNzB2BgNVHR8EbzBtMEagRKBChkBodHRwOi8vd3d3LnN1c2NlcnRlLmdvYi52
-ZS9sY3IvQ0VSVElGSUNBRE8tUkFJWi1TSEEzODRDUkxERVIuY3JsMCOgIaAfhh1sZGFwOi8vYWNy
-YWl6LnN1c2NlcnRlLmdvYi52ZTA3BggrBgEFBQcBAQQrMCkwJwYIKwYBBQUHMAGGG2h0dHA6Ly9v
-Y3NwLnN1c2NlcnRlLmdvYi52ZTBBBgNVHSAEOjA4MDYGBmCGXgMBAjAsMCoGCCsGAQUFBwIBFh5o
-dHRwOi8vd3d3LnN1c2NlcnRlLmdvYi52ZS9kcGMwDQYJKoZIhvcNAQELBQADggIBACtZ6yKZu4Sq
-T96QxtGGcSOeSwORR3C7wJJg7ODU523G0+1ng3dS1fLld6c2suNUvtm7CpsR72H0xpkzmfWvADmN
-g7+mvTV+LFwxNG9s2/NkAZiqlCxB3RWGymspThbASfzXg0gTB1GEMVKIu4YXx2sviiCtxQuPcD4q
-uxtxj7mkoP3YldmvWb8lK5jpY5MvYB7Eqvh39YtsL+1+LrVPQA3uvFd359m21D+VJzog1eWuq2w1
-n8GhHVnchIHuTQfiSLaeS5UtQbHh6N5+LwUeaO6/u5BlOsju6rEYNxxik6SgMexxbJHmpHmJWhSn
-FFAFTKQAVzAswbVhltw+HoSvOULP5dAssSS830DD7X9jSr3hTxJkhpXzsOfIt+FTvZLm8wyWuevo
-5pLtp4EJFAv8lXrPj9Y0TzYS3F7RNHXGRoAvlQSMx4bEqCaJqD8Zm4G7UaRKhqsLEQ+xrmNTbSjq
-3TNWOByyrYDT13K9mmyZY+gAu0F2BbdbmRiKw7gSXFbPVgx96OLP7bx0R/vu0xdOIk9W/1DzLuY5
-poLWccret9W6aAjtmcz9opLLabid+Qqkpj5PkygqYWwHJgD/ll9ohri4zspV4KuxPX+Y1zMOWj3Y
-eMLEYC/HYvBhkdI4sPaeVdtAgAUSM84dkpvRabP/v/GSCmE1P93+hvS84Bpxs2Km
------END CERTIFICATE-----
-
-China Internet Network Information Center EV Certificates Root
-==============================================================
------BEGIN CERTIFICATE-----
-MIID9zCCAt+gAwIBAgIESJ8AATANBgkqhkiG9w0BAQUFADCBijELMAkGA1UEBhMCQ04xMjAwBgNV
-BAoMKUNoaW5hIEludGVybmV0IE5ldHdvcmsgSW5mb3JtYXRpb24gQ2VudGVyMUcwRQYDVQQDDD5D
-aGluYSBJbnRlcm5ldCBOZXR3b3JrIEluZm9ybWF0aW9uIENlbnRlciBFViBDZXJ0aWZpY2F0ZXMg
-Um9vdDAeFw0xMDA4MzEwNzExMjVaFw0zMDA4MzEwNzExMjVaMIGKMQswCQYDVQQGEwJDTjEyMDAG
-A1UECgwpQ2hpbmEgSW50ZXJuZXQgTmV0d29yayBJbmZvcm1hdGlvbiBDZW50ZXIxRzBFBgNVBAMM
-PkNoaW5hIEludGVybmV0IE5ldHdvcmsgSW5mb3JtYXRpb24gQ2VudGVyIEVWIENlcnRpZmljYXRl
-cyBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAm35z7r07eKpkQ0H1UN+U8i6y
-jUqORlTSIRLIOTJCBumD1Z9S7eVnAztUwYyZmczpwA//DdmEEbK40ctb3B75aDFk4Zv6dOtouSCV
-98YPjUesWgbdYavi7NifFy2cyjw1l1VxzUOFsUcW9SxTgHbP0wBkvUCZ3czY28Sf1hNfQYOL+Q2H
-klY0bBoQCxfVWhyXWIQ8hBouXJE0bhlffxdpxWXvayHG1VA6v2G5BY3vbzQ6sm8UY78WO5upKv23
-KzhmBsUs4qpnHkWnjQRmQvaPK++IIGmPMowUc9orhpFjIpryp9vOiYurXccUwVswah+xt54ugQEC
-7c+WXmPbqOY4twIDAQABo2MwYTAfBgNVHSMEGDAWgBR8cks5x8DbYqVPm6oYNJKiyoOCWTAPBgNV
-HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUfHJLOcfA22KlT5uqGDSSosqD
-glkwDQYJKoZIhvcNAQEFBQADggEBACrDx0M3j92tpLIM7twUbY8opJhJywyA6vPtI2Z1fcXTIWd5
-0XPFtQO3WKwMVC/GVhMPMdoG52U7HW8228gd+f2ABsqjPWYWqJ1MFn3AlUa1UeTiH9fqBk1jjZaM
-7+czV0I664zBechNdn3e9rG3geCg+aF4RhcaVpjwTj2rHO3sOdwHSPdj/gauwqRcalsyiMXHM4Ws
-ZkJHwlgkmeHlPuV1LI5D1l08eB6olYIpUNHRFrrvwb562bTYzB5MRuF3sTGrvSrIzo9uoV1/A3U0
-5K2JRVRevq4opbs/eHnrc7MKDf2+yfdWrPa37S+bISnHOLaVxATywy39FCqQmbkHzJ8=
------END CERTIFICATE-----
-
-Swisscom Root CA 2
-==================
------BEGIN CERTIFICATE-----
-MIIF2TCCA8GgAwIBAgIQHp4o6Ejy5e/DfEoeWhhntjANBgkqhkiG9w0BAQsFADBkMQswCQYDVQQG
-EwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsTHERpZ2l0YWwgQ2VydGlmaWNhdGUgU2Vy
-dmljZXMxGzAZBgNVBAMTElN3aXNzY29tIFJvb3QgQ0EgMjAeFw0xMTA2MjQwODM4MTRaFw0zMTA2
-MjUwNzM4MTRaMGQxCzAJBgNVBAYTAmNoMREwDwYDVQQKEwhTd2lzc2NvbTElMCMGA1UECxMcRGln
-aXRhbCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczEbMBkGA1UEAxMSU3dpc3Njb20gUm9vdCBDQSAyMIIC
-IjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAlUJOhJ1R5tMJ6HJaI2nbeHCOFvErjw0DzpPM
-LgAIe6szjPTpQOYXTKueuEcUMncy3SgM3hhLX3af+Dk7/E6J2HzFZ++r0rk0X2s682Q2zsKwzxNo
-ysjL67XiPS4h3+os1OD5cJZM/2pYmLcX5BtS5X4HAB1f2uY+lQS3aYg5oUFgJWFLlTloYhyxCwWJ
-wDaCFCE/rtuh/bxvHGCGtlOUSbkrRsVPACu/obvLP+DHVxxX6NZp+MEkUp2IVd3Chy50I9AU/SpH
-Wrumnf2U5NGKpV+GY3aFy6//SSj8gO1MedK75MDvAe5QQQg1I3ArqRa0jG6F6bYRzzHdUyYb3y1a
-SgJA/MTAtukxGggo5WDDH8SQjhBiYEQN7Aq+VRhxLKX0srwVYv8c474d2h5Xszx+zYIdkeNL6yxS
-NLCK/RJOlrDrcH+eOfdmQrGrrFLadkBXeyq96G4DsguAhYidDMfCd7Camlf0uPoTXGiTOmekl9Ab
-mbeGMktg2M7v0Ax/lZ9vh0+Hio5fCHyqW/xavqGRn1V9TrALacywlKinh/LTSlDcX3KwFnUey7QY
-Ypqwpzmqm59m2I2mbJYV4+by+PGDYmy7Velhk6M99bFXi08jsJvllGov34zflVEpYKELKeRcVVi3
-qPyZ7iVNTA6z00yPhOgpD/0QVAKFyPnlw4vP5w8CAwEAAaOBhjCBgzAOBgNVHQ8BAf8EBAMCAYYw
-HQYDVR0hBBYwFDASBgdghXQBUwIBBgdghXQBUwIBMBIGA1UdEwEB/wQIMAYBAf8CAQcwHQYDVR0O
-BBYEFE0mICKJS9PVpAqhb97iEoHF8TwuMB8GA1UdIwQYMBaAFE0mICKJS9PVpAqhb97iEoHF8Twu
-MA0GCSqGSIb3DQEBCwUAA4ICAQAyCrKkG8t9voJXiblqf/P0wS4RfbgZPnm3qKhyN2abGu2sEzsO
-v2LwnN+ee6FTSA5BesogpxcbtnjsQJHzQq0Qw1zv/2BZf82Fo4s9SBwlAjxnffUy6S8w5X2lejjQ
-82YqZh6NM4OKb3xuqFp1mrjX2lhIREeoTPpMSQpKwhI3qEAMw8jh0FcNlzKVxzqfl9NX+Ave5XLz
-o9v/tdhZsnPdTSpxsrpJ9csc1fV5yJmz/MFMdOO0vSk3FQQoHt5FRnDsr7p4DooqzgB53MBfGWcs
-a0vvaGgLQ+OswWIJ76bdZWGgr4RVSJFSHMYlkSrQwSIjYVmvRRGFHQEkNI/Ps/8XciATwoCqISxx
-OQ7Qj1zB09GOInJGTB2Wrk9xseEFKZZZ9LuedT3PDTcNYtsmjGOpI99nBjx8Oto0QuFmtEYE3saW
-mA9LSHokMnWRn6z3aOkquVVlzl1h0ydw2Df+n7mvoC5Wt6NlUe07qxS/TFED6F+KBZvuim6c779o
-+sjaC+NCydAXFJy3SuCvkychVSa1ZC+N8f+mQAWFBVzKBxlcCxMoTFh/wqXvRdpg065lYZ1Tg3TC
-rvJcwhbtkj6EPnNgiLx29CzP0H1907he0ZESEOnN3col49XtmS++dYFLJPlFRpTJKSFTnCZFqhMX
-5OfNeOI5wSsSnqaeG8XmDtkx2Q==
------END CERTIFICATE-----
-
-Swisscom Root EV CA 2
-=====================
------BEGIN CERTIFICATE-----
-MIIF4DCCA8igAwIBAgIRAPL6ZOJ0Y9ON/RAdBB92ylgwDQYJKoZIhvcNAQELBQAwZzELMAkGA1UE
-BhMCY2gxETAPBgNVBAoTCFN3aXNzY29tMSUwIwYDVQQLExxEaWdpdGFsIENlcnRpZmljYXRlIFNl
-cnZpY2VzMR4wHAYDVQQDExVTd2lzc2NvbSBSb290IEVWIENBIDIwHhcNMTEwNjI0MDk0NTA4WhcN
-MzEwNjI1MDg0NTA4WjBnMQswCQYDVQQGEwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsT
-HERpZ2l0YWwgQ2VydGlmaWNhdGUgU2VydmljZXMxHjAcBgNVBAMTFVN3aXNzY29tIFJvb3QgRVYg
-Q0EgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMT3HS9X6lds93BdY7BxUglgRCgz
-o3pOCvrY6myLURYaVa5UJsTMRQdBTxB5f3HSek4/OE6zAMaVylvNwSqD1ycfMQ4jFrclyxy0uYAy
-Xhqdk/HoPGAsp15XGVhRXrwsVgu42O+LgrQ8uMIkqBPHoCE2G3pXKSinLr9xJZDzRINpUKTk4Rti
-GZQJo/PDvO/0vezbE53PnUgJUmfANykRHvvSEaeFGHR55E+FFOtSN+KxRdjMDUN/rhPSays/p8Li
-qG12W0OfvrSdsyaGOx9/5fLoZigWJdBLlzin5M8J0TbDC77aO0RYjb7xnglrPvMyxyuHxuxenPaH
-Za0zKcQvidm5y8kDnftslFGXEBuGCxobP/YCfnvUxVFkKJ3106yDgYjTdLRZncHrYTNaRdHLOdAG
-alNgHa/2+2m8atwBz735j9m9W8E6X47aD0upm50qKGsaCnw8qyIL5XctcfaCNYGu+HuB5ur+rPQa
-m3Rc6I8k9l2dRsQs0h4rIWqDJ2dVSqTjyDKXZpBy2uPUZC5f46Fq9mDU5zXNysRojddxyNMkM3Ox
-bPlq4SjbX8Y96L5V5jcb7STZDxmPX2MYWFCBUWVv8p9+agTnNCRxunZLWB4ZvRVgRaoMEkABnRDi
-xzgHcgplwLa7JSnaFp6LNYth7eVxV4O1PHGf40+/fh6Bn0GXAgMBAAGjgYYwgYMwDgYDVR0PAQH/
-BAQDAgGGMB0GA1UdIQQWMBQwEgYHYIV0AVMCAgYHYIV0AVMCAjASBgNVHRMBAf8ECDAGAQH/AgED
-MB0GA1UdDgQWBBRF2aWBbj2ITY1x0kbBbkUe88SAnTAfBgNVHSMEGDAWgBRF2aWBbj2ITY1x0kbB
-bkUe88SAnTANBgkqhkiG9w0BAQsFAAOCAgEAlDpzBp9SSzBc1P6xXCX5145v9Ydkn+0UjrgEjihL
-j6p7jjm02Vj2e6E1CqGdivdj5eu9OYLU43otb98TPLr+flaYC/NUn81ETm484T4VvwYmneTwkLbU
-wp4wLh/vx3rEUMfqe9pQy3omywC0Wqu1kx+AiYQElY2NfwmTv9SoqORjbdlk5LgpWgi/UOGED1V7
-XwgiG/W9mR4U9s70WBCCswo9GcG/W6uqmdjyMb3lOGbcWAXH7WMaLgqXfIeTK7KK4/HsGOV1timH
-59yLGn602MnTihdsfSlEvoqq9X46Lmgxk7lq2prg2+kupYTNHAq4Sgj5nPFhJpiTt3tm7JFe3VE/
-23MPrQRYCd0EApUKPtN236YQHoA96M2kZNEzx5LH4k5E4wnJTsJdhw4Snr8PyQUQ3nqjsTzyP6Wq
-J3mtMX0f/fwZacXduT98zca0wjAefm6S139hdlqP65VNvBFuIXxZN5nQBrz5Bm0yFqXZaajh3DyA
-HmBR3NdUIR7KYndP+tiPsys6DXhyyWhBWkdKwqPrGtcKqzwyVcgKEZzfdNbwQBUdyLmPtTbFr/gi
-uMod89a2GQ+fYWVq6nTIfI/DT11lgh/ZDYnadXL77/FHZxOzyNEZiCcmmpl5fx7kLD977vHeTYuW
-l8PVP3wbI+2ksx0WckNLIOFZfsLorSa/ovc=
------END CERTIFICATE-----
-
-CA Disig Root R1
-================
------BEGIN CERTIFICATE-----
-MIIFaTCCA1GgAwIBAgIJAMMDmu5QkG4oMA0GCSqGSIb3DQEBBQUAMFIxCzAJBgNVBAYTAlNLMRMw
-EQYDVQQHEwpCcmF0aXNsYXZhMRMwEQYDVQQKEwpEaXNpZyBhLnMuMRkwFwYDVQQDExBDQSBEaXNp
-ZyBSb290IFIxMB4XDTEyMDcxOTA5MDY1NloXDTQyMDcxOTA5MDY1NlowUjELMAkGA1UEBhMCU0sx
-EzARBgNVBAcTCkJyYXRpc2xhdmExEzARBgNVBAoTCkRpc2lnIGEucy4xGTAXBgNVBAMTEENBIERp
-c2lnIFJvb3QgUjEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCqw3j33Jijp1pedxiy
-3QRkD2P9m5YJgNXoqqXinCaUOuiZc4yd39ffg/N4T0Dhf9Kn0uXKE5Pn7cZ3Xza1lK/oOI7bm+V8
-u8yN63Vz4STN5qctGS7Y1oprFOsIYgrY3LMATcMjfF9DCCMyEtztDK3AfQ+lekLZWnDZv6fXARz2
-m6uOt0qGeKAeVjGu74IKgEH3G8muqzIm1Cxr7X1r5OJeIgpFy4QxTaz+29FHuvlglzmxZcfe+5nk
-CiKxLU3lSCZpq+Kq8/v8kiky6bM+TR8noc2OuRf7JT7JbvN32g0S9l3HuzYQ1VTW8+DiR0jm3hTa
-YVKvJrT1cU/J19IG32PK/yHoWQbgCNWEFVP3Q+V8xaCJmGtzxmjOZd69fwX3se72V6FglcXM6pM6
-vpmumwKjrckWtc7dXpl4fho5frLABaTAgqWjR56M6ly2vGfb5ipN0gTco65F97yLnByn1tUD3AjL
-LhbKXEAz6GfDLuemROoRRRw1ZS0eRWEkG4IupZ0zXWX4Qfkuy5Q/H6MMMSRE7cderVC6xkGbrPAX
-ZcD4XW9boAo0PO7X6oifmPmvTiT6l7Jkdtqr9O3jw2Dv1fkCyC2fg69naQanMVXVz0tv/wQFx1is
-XxYb5dKj6zHbHzMVTdDypVP1y+E9Tmgt2BLdqvLmTZtJ5cUoobqwWsagtQIDAQABo0IwQDAPBgNV
-HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUiQq0OJMa5qvum5EY+fU8PjXQ
-04IwDQYJKoZIhvcNAQEFBQADggIBADKL9p1Kyb4U5YysOMo6CdQbzoaz3evUuii+Eq5FLAR0rBNR
-xVgYZk2C2tXck8An4b58n1KeElb21Zyp9HWc+jcSjxyT7Ff+Bw+r1RL3D65hXlaASfX8MPWbTx9B
-LxyE04nH4toCdu0Jz2zBuByDHBb6lM19oMgY0sidbvW9adRtPTXoHqJPYNcHKfyyo6SdbhWSVhlM
-CrDpfNIZTUJG7L399ldb3Zh+pE3McgODWF3vkzpBemOqfDqo9ayk0d2iLbYq/J8BjuIQscTK5Gfb
-VSUZP/3oNn6z4eGBrxEWi1CXYBmCAMBrTXO40RMHPuq2MU/wQppt4hF05ZSsjYSVPCGvxdpHyN85
-YmLLW1AL14FABZyb7bq2ix4Eb5YgOe2kfSnbSM6C3NQCjR0EMVrHS/BsYVLXtFHCgWzN4funodKS
-ds+xDzdYpPJScWc/DIh4gInByLUfkmO+p3qKViwaqKactV2zY9ATIKHrkWzQjX2v3wvkF7mGnjix
-lAxYjOBVqjtjbZqJYLhkKpLGN/R+Q0O3c+gB53+XD9fyexn9GtePyfqFa3qdnom2piiZk4hA9z7N
-UaPK6u95RyG1/jLix8NRb76AdPCkwzryT+lf3xkK8jsTQ6wxpLPn6/wY1gGp8yqPNg7rtLG8t0zJ
-a7+h89n07eLw4+1knj0vllJPgFOL
------END CERTIFICATE-----
-
-CA Disig Root R2
-================
------BEGIN CERTIFICATE-----
-MIIFaTCCA1GgAwIBAgIJAJK4iNuwisFjMA0GCSqGSIb3DQEBCwUAMFIxCzAJBgNVBAYTAlNLMRMw
-EQYDVQQHEwpCcmF0aXNsYXZhMRMwEQYDVQQKEwpEaXNpZyBhLnMuMRkwFwYDVQQDExBDQSBEaXNp
-ZyBSb290IFIyMB4XDTEyMDcxOTA5MTUzMFoXDTQyMDcxOTA5MTUzMFowUjELMAkGA1UEBhMCU0sx
-EzARBgNVBAcTCkJyYXRpc2xhdmExEzARBgNVBAoTCkRpc2lnIGEucy4xGTAXBgNVBAMTEENBIERp
-c2lnIFJvb3QgUjIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCio8QACdaFXS1tFPbC
-w3OeNcJxVX6B+6tGUODBfEl45qt5WDza/3wcn9iXAng+a0EE6UG9vgMsRfYvZNSrXaNHPWSb6Wia
-xswbP7q+sos0Ai6YVRn8jG+qX9pMzk0DIaPY0jSTVpbLTAwAFjxfGs3Ix2ymrdMxp7zo5eFm1tL7
-A7RBZckQrg4FY8aAamkw/dLukO8NJ9+flXP04SXabBbeQTg06ov80egEFGEtQX6sx3dOy1FU+16S
-GBsEWmjGycT6txOgmLcRK7fWV8x8nhfRyyX+hk4kLlYMeE2eARKmK6cBZW58Yh2EhN/qwGu1pSqV
-g8NTEQxzHQuyRpDRQjrOQG6Vrf/GlK1ul4SOfW+eioANSW1z4nuSHsPzwfPrLgVv2RvPN3YEyLRa
-5Beny912H9AZdugsBbPWnDTYltxhh5EF5EQIM8HauQhl1K6yNg3ruji6DOWbnuuNZt2Zz9aJQfYE
-koopKW1rOhzndX0CcQ7zwOe9yxndnWCywmZgtrEE7snmhrmaZkCo5xHtgUUDi/ZnWejBBhG93c+A
-Ak9lQHhcR1DIm+YfgXvkRKhbhZri3lrVx/k6RGZL5DJUfORsnLMOPReisjQS1n6yqEm70XooQL6i
-Fh/f5DcfEXP7kAplQ6INfPgGAVUzfbANuPT1rqVCV3w2EYx7XsQDnYx5nQIDAQABo0IwQDAPBgNV
-HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUtZn4r7CU9eMg1gqtzk5WpC5u
-Qu0wDQYJKoZIhvcNAQELBQADggIBACYGXnDnZTPIgm7ZnBc6G3pmsgH2eDtpXi/q/075KMOYKmFM
-tCQSin1tERT3nLXK5ryeJ45MGcipvXrA1zYObYVybqjGom32+nNjf7xueQgcnYqfGopTpti72TVV
-sRHFqQOzVju5hJMiXn7B9hJSi+osZ7z+Nkz1uM/Rs0mSO9MpDpkblvdhuDvEK7Z4bLQjb/D907Je
-dR+Zlais9trhxTF7+9FGs9K8Z7RiVLoJ92Owk6Ka+elSLotgEqv89WBW7xBci8QaQtyDW2QOy7W8
-1k/BfDxujRNt+3vrMNDcTa/F1balTFtxyegxvug4BkihGuLq0t4SOVga/4AOgnXmt8kHbA7v/zjx
-mHHEt38OFdAlab0inSvtBfZGR6ztwPDUO+Ls7pZbkBNOHlY667DvlruWIxG68kOGdGSVyCh13x01
-utI3gzhTODY7z2zp+WsO0PsE6E9312UBeIYMej4hYvF/Y3EMyZ9E26gnonW+boE+18DrG5gPcFw0
-sorMwIUY6256s/daoQe/qUKS82Ail+QUoQebTnbAjn39pCXHR+3/H3OszMOl6W8KjptlwlCFtaOg
-UxLMVYdh84GuEEZhvUQhuMI9dM9+JDX6HAcOmz0iyu8xL4ysEr3vQCj8KWefshNPZiTEUxnpHikV
-7+ZtsH8tZ/3zbBt1RqPlShfppNcL
------END CERTIFICATE-----
-
-ACCVRAIZ1
-=========
------BEGIN CERTIFICATE-----
-MIIH0zCCBbugAwIBAgIIXsO3pkN/pOAwDQYJKoZIhvcNAQEFBQAwQjESMBAGA1UEAwwJQUNDVlJB
-SVoxMRAwDgYDVQQLDAdQS0lBQ0NWMQ0wCwYDVQQKDARBQ0NWMQswCQYDVQQGEwJFUzAeFw0xMTA1
-MDUwOTM3MzdaFw0zMDEyMzEwOTM3MzdaMEIxEjAQBgNVBAMMCUFDQ1ZSQUlaMTEQMA4GA1UECwwH
-UEtJQUNDVjENMAsGA1UECgwEQUNDVjELMAkGA1UEBhMCRVMwggIiMA0GCSqGSIb3DQEBAQUAA4IC
-DwAwggIKAoICAQCbqau/YUqXry+XZpp0X9DZlv3P4uRm7x8fRzPCRKPfmt4ftVTdFXxpNRFvu8gM
-jmoYHtiP2Ra8EEg2XPBjs5BaXCQ316PWywlxufEBcoSwfdtNgM3802/J+Nq2DoLSRYWoG2ioPej0
-RGy9ocLLA76MPhMAhN9KSMDjIgro6TenGEyxCQ0jVn8ETdkXhBilyNpAlHPrzg5XPAOBOp0KoVdD
-aaxXbXmQeOW1tDvYvEyNKKGno6e6Ak4l0Squ7a4DIrhrIA8wKFSVf+DuzgpmndFALW4ir50awQUZ
-0m/A8p/4e7MCQvtQqR0tkw8jq8bBD5L/0KIV9VMJcRz/RROE5iZe+OCIHAr8Fraocwa48GOEAqDG
-WuzndN9wrqODJerWx5eHk6fGioozl2A3ED6XPm4pFdahD9GILBKfb6qkxkLrQaLjlUPTAYVtjrs7
-8yM2x/474KElB0iryYl0/wiPgL/AlmXz7uxLaL2diMMxs0Dx6M/2OLuc5NF/1OVYm3z61PMOm3WR
-5LpSLhl+0fXNWhn8ugb2+1KoS5kE3fj5tItQo05iifCHJPqDQsGH+tUtKSpacXpkatcnYGMN285J
-9Y0fkIkyF/hzQ7jSWpOGYdbhdQrqeWZ2iE9x6wQl1gpaepPluUsXQA+xtrn13k/c4LOsOxFwYIRK
-Q26ZIMApcQrAZQIDAQABo4ICyzCCAscwfQYIKwYBBQUHAQEEcTBvMEwGCCsGAQUFBzAChkBodHRw
-Oi8vd3d3LmFjY3YuZXMvZmlsZWFkbWluL0FyY2hpdm9zL2NlcnRpZmljYWRvcy9yYWl6YWNjdjEu
-Y3J0MB8GCCsGAQUFBzABhhNodHRwOi8vb2NzcC5hY2N2LmVzMB0GA1UdDgQWBBTSh7Tj3zcnk1X2
-VuqB5TbMjB4/vTAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFNKHtOPfNyeTVfZW6oHlNsyM
-Hj+9MIIBcwYDVR0gBIIBajCCAWYwggFiBgRVHSAAMIIBWDCCASIGCCsGAQUFBwICMIIBFB6CARAA
-QQB1AHQAbwByAGkAZABhAGQAIABkAGUAIABDAGUAcgB0AGkAZgBpAGMAYQBjAGkA8wBuACAAUgBh
-AO0AegAgAGQAZQAgAGwAYQAgAEEAQwBDAFYAIAAoAEEAZwBlAG4AYwBpAGEAIABkAGUAIABUAGUA
-YwBuAG8AbABvAGcA7QBhACAAeQAgAEMAZQByAHQAaQBmAGkAYwBhAGMAaQDzAG4AIABFAGwAZQBj
-AHQAcgDzAG4AaQBjAGEALAAgAEMASQBGACAAUQA0ADYAMAAxADEANQA2AEUAKQAuACAAQwBQAFMA
-IABlAG4AIABoAHQAdABwADoALwAvAHcAdwB3AC4AYQBjAGMAdgAuAGUAczAwBggrBgEFBQcCARYk
-aHR0cDovL3d3dy5hY2N2LmVzL2xlZ2lzbGFjaW9uX2MuaHRtMFUGA1UdHwROMEwwSqBIoEaGRGh0
-dHA6Ly93d3cuYWNjdi5lcy9maWxlYWRtaW4vQXJjaGl2b3MvY2VydGlmaWNhZG9zL3JhaXphY2N2
-MV9kZXIuY3JsMA4GA1UdDwEB/wQEAwIBBjAXBgNVHREEEDAOgQxhY2N2QGFjY3YuZXMwDQYJKoZI
-hvcNAQEFBQADggIBAJcxAp/n/UNnSEQU5CmH7UwoZtCPNdpNYbdKl02125DgBS4OxnnQ8pdpD70E
-R9m+27Up2pvZrqmZ1dM8MJP1jaGo/AaNRPTKFpV8M9xii6g3+CfYCS0b78gUJyCpZET/LtZ1qmxN
-YEAZSUNUY9rizLpm5U9EelvZaoErQNV/+QEnWCzI7UiRfD+mAM/EKXMRNt6GGT6d7hmKG9Ww7Y49
-nCrADdg9ZuM8Db3VlFzi4qc1GwQA9j9ajepDvV+JHanBsMyZ4k0ACtrJJ1vnE5Bc5PUzolVt3OAJ
-TS+xJlsndQAJxGJ3KQhfnlmstn6tn1QwIgPBHnFk/vk4CpYY3QIUrCPLBhwepH2NDd4nQeit2hW3
-sCPdK6jT2iWH7ehVRE2I9DZ+hJp4rPcOVkkO1jMl1oRQQmwgEh0q1b688nCBpHBgvgW1m54ERL5h
-I6zppSSMEYCUWqKiuUnSwdzRp+0xESyeGabu4VXhwOrPDYTkF7eifKXeVSUG7szAh1xA2syVP1Xg
-Nce4hL60Xc16gwFy7ofmXx2utYXGJt/mwZrpHgJHnyqobalbz+xFd3+YJ5oyXSrjhO7FmGYvliAd
-3djDJ9ew+f7Zfc3Qn48LFFhRny+Lwzgt3uiP1o2HpPVWQxaZLPSkVrQ0uGE3ycJYgBugl6H8WY3p
-EfbRD0tVNEYqi4Y7
------END CERTIFICATE-----
-
-TWCA Global Root CA
-===================
------BEGIN CERTIFICATE-----
-MIIFQTCCAymgAwIBAgICDL4wDQYJKoZIhvcNAQELBQAwUTELMAkGA1UEBhMCVFcxEjAQBgNVBAoT
-CVRBSVdBTi1DQTEQMA4GA1UECxMHUm9vdCBDQTEcMBoGA1UEAxMTVFdDQSBHbG9iYWwgUm9vdCBD
-QTAeFw0xMjA2MjcwNjI4MzNaFw0zMDEyMzExNTU5NTlaMFExCzAJBgNVBAYTAlRXMRIwEAYDVQQK
-EwlUQUlXQU4tQ0ExEDAOBgNVBAsTB1Jvb3QgQ0ExHDAaBgNVBAMTE1RXQ0EgR2xvYmFsIFJvb3Qg
-Q0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCwBdvI64zEbooh745NnHEKH1Jw7W2C
-nJfF10xORUnLQEK1EjRsGcJ0pDFfhQKX7EMzClPSnIyOt7h52yvVavKOZsTuKwEHktSz0ALfUPZV
-r2YOy+BHYC8rMjk1Ujoog/h7FsYYuGLWRyWRzvAZEk2tY/XTP3VfKfChMBwqoJimFb3u/Rk28OKR
-Q4/6ytYQJ0lM793B8YVwm8rqqFpD/G2Gb3PpN0Wp8DbHzIh1HrtsBv+baz4X7GGqcXzGHaL3SekV
-tTzWoWH1EfcFbx39Eb7QMAfCKbAJTibc46KokWofwpFFiFzlmLhxpRUZyXx1EcxwdE8tmx2RRP1W
-KKD+u4ZqyPpcC1jcxkt2yKsi2XMPpfRaAok/T54igu6idFMqPVMnaR1sjjIsZAAmY2E2TqNGtz99
-sy2sbZCilaLOz9qC5wc0GZbpuCGqKX6mOL6OKUohZnkfs8O1CWfe1tQHRvMq2uYiN2DLgbYPoA/p
-yJV/v1WRBXrPPRXAb94JlAGD1zQbzECl8LibZ9WYkTunhHiVJqRaCPgrdLQABDzfuBSO6N+pjWxn
-kjMdwLfS7JLIvgm/LCkFbwJrnu+8vyq8W8BQj0FwcYeyTbcEqYSjMq+u7msXi7Kx/mzhkIyIqJdI
-zshNy/MGz19qCkKxHh53L46g5pIOBvwFItIm4TFRfTLcDwIDAQABoyMwITAOBgNVHQ8BAf8EBAMC
-AQYwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEAXzSBdu+WHdXltdkCY4QWwa6g
-cFGn90xHNcgL1yg9iXHZqjNB6hQbbCEAwGxCGX6faVsgQt+i0trEfJdLjbDorMjupWkEmQqSpqsn
-LhpNgb+E1HAerUf+/UqdM+DyucRFCCEK2mlpc3INvjT+lIutwx4116KD7+U4x6WFH6vPNOw/KP4M
-8VeGTslV9xzU2KV9Bnpv1d8Q34FOIWWxtuEXeZVFBs5fzNxGiWNoRI2T9GRwoD2dKAXDOXC4Ynsg
-/eTb6QihuJ49CcdP+yz4k3ZB3lLg4VfSnQO8d57+nile98FRYB/e2guyLXW3Q0iT5/Z5xoRdgFlg
-lPx4mI88k1HtQJAH32RjJMtOcQWh15QaiDLxInQirqWm2BJpTGCjAu4r7NRjkgtevi92a6O2JryP
-A9gK8kxkRr05YuWW6zRjESjMlfGt7+/cgFhI6Uu46mWs6fyAtbXIRfmswZ/ZuepiiI7E8UuDEq3m
-i4TWnsLrgxifarsbJGAzcMzs9zLzXNl5fe+epP7JI8Mk7hWSsT2RTyaGvWZzJBPqpK5jwa19hAM8
-EHiGG3njxPPyBJUgriOCxLM6AGK/5jYk4Ve6xx6QddVfP5VhK8E7zeWzaGHQRiapIVJpLesux+t3
-zqY6tQMzT3bR51xUAV3LePTJDL/PEo4XLSNolOer/qmyKwbQBM0=
------END CERTIFICATE-----
-
-TeliaSonera Root CA v1
-======================
------BEGIN CERTIFICATE-----
-MIIFODCCAyCgAwIBAgIRAJW+FqD3LkbxezmCcvqLzZYwDQYJKoZIhvcNAQEFBQAwNzEUMBIGA1UE
-CgwLVGVsaWFTb25lcmExHzAdBgNVBAMMFlRlbGlhU29uZXJhIFJvb3QgQ0EgdjEwHhcNMDcxMDE4
-MTIwMDUwWhcNMzIxMDE4MTIwMDUwWjA3MRQwEgYDVQQKDAtUZWxpYVNvbmVyYTEfMB0GA1UEAwwW
-VGVsaWFTb25lcmEgUm9vdCBDQSB2MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMK+
-6yfwIaPzaSZVfp3FVRaRXP3vIb9TgHot0pGMYzHw7CTww6XScnwQbfQ3t+XmfHnqjLWCi65ItqwA
-3GV17CpNX8GH9SBlK4GoRz6JI5UwFpB/6FcHSOcZrr9FZ7E3GwYq/t75rH2D+1665I+XZ75Ljo1k
-B1c4VWk0Nj0TSO9P4tNmHqTPGrdeNjPUtAa9GAH9d4RQAEX1jF3oI7x+/jXh7VB7qTCNGdMJjmhn
-Xb88lxhTuylixcpecsHHltTbLaC0H2kD7OriUPEMPPCs81Mt8Bz17Ww5OXOAFshSsCPN4D7c3TxH
-oLs1iuKYaIu+5b9y7tL6pe0S7fyYGKkmdtwoSxAgHNN/Fnct7W+A90m7UwW7XWjH1Mh1Fj+JWov3
-F0fUTPHSiXk+TT2YqGHeOh7S+F4D4MHJHIzTjU3TlTazN19jY5szFPAtJmtTfImMMsJu7D0hADnJ
-oWjiUIMusDor8zagrC/kb2HCUQk5PotTubtn2txTuXZZNp1D5SDgPTJghSJRt8czu90VL6R4pgd7
-gUY2BIbdeTXHlSw7sKMXNeVzH7RcWe/a6hBle3rQf5+ztCo3O3CLm1u5K7fsslESl1MpWtTwEhDc
-TwK7EpIvYtQ/aUN8Ddb8WHUBiJ1YFkveupD/RwGJBmr2X7KQarMCpgKIv7NHfirZ1fpoeDVNAgMB
-AAGjPzA9MA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1UdDgQWBBTwj1k4ALP1j5qW
-DNXr+nuqF+gTEjANBgkqhkiG9w0BAQUFAAOCAgEAvuRcYk4k9AwI//DTDGjkk0kiP0Qnb7tt3oNm
-zqjMDfz1mgbldxSR651Be5kqhOX//CHBXfDkH1e3damhXwIm/9fH907eT/j3HEbAek9ALCI18Bmx
-0GtnLLCo4MBANzX2hFxc469CeP6nyQ1Q6g2EdvZR74NTxnr/DlZJLo961gzmJ1TjTQpgcmLNkQfW
-pb/ImWvtxBnmq0wROMVvMeJuScg/doAmAyYp4Db29iBT4xdwNBedY2gea+zDTYa4EzAvXUYNR0PV
-G6pZDrlcjQZIrXSHX8f8MVRBE+LHIQ6e4B4N4cB7Q4WQxYpYxmUKeFfyxiMPAdkgS94P+5KFdSpc
-c41teyWRyu5FrgZLAMzTsVlQ2jqIOylDRl6XK1TOU2+NSueW+r9xDkKLfP0ooNBIytrEgUy7onOT
-JsjrDNYmiLbAJM+7vVvrdX3pCI6GMyx5dwlppYn8s3CQh3aP0yK7Qs69cwsgJirQmz1wHiRszYd2
-qReWt88NkvuOGKmYSdGe/mBEciG5Ge3C9THxOUiIkCR1VBatzvT4aRRkOfujuLpwQMcnHL/EVlP6
-Y2XQ8xwOFvVrhlhNGNTkDY6lnVuR3HYkUD/GKvvZt5y11ubQ2egZixVxSK236thZiNSQvxaz2ems
-WWFUyBy6ysHK4bkgTI86k4mloMy/0/Z1pHWWbVY=
------END CERTIFICATE-----
-
-E-Tugra Certification Authority
-===============================
------BEGIN CERTIFICATE-----
-MIIGSzCCBDOgAwIBAgIIamg+nFGby1MwDQYJKoZIhvcNAQELBQAwgbIxCzAJBgNVBAYTAlRSMQ8w
-DQYDVQQHDAZBbmthcmExQDA+BgNVBAoMN0UtVHXEn3JhIEVCRyBCaWxpxZ9pbSBUZWtub2xvamls
-ZXJpIHZlIEhpem1ldGxlcmkgQS7Fni4xJjAkBgNVBAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBN
-ZXJrZXppMSgwJgYDVQQDDB9FLVR1Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTEzMDMw
-NTEyMDk0OFoXDTIzMDMwMzEyMDk0OFowgbIxCzAJBgNVBAYTAlRSMQ8wDQYDVQQHDAZBbmthcmEx
-QDA+BgNVBAoMN0UtVHXEn3JhIEVCRyBCaWxpxZ9pbSBUZWtub2xvamlsZXJpIHZlIEhpem1ldGxl
-cmkgQS7Fni4xJjAkBgNVBAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBNZXJrZXppMSgwJgYDVQQD
-DB9FLVR1Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0BAQEFAAOCAg8A
-MIICCgKCAgEA4vU/kwVRHoViVF56C/UYB4Oufq9899SKa6VjQzm5S/fDxmSJPZQuVIBSOTkHS0vd
-hQd2h8y/L5VMzH2nPbxHD5hw+IyFHnSOkm0bQNGZDbt1bsipa5rAhDGvykPL6ys06I+XawGb1Q5K
-CKpbknSFQ9OArqGIW66z6l7LFpp3RMih9lRozt6Plyu6W0ACDGQXwLWTzeHxE2bODHnv0ZEoq1+g
-ElIwcxmOj+GMB6LDu0rw6h8VqO4lzKRG+Bsi77MOQ7osJLjFLFzUHPhdZL3Dk14opz8n8Y4e0ypQ
-BaNV2cvnOVPAmJ6MVGKLJrD3fY185MaeZkJVgkfnsliNZvcHfC425lAcP9tDJMW/hkd5s3kc91r0
-E+xs+D/iWR+V7kI+ua2oMoVJl0b+SzGPWsutdEcf6ZG33ygEIqDUD13ieU/qbIWGvaimzuT6w+Gz
-rt48Ue7LE3wBf4QOXVGUnhMMti6lTPk5cDZvlsouDERVxcr6XQKj39ZkjFqzAQqptQpHF//vkUAq
-jqFGOjGY5RH8zLtJVor8udBhmm9lbObDyz51Sf6Pp+KJxWfXnUYTTjF2OySznhFlhqt/7x3U+Lzn
-rFpct1pHXFXOVbQicVtbC/DP3KBhZOqp12gKY6fgDT+gr9Oq0n7vUaDmUStVkhUXU8u3Zg5mTPj5
-dUyQ5xJwx0UCAwEAAaNjMGEwHQYDVR0OBBYEFC7j27JJ0JxUeVz6Jyr+zE7S6E5UMA8GA1UdEwEB
-/wQFMAMBAf8wHwYDVR0jBBgwFoAULuPbsknQnFR5XPonKv7MTtLoTlQwDgYDVR0PAQH/BAQDAgEG
-MA0GCSqGSIb3DQEBCwUAA4ICAQAFNzr0TbdF4kV1JI+2d1LoHNgQk2Xz8lkGpD4eKexd0dCrfOAK
-kEh47U6YA5n+KGCRHTAduGN8qOY1tfrTYXbm1gdLymmasoR6d5NFFxWfJNCYExL/u6Au/U5Mh/jO
-XKqYGwXgAEZKgoClM4so3O0409/lPun++1ndYYRP0lSWE2ETPo+Aab6TR7U1Q9Jauz1c77NCR807
-VRMGsAnb/WP2OogKmW9+4c4bU2pEZiNRCHu8W1Ki/QY3OEBhj0qWuJA3+GbHeJAAFS6LrVE1Uweo
-a2iu+U48BybNCAVwzDk/dr2l02cmAYamU9JgO3xDf1WKvJUawSg5TB9D0pH0clmKuVb8P7Sd2nCc
-dlqMQ1DujjByTd//SffGqWfZbawCEeI6FiWnWAjLb1NBnEg4R2gz0dfHj9R0IdTDBZB6/86WiLEV
-KV0jq9BgoRJP3vQXzTLlyb/IQ639Lo7xr+L0mPoSHyDYwKcMhcWQ9DstliaxLL5Mq+ux0orJ23gT
-Dx4JnW2PAJ8C2sH6H3p6CcRK5ogql5+Ji/03X186zjhZhkuvcQu02PJwT58yE+Owp1fl2tpDy4Q0
-8ijE6m30Ku/Ba3ba+367hTzSU8JNvnHhRdH9I2cNE3X7z2VnIp2usAnRCf8dNL/+I5c30jn6PQ0G
-C7TbO6Orb1wdtn7os4I07QZcJA==
------END CERTIFICATE-----
-
-T-TeleSec GlobalRoot Class 2
-============================
------BEGIN CERTIFICATE-----
-MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoM
-IlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBU
-cnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwHhcNMDgx
-MDAxMTA0MDE0WhcNMzMxMDAxMjM1OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lz
-dGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBD
-ZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwggEiMA0GCSqGSIb3
-DQEBAQUAA4IBDwAwggEKAoIBAQCqX9obX+hzkeXaXPSi5kfl82hVYAUdAqSzm1nzHoqvNK38DcLZ
-SBnuaY/JIPwhqgcZ7bBcrGXHX+0CfHt8LRvWurmAwhiCFoT6ZrAIxlQjgeTNuUk/9k9uN0goOA/F
-vudocP05l03Sx5iRUKrERLMjfTlH6VJi1hKTXrcxlkIF+3anHqP1wvzpesVsqXFP6st4vGCvx970
-2cu+fjOlbpSD8DT6IavqjnKgP6TeMFvvhk1qlVtDRKgQFRzlAVfFmPHmBiiRqiDFt1MmUUOyCxGV
-WOHAD3bZwI18gfNycJ5v/hqO2V81xrJvNHy+SE/iWjnX2J14np+GPgNeGYtEotXHAgMBAAGjQjBA
-MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS/WSA2AHmgoCJrjNXy
-YdK4LMuCSjANBgkqhkiG9w0BAQsFAAOCAQEAMQOiYQsfdOhyNsZt+U2e+iKo4YFWz827n+qrkRk4
-r6p8FU3ztqONpfSO9kSpp+ghla0+AGIWiPACuvxhI+YzmzB6azZie60EI4RYZeLbK4rnJVM3YlNf
-vNoBYimipidx5joifsFvHZVwIEoHNN/q/xWA5brXethbdXwFeilHfkCoMRN3zUA7tFFHei4R40cR
-3p1m0IvVVGb6g1XqfMIpiRvpb7PO4gWEyS8+eIVibslfwXhjdFjASBgMmTnrpMwatXlajRWc2BQN
-9noHV8cigwUtPJslJj0Ys6lDfMjIq2SPDqO/nBudMNva0Bkuqjzx+zOAduTNrRlPBSeOE6Fuwg==
------END CERTIFICATE-----
-
-Atos TrustedRoot 2011
-=====================
------BEGIN CERTIFICATE-----
-MIIDdzCCAl+gAwIBAgIIXDPLYixfszIwDQYJKoZIhvcNAQELBQAwPDEeMBwGA1UEAwwVQXRvcyBU
-cnVzdGVkUm9vdCAyMDExMQ0wCwYDVQQKDARBdG9zMQswCQYDVQQGEwJERTAeFw0xMTA3MDcxNDU4
-MzBaFw0zMDEyMzEyMzU5NTlaMDwxHjAcBgNVBAMMFUF0b3MgVHJ1c3RlZFJvb3QgMjAxMTENMAsG
-A1UECgwEQXRvczELMAkGA1UEBhMCREUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCV
-hTuXbyo7LjvPpvMpNb7PGKw+qtn4TaA+Gke5vJrf8v7MPkfoepbCJI419KkM/IL9bcFyYie96mvr
-54rMVD6QUM+A1JX76LWC1BTFtqlVJVfbsVD2sGBkWXppzwO3bw2+yj5vdHLqqjAqc2K+SZFhyBH+
-DgMq92og3AIVDV4VavzjgsG1xZ1kCWyjWZgHJ8cblithdHFsQ/H3NYkQ4J7sVaE3IqKHBAUsR320
-HLliKWYoyrfhk/WklAOZuXCFteZI6o1Q/NnezG8HDt0Lcp2AMBYHlT8oDv3FdU9T1nSatCQujgKR
-z3bFmx5VdJx4IbHwLfELn8LVlhgf8FQieowHAgMBAAGjfTB7MB0GA1UdDgQWBBSnpQaxLKYJYO7R
-l+lwrrw7GWzbITAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKelBrEspglg7tGX6XCuvDsZ
-bNshMBgGA1UdIAQRMA8wDQYLKwYBBAGwLQMEAQEwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEB
-CwUAA4IBAQAmdzTblEiGKkGdLD4GkGDEjKwLVLgfuXvTBznk+j57sj1O7Z8jvZfza1zv7v1Apt+h
-k6EKhqzvINB5Ab149xnYJDE0BAGmuhWawyfc2E8PzBhj/5kPDpFrdRbhIfzYJsdHt6bPWHJxfrrh
-TZVHO8mvbaG0weyJ9rQPOLXiZNwlz6bb65pcmaHFCN795trV1lpFDMS3wrUU77QR/w4VtfX128a9
-61qn8FYiqTxlVMYVqL2Gns2Dlmh6cYGJ4Qvh6hEbaAjMaZ7snkGeRDImeuKHCnE96+RapNLbxc3G
-3mB/ufNPRJLvKrcYPqcZ2Qt9sTdBQrC6YB3y/gkRsPCHe6ed
------END CERTIFICATE-----
diff --git a/core/vendor/guzzlehttp/guzzle/src/functions.php b/core/vendor/guzzlehttp/guzzle/src/functions.php
deleted file mode 100644
index 46d4c4d39f383719ae1381380019dde4e8be4d2a..0000000000000000000000000000000000000000
--- a/core/vendor/guzzlehttp/guzzle/src/functions.php
+++ /dev/null
@@ -1,338 +0,0 @@
-<?php
-
-namespace GuzzleHttp;
-
-use GuzzleHttp\Event\CompleteEvent;
-use GuzzleHttp\Event\ErrorEvent;
-use GuzzleHttp\Event\RequestEvents;
-use GuzzleHttp\Message\ResponseInterface;
-use GuzzleHttp\UriTemplate;
-
-if (!defined('GUZZLE_FUNCTIONS_VERSION')) {
-
-    define('GUZZLE_FUNCTIONS_VERSION', ClientInterface::VERSION);
-
-    /**
-     * Send a custom request
-     *
-     * @param string $method  HTTP request method
-     * @param string $url     URL of the request
-     * @param array  $options Options to use with the request.
-     *
-     * @return ResponseInterface
-     */
-    function request($method, $url, array $options = [])
-    {
-        static $client;
-        if (!$client) {
-            $client = new Client();
-        }
-
-        return $client->send($client->createRequest($method, $url, $options));
-    }
-
-    /**
-     * Send a GET request
-     *
-     * @param string $url     URL of the request
-     * @param array  $options Array of request options
-     *
-     * @return ResponseInterface
-     */
-    function get($url, array $options = [])
-    {
-        return request('GET', $url, $options);
-    }
-
-    /**
-     * Send a HEAD request
-     *
-     * @param string $url     URL of the request
-     * @param array  $options Array of request options
-     *
-     * @return ResponseInterface
-     */
-    function head($url, array $options = [])
-    {
-        return request('HEAD', $url, $options);
-    }
-
-    /**
-     * Send a DELETE request
-     *
-     * @param string $url     URL of the request
-     * @param array  $options Array of request options
-     *
-     * @return ResponseInterface
-     */
-    function delete($url, array $options = [])
-    {
-        return request('DELETE', $url, $options);
-    }
-
-    /**
-     * Send a POST request
-     *
-     * @param string $url     URL of the request
-     * @param array  $options Array of request options
-     *
-     * @return ResponseInterface
-     */
-    function post($url, array $options = [])
-    {
-        return request('POST', $url, $options);
-    }
-
-    /**
-     * Send a PUT request
-     *
-     * @param string $url     URL of the request
-     * @param array  $options Array of request options
-     *
-     * @return ResponseInterface
-     */
-    function put($url, array $options = [])
-    {
-        return request('PUT', $url, $options);
-    }
-
-    /**
-     * Send a PATCH request
-     *
-     * @param string $url     URL of the request
-     * @param array  $options Array of request options
-     *
-     * @return ResponseInterface
-     */
-    function patch($url, array $options = [])
-    {
-        return request('PATCH', $url, $options);
-    }
-
-    /**
-     * Send an OPTIONS request
-     *
-     * @param string $url     URL of the request
-     * @param array  $options Array of request options
-     *
-     * @return ResponseInterface
-     */
-    function options($url, array $options = [])
-    {
-        return request('OPTIONS', $url, $options);
-    }
-
-    /**
-     * Convenience method for sending multiple requests in parallel and
-     * retrieving a hash map of requests to response objects or
-     * RequestException objects.
-     *
-     * Note: This method keeps every request and response in memory, and as
-     * such is NOT recommended when sending a large number or an indeterminable
-     * number of requests in parallel.
-     *
-     * @param ClientInterface $client   Client used to send the requests
-     * @param array|\Iterator $requests Requests to send in parallel
-     * @param array           $options  Passes through the options available in
-     *                                  {@see GuzzleHttp\ClientInterface::sendAll()}
-     *
-     * @return \SplObjectStorage Requests are the key and each value is a
-     *     {@see GuzzleHttp\Message\ResponseInterface} if the request succeeded
-     *     or a {@see GuzzleHttp\Exception\RequestException} if it failed.
-     * @throws \InvalidArgumentException if the event format is incorrect.
-     */
-    function batch(ClientInterface $client, $requests, array $options = [])
-    {
-        $hash = new \SplObjectStorage();
-        foreach ($requests as $request) {
-            $hash->attach($request);
-        }
-
-        // Merge the necessary complete and error events to the event listeners
-        // so that as each request succeeds or fails, it is added to the result
-        // hash.
-        $options = RequestEvents::convertEventArray(
-            $options,
-            ['complete', 'error'],
-            [
-                'priority' => RequestEvents::EARLY,
-                'once' => true,
-                'fn' => function ($e) use ($hash) {
-                    $hash[$e->getRequest()] = $e;
-                }
-            ]
-        );
-
-        // Send the requests in parallel and aggregate the results.
-        $client->sendAll($requests, $options);
-
-        // Update the received value for any of the intercepted requests.
-        foreach ($hash as $request) {
-            if ($hash[$request] instanceof CompleteEvent) {
-                $hash[$request] = $hash[$request]->getResponse();
-            } elseif ($hash[$request] instanceof ErrorEvent) {
-                $hash[$request] = $hash[$request]->getException();
-            }
-        }
-
-        return $hash;
-    }
-
-    /**
-     * Gets a value from an array using a path syntax to retrieve nested data.
-     *
-     * This method does not allow for keys that contain "/". You must traverse
-     * the array manually or using something more advanced like JMESPath to
-     * work with keys that contain "/".
-     *
-     *     // Get the bar key of a set of nested arrays.
-     *     // This is equivalent to $collection['foo']['baz']['bar'] but won't
-     *     // throw warnings for missing keys.
-     *     GuzzleHttp\get_path($data, 'foo/baz/bar');
-     *
-     * @param array  $data Data to retrieve values from
-     * @param string $path Path to traverse and retrieve a value from
-     *
-     * @return mixed|null
-     */
-    function get_path($data, $path)
-    {
-        $path = explode('/', $path);
-
-        while (null !== ($part = array_shift($path))) {
-            if (!is_array($data) || !isset($data[$part])) {
-                return null;
-            }
-            $data = $data[$part];
-        }
-
-        return $data;
-    }
-
-    /**
-     * Set a value in a nested array key. Keys will be created as needed to set
-     * the value.
-     *
-     * This function does not support keys that contain "/" or "[]" characters
-     * because these are special tokens used when traversing the data structure.
-     * A value may be prepended to an existing array by using "[]" as the final
-     * key of a path.
-     *
-     *     GuzzleHttp\get_path($data, 'foo/baz'); // null
-     *     GuzzleHttp\set_path($data, 'foo/baz/[]', 'a');
-     *     GuzzleHttp\set_path($data, 'foo/baz/[]', 'b');
-     *     GuzzleHttp\get_path($data, 'foo/baz');
-     *     // Returns ['a', 'b']
-     *
-     * @param array  $data  Data to modify by reference
-     * @param string $path  Path to set
-     * @param mixed  $value Value to set at the key
-     *
-     * @throws \RuntimeException when trying to setPath using a nested path
-     *     that travels through a scalar value.
-     */
-    function set_path(&$data, $path, $value)
-    {
-        $current =& $data;
-        $queue = explode('/', $path);
-        while (null !== ($key = array_shift($queue))) {
-            if (!is_array($current)) {
-                throw new \RuntimeException("Trying to setPath {$path}, but "
-                    . "{$key} is set and is not an array");
-            } elseif (!$queue) {
-                if ($key == '[]') {
-                    $current[] = $value;
-                } else {
-                    $current[$key] = $value;
-                }
-            } elseif (isset($current[$key])) {
-                $current =& $current[$key];
-            } else {
-                $current[$key] = [];
-                $current =& $current[$key];
-            }
-        }
-    }
-
-    /**
-     * Expands a URI template
-     *
-     * @param string $template  URI template
-     * @param array  $variables Template variables
-     *
-     * @return string
-     */
-    function uri_template($template, array $variables)
-    {
-        if (function_exists('\\uri_template')) {
-            return \uri_template($template, $variables);
-        }
-
-        static $uriTemplate;
-        if (!$uriTemplate) {
-            $uriTemplate = new UriTemplate();
-        }
-
-        return $uriTemplate->expand($template, $variables);
-    }
-
-    /**
-     * Wrapper for JSON decode that implements error detection with helpful
-     * error messages.
-     *
-     * @param string $json    JSON data to parse
-     * @param bool $assoc     When true, returned objects will be converted
-     *                        into associative arrays.
-     * @param int    $depth   User specified recursion depth.
-     * @param int    $options Bitmask of JSON decode options.
-     *
-     * @return mixed
-     * @throws \InvalidArgumentException if the JSON cannot be parsed.
-     * @link http://www.php.net/manual/en/function.json-decode.php
-     */
-    function json_decode($json, $assoc = false, $depth = 512, $options = 0)
-    {
-        static $jsonErrors = [
-            JSON_ERROR_DEPTH => 'JSON_ERROR_DEPTH - Maximum stack depth exceeded',
-            JSON_ERROR_STATE_MISMATCH => 'JSON_ERROR_STATE_MISMATCH - Underflow or the modes mismatch',
-            JSON_ERROR_CTRL_CHAR => 'JSON_ERROR_CTRL_CHAR - Unexpected control character found',
-            JSON_ERROR_SYNTAX => 'JSON_ERROR_SYNTAX - Syntax error, malformed JSON',
-            JSON_ERROR_UTF8 => 'JSON_ERROR_UTF8 - Malformed UTF-8 characters, possibly incorrectly encoded'
-        ];
-
-        $data = \json_decode($json, $assoc, $depth, $options);
-
-        if (JSON_ERROR_NONE !== json_last_error()) {
-            $last = json_last_error();
-            throw new \InvalidArgumentException(
-                'Unable to parse JSON data: '
-                . (isset($jsonErrors[$last])
-                    ? $jsonErrors[$last]
-                    : 'Unknown error')
-            );
-        }
-
-        return $data;
-    }
-
-    /**
-     * @internal
-     */
-    function deprecation_proxy($object, $name, $arguments, $map)
-    {
-        if (!isset($map[$name])) {
-            throw new \BadMethodCallException('Unknown method, ' . $name);
-        }
-
-        $message = sprintf('%s is deprecated and will be removed in a future '
-            . 'version. Update your code to use the equivalent %s method '
-            . 'instead to avoid breaking changes when this shim is removed.',
-            get_class($object) . '::' . $name . '()',
-            get_class($object) . '::' . $map[$name] . '()'
-        );
-
-        trigger_error($message, E_USER_DEPRECATED);
-
-        return call_user_func_array([$object, $map[$name]], $arguments);
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Adapter/Curl/AbstractCurl.php b/core/vendor/guzzlehttp/guzzle/tests/Adapter/Curl/AbstractCurl.php
deleted file mode 100644
index fa8f1716d8853937a752e10a34eefc9ad175c9ff..0000000000000000000000000000000000000000
--- a/core/vendor/guzzlehttp/guzzle/tests/Adapter/Curl/AbstractCurl.php
+++ /dev/null
@@ -1,92 +0,0 @@
-<?php
-
-namespace GuzzleHttp\Tests\Adapter\Curl;
-
-use GuzzleHttp\Adapter\Transaction;
-use GuzzleHttp\Client;
-use GuzzleHttp\Event\CompleteEvent;
-use GuzzleHttp\Event\ErrorEvent;
-use GuzzleHttp\Exception\RequestException;
-use GuzzleHttp\Message\Request;
-use GuzzleHttp\Message\Response;
-use GuzzleHttp\Tests\Server;
-use GuzzleHttp\Url;
-
-abstract class AbstractCurl extends \PHPUnit_Framework_TestCase
-{
-    abstract protected function getAdapter($factory = null, $options = []);
-
-    public function testSendsRequest()
-    {
-        Server::flush();
-        Server::enqueue("HTTP/1.1 200 OK\r\nFoo: bar\r\nContent-Length: 0\r\n\r\n");
-        $t = new Transaction(new Client(), new Request('GET', Server::$url));
-        $a = $this->getAdapter();
-        $response = $a->send($t);
-        $this->assertEquals(200, $response->getStatusCode());
-        $this->assertEquals('bar', $response->getHeader('Foo'));
-    }
-
-    /**
-     * @expectedException \GuzzleHttp\Exception\RequestException
-     */
-    public function testCatchesErrorWhenPreparing()
-    {
-        $r = new Request('GET', Server::$url);
-        $f = $this->getMockBuilder('GuzzleHttp\Adapter\Curl\CurlFactory')
-            ->setMethods(['__invoke'])
-            ->getMock();
-        $f->expects($this->once())
-            ->method('__invoke')
-            ->will($this->throwException(new RequestException('foo', $r)));
-
-        $t = new Transaction(new Client(), $r);
-        $a = $this->getAdapter(null, ['handle_factory' => $f]);
-        $a->send($t);
-    }
-
-    public function testDispatchesAfterSendEvent()
-    {
-        Server::flush();
-        Server::enqueue("HTTP/1.1 201 OK\r\nContent-Length: 0\r\n\r\n");
-        $r = new Request('GET', Server::$url);
-        $t = new Transaction(new Client(), $r);
-        $a = $this->getAdapter();
-        $ev = null;
-        $r->getEmitter()->on('complete', function (CompleteEvent $e) use (&$ev) {
-            $ev = $e;
-            $e->intercept(new Response(200, ['Foo' => 'bar']));
-        });
-        $response = $a->send($t);
-        $this->assertEquals(200, $response->getStatusCode());
-        $this->assertEquals('bar', $response->getHeader('Foo'));
-    }
-
-    public function testDispatchesErrorEventAndRecovers()
-    {
-        Server::flush();
-        Server::enqueue("HTTP/1.1 201 OK\r\nContent-Length: 0\r\n\r\n");
-        $r = new Request('GET', Server::$url);
-        $t = new Transaction(new Client(), $r);
-        $a = $this->getAdapter();
-        $r->getEmitter()->once('complete', function (CompleteEvent $e) {
-            throw new RequestException('Foo', $e->getRequest());
-        });
-        $r->getEmitter()->on('error', function (ErrorEvent $e) {
-            $e->intercept(new Response(200, ['Foo' => 'bar']));
-        });
-        $response = $a->send($t);
-        $this->assertEquals(200, $response->getStatusCode());
-        $this->assertEquals('bar', $response->getHeader('Foo'));
-    }
-
-    public function testStripsFragmentFromHost()
-    {
-        Server::flush();
-        Server::enqueue("HTTP/1.1 200 OK\r\n\r\nContent-Length: 0\r\n\r\n");
-        // This will fail if the removal of the #fragment is not performed
-        $url = Url::fromString(Server::$url)->setPath(null)->setFragment('foo');
-        $client = new Client();
-        $client->get($url);
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Adapter/Curl/BatchContextTest.php b/core/vendor/guzzlehttp/guzzle/tests/Adapter/Curl/BatchContextTest.php
deleted file mode 100644
index 56266bac145b37572988c9b6db962006fe6e6501..0000000000000000000000000000000000000000
--- a/core/vendor/guzzlehttp/guzzle/tests/Adapter/Curl/BatchContextTest.php
+++ /dev/null
@@ -1,95 +0,0 @@
-<?php
-
-namespace GuzzleHttp\Tests\Adapter\Curl;
-
-use GuzzleHttp\Adapter\Curl\BatchContext;
-use GuzzleHttp\Adapter\Transaction;
-use GuzzleHttp\Client;
-use GuzzleHttp\Message\Request;
-
-/**
- * @covers GuzzleHttp\Adapter\Curl\BatchContext
- */
-class BatchContextTest extends \PHPUnit_Framework_TestCase
-{
-    public function testProvidesGetters()
-    {
-        $m = curl_multi_init();
-        $b = new BatchContext($m, true);
-        $this->assertTrue($b->throwsExceptions());
-        $this->assertSame($m, $b->getMultiHandle());
-        $this->assertFalse($b->hasPending());
-        curl_multi_close($m);
-    }
-
-    public function testValidatesTransactionsAreNotAddedTwice()
-    {
-        $m = curl_multi_init();
-        $b = new BatchContext($m, true);
-        $h = curl_init();
-        $t = new Transaction(
-            new Client(),
-            new Request('GET', 'http://httbin.org')
-        );
-        $b->addTransaction($t, $h);
-        try {
-            $b->addTransaction($t, $h);
-            $this->fail('Did not throw');
-        } catch (\RuntimeException $e) {
-            curl_close($h);
-            curl_multi_close($m);
-        }
-    }
-
-    public function testManagesHandles()
-    {
-        $m = curl_multi_init();
-        $b = new BatchContext($m, true);
-        $h = curl_init();
-        $t = new Transaction(
-            new Client(),
-            new Request('GET', 'http://httbin.org')
-        );
-        $b->addTransaction($t, $h);
-        $this->assertTrue($b->isActive());
-        $this->assertSame($t, $b->findTransaction($h));
-        $b->removeTransaction($t);
-        $this->assertFalse($b->isActive());
-        try {
-            $this->assertEquals([], $b->findTransaction($h));
-            $this->fail('Did not throw');
-        } catch (\RuntimeException $e) {}
-        curl_multi_close($m);
-    }
-
-    /**
-     * @expectedException \RuntimeException
-     * @expectedExceptionMessage Transaction not registered
-     */
-    public function testThrowsWhenRemovingNonExistentTransaction()
-    {
-        $b = new BatchContext('foo', false);
-        $t = new Transaction(
-            new Client(),
-            new Request('GET', 'http://httbin.org')
-        );
-        $b->removeTransaction($t);
-    }
-
-    public function testReturnsPendingAsIteratorTypeObject()
-    {
-        $t1 = new Transaction(new Client(), new Request('GET', 'http://t.com'));
-        $t2 = new Transaction(new Client(), new Request('GET', 'http://t.com'));
-        $t3 = new Transaction(new Client(), new Request('GET', 'http://t.com'));
-        $iter = new \ArrayIterator([$t1, $t2, $t3]);
-        $b = new BatchContext('foo', false, $iter);
-        $this->assertTrue($b->hasPending());
-        $this->assertSame($t1, $b->nextPending());
-        $this->assertTrue($b->hasPending());
-        $this->assertSame($t2, $b->nextPending());
-        $this->assertTrue($b->hasPending());
-        $this->assertSame($t3, $b->nextPending());
-        $this->assertFalse($b->hasPending());
-        $this->assertNull($b->nextPending());
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Adapter/Curl/CurlAdapterTest.php b/core/vendor/guzzlehttp/guzzle/tests/Adapter/Curl/CurlAdapterTest.php
deleted file mode 100644
index dbbdeed8d89731fa9d122a1a9fcfbbe97277afd2..0000000000000000000000000000000000000000
--- a/core/vendor/guzzlehttp/guzzle/tests/Adapter/Curl/CurlAdapterTest.php
+++ /dev/null
@@ -1,139 +0,0 @@
-<?php
-
-namespace GuzzleHttp\Tests\Adapter\Curl;
-
-require_once __DIR__ . '/AbstractCurl.php';
-
-use GuzzleHttp\Adapter\Curl\CurlAdapter;
-use GuzzleHttp\Adapter\Transaction;
-use GuzzleHttp\Client;
-use GuzzleHttp\Event\ErrorEvent;
-use GuzzleHttp\Event\HeadersEvent;
-use GuzzleHttp\Exception\ServerException;
-use GuzzleHttp\Message\MessageFactory;
-use GuzzleHttp\Message\Request;
-use GuzzleHttp\Event\BeforeEvent;
-use GuzzleHttp\Message\Response;
-use GuzzleHttp\Tests\Server;
-
-/**
- * @covers GuzzleHttp\Adapter\Curl\CurlAdapter
- */
-class CurlAdapterTest extends AbstractCurl
-{
-    protected function setUp()
-    {
-        if (!function_exists('curl_reset')) {
-            $this->markTestSkipped('curl_reset() is not available');
-        }
-    }
-
-    protected function getAdapter($factory = null, $options = [])
-    {
-        return new CurlAdapter($factory ?: new MessageFactory(), $options);
-    }
-
-    public function testCanSetMaxHandles()
-    {
-        $a = new CurlAdapter(new MessageFactory(), ['max_handles' => 10]);
-        $this->assertEquals(10, $this->readAttribute($a, 'maxHandles'));
-    }
-
-    public function testCanInterceptBeforeSending()
-    {
-        $client = new Client();
-        $request = new Request('GET', 'http://httpbin.org/get');
-        $response = new Response(200);
-        $request->getEmitter()->on(
-            'before',
-            function (BeforeEvent $e) use ($response) {
-                $e->intercept($response);
-            }
-        );
-        $transaction = new Transaction($client, $request);
-        $f = 'does_not_work';
-        $a = new CurlAdapter(new MessageFactory(), ['handle_factory' => $f]);
-        $a->send($transaction);
-        $this->assertSame($response, $transaction->getResponse());
-    }
-
-    /**
-     * @expectedException \GuzzleHttp\Exception\RequestException
-     * @expectedExceptionMessage cURL error
-     */
-    public function testThrowsCurlErrors()
-    {
-        $client = new Client();
-        $request = $client->createRequest('GET', 'http://localhost:123', [
-            'connect_timeout' => 0.001,
-            'timeout' => 0.001,
-        ]);
-        $transaction = new Transaction($client, $request);
-        $a = new CurlAdapter(new MessageFactory());
-        $a->send($transaction);
-    }
-
-    public function testHandlesCurlErrors()
-    {
-        $client = new Client();
-        $request = $client->createRequest('GET', 'http://localhost:123', [
-            'connect_timeout' => 0.001,
-            'timeout' => 0.001,
-        ]);
-        $r = new Response(200);
-        $request->getEmitter()->on('error', function (ErrorEvent $e) use ($r) {
-            $e->intercept($r);
-        });
-        $transaction = new Transaction($client, $request);
-        $a = new CurlAdapter(new MessageFactory());
-        $a->send($transaction);
-        $this->assertSame($r, $transaction->getResponse());
-    }
-
-    public function testReleasesAdditionalEasyHandles()
-    {
-        Server::flush();
-        Server::enqueue([
-            "HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n",
-            "HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n",
-            "HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n",
-            "HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n"
-        ]);
-        $a = new CurlAdapter(new MessageFactory(), ['max_handles' => 2]);
-        $client = new Client(['base_url' => Server::$url, 'adapter' => $a]);
-        $request = $client->createRequest('GET', '/', [
-            'events' => [
-                'headers' => function (HeadersEvent $e) use ($client) {
-                    $client->get('/', [
-                        'events' => [
-                            'headers' => function (HeadersEvent $e) {
-                                $e->getClient()->get('/');
-                            }
-                        ]
-                    ]);
-                }
-            ]
-        ]);
-        $transaction = new Transaction($client, $request);
-        $a->send($transaction);
-        $this->assertCount(2, $this->readAttribute($a, 'handles'));
-    }
-
-    public function testDoesNotSaveToWhenFailed()
-    {
-        Server::flush();
-        Server::enqueue([
-            "HTTP/1.1 500 Internal Server Error\r\nContent-Length: 0\r\n\r\n"
-        ]);
-
-        $tmp = tempnam('/tmp', 'test_save_to');
-        unlink($tmp);
-        $a = new CurlAdapter(new MessageFactory());
-        $client = new Client(['base_url' => Server::$url, 'adapter' => $a]);
-        try {
-            $client->get('/', ['save_to' => $tmp]);
-        } catch (ServerException $e) {
-            $this->assertFileNotExists($tmp);
-        }
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Adapter/Curl/CurlFactoryTest.php b/core/vendor/guzzlehttp/guzzle/tests/Adapter/Curl/CurlFactoryTest.php
deleted file mode 100644
index d62283b00766a8122d2a84d20d6b8c3588b63890..0000000000000000000000000000000000000000
--- a/core/vendor/guzzlehttp/guzzle/tests/Adapter/Curl/CurlFactoryTest.php
+++ /dev/null
@@ -1,335 +0,0 @@
-<?php
-
-// Override curl_setopt_array() to get the last set curl options
-namespace GuzzleHttp\Adapter\Curl
-{
-    function curl_setopt_array($handle, array $options)
-    {
-        $_SERVER['last_curl'] = $options;
-        \curl_setopt_array($handle, $options);
-    }
-}
-
-namespace GuzzleHttp\Tests\Adapter\Curl {
-
-    use GuzzleHttp\Adapter\Curl\MultiAdapter;
-    use GuzzleHttp\Event\BeforeEvent;
-    use GuzzleHttp\Exception\ServerException;
-    use GuzzleHttp\Message\RequestInterface;
-    use GuzzleHttp\Stream\Stream;
-    use GuzzleHttp\Adapter\Curl\CurlFactory;
-    use GuzzleHttp\Adapter\Transaction;
-    use GuzzleHttp\Client;
-    use GuzzleHttp\Message\MessageFactory;
-    use GuzzleHttp\Message\Request;
-    use GuzzleHttp\Tests\Server;
-
-    /**
-     * @covers GuzzleHttp\Adapter\Curl\CurlFactory
-     */
-    class CurlFactoryTest extends \PHPUnit_Framework_TestCase
-    {
-        /** @var \GuzzleHttp\Tests\Server */
-        static $server;
-
-        public static function setUpBeforeClass()
-        {
-            unset($_SERVER['last_curl']);
-        }
-
-        public static function tearDownAfterClass()
-        {
-            unset($_SERVER['last_curl']);
-        }
-
-        public function testCreatesCurlHandle()
-        {
-            Server::flush();
-            Server::enqueue(["HTTP/1.1 200 OK\r\nFoo: Bar\r\n Baz:  bam\r\nContent-Length: 2\r\n\r\nhi"]);
-            $request = new Request(
-                'PUT',
-                Server::$url . 'haha',
-                ['Hi' => ' 123'],
-                Stream::factory('testing')
-            );
-            $stream = Stream::factory();
-            $request->getConfig()->set('save_to', $stream);
-            $request->getConfig()->set('verify', true);
-            $this->emit($request);
-
-            $t = new Transaction(new Client(), $request);
-            $f = new CurlFactory();
-            $h = $f($t, new MessageFactory());
-            $this->assertInternalType('resource', $h);
-            curl_exec($h);
-            $response = $t->getResponse();
-            $this->assertInstanceOf('GuzzleHttp\Message\ResponseInterface', $response);
-            $this->assertEquals('hi', $response->getBody());
-            $this->assertEquals('Bar', $response->getHeader('Foo'));
-            $this->assertEquals('bam', $response->getHeader('Baz'));
-            curl_close($h);
-
-            $sent = Server::received(true)[0];
-            $this->assertEquals('PUT', $sent->getMethod());
-            $this->assertEquals('/haha', $sent->getPath());
-            $this->assertEquals('123', $sent->getHeader('Hi'));
-            $this->assertEquals('7', $sent->getHeader('Content-Length'));
-            $this->assertEquals('testing', $sent->getBody());
-            $this->assertEquals('1.1', $sent->getProtocolVersion());
-            $this->assertEquals('hi', (string) $stream);
-
-            $this->assertEquals(2, $_SERVER['last_curl'][CURLOPT_SSL_VERIFYHOST]);
-            $this->assertEquals(true, $_SERVER['last_curl'][CURLOPT_SSL_VERIFYPEER]);
-        }
-
-        public function testSendsHeadRequests()
-        {
-            Server::flush();
-            Server::enqueue(["HTTP/1.1 200 OK\r\nContent-Length: 2\r\n\r\n"]);
-            $request = new Request('HEAD', Server::$url);
-            $this->emit($request);
-
-            $t = new Transaction(new Client(), $request);
-            $f = new CurlFactory();
-            $h = $f($t, new MessageFactory());
-            curl_exec($h);
-            curl_close($h);
-            $response = $t->getResponse();
-            $this->assertEquals('2', $response->getHeader('Content-Length'));
-            $this->assertEquals('', $response->getBody());
-
-            $sent = Server::received(true)[0];
-            $this->assertEquals('HEAD', $sent->getMethod());
-            $this->assertEquals('/', $sent->getPath());
-        }
-
-        public function testSendsPostRequestWithNoBody()
-        {
-            Server::flush();
-            Server::enqueue(["HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n"]);
-            $request = new Request('POST', Server::$url);
-            $this->emit($request);
-            $t = new Transaction(new Client(), $request);
-            $f = new CurlFactory();
-            $h = $f($t, new MessageFactory());
-            curl_exec($h);
-            curl_close($h);
-            $sent = Server::received(true)[0];
-            $this->assertEquals('POST', $sent->getMethod());
-            $this->assertEquals('', $sent->getBody());
-        }
-
-        public function testSendsChunkedRequests()
-        {
-            $stream = $this->getMockBuilder('GuzzleHttp\Stream\Stream')
-                ->setConstructorArgs([fopen('php://temp', 'r+')])
-                ->setMethods(['getSize'])
-                ->getMock();
-            $stream->expects($this->any())
-                ->method('getSize')
-                ->will($this->returnValue(null));
-            $stream->write('foo');
-            $stream->seek(0);
-
-            Server::flush();
-            Server::enqueue(["HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n"]);
-            $request = new Request('PUT', Server::$url, [], $stream);
-            $this->emit($request);
-            $this->assertNull($request->getBody()->getSize());
-            $t = new Transaction(new Client(), $request);
-            $f = new CurlFactory();
-            $h = $f($t, new MessageFactory());
-            curl_exec($h);
-            curl_close($h);
-            $sent = Server::received(false)[0];
-            $this->assertContains('PUT / HTTP/1.1', $sent);
-            $this->assertContains('transfer-encoding: chunked', strtolower($sent));
-            $this->assertContains("\r\n\r\nfoo", $sent);
-        }
-
-        public function testDecodesGzippedResponses()
-        {
-            Server::flush();
-            Server::enqueue(["HTTP/1.1 200 OK\r\nContent-Length: 3\r\n\r\nfoo"]);
-            $request = new Request('GET', Server::$url, ['Accept-Encoding' => '']);
-            $this->emit($request);
-            $t = new Transaction(new Client(), $request);
-            $f = new CurlFactory();
-            $h = $f($t, new MessageFactory());
-            curl_exec($h);
-            curl_close($h);
-            $this->assertEquals('foo', $t->getResponse()->getBody());
-            $sent = Server::received(true)[0];
-            $this->assertContains('gzip', $sent->getHeader('Accept-Encoding'));
-        }
-
-        public function testAddsDebugInfoToBuffer()
-        {
-            $r = fopen('php://temp', 'r+');
-            Server::flush();
-            Server::enqueue(["HTTP/1.1 200 OK\r\nContent-Length: 3\r\n\r\nfoo"]);
-            $request = new Request('GET', Server::$url);
-            $request->getConfig()->set('debug', $r);
-            $this->emit($request);
-            $t = new Transaction(new Client(), $request);
-            $f = new CurlFactory();
-            $h = $f($t, new MessageFactory());
-            curl_exec($h);
-            curl_close($h);
-            rewind($r);
-            $this->assertNotEmpty(stream_get_contents($r));
-        }
-
-        public function testAddsProxyOptions()
-        {
-            $request = new Request('GET', Server::$url);
-            $this->emit($request);
-            $request->getConfig()->set('proxy', '123');
-            $request->getConfig()->set('connect_timeout', 1);
-            $request->getConfig()->set('timeout', 2);
-            $request->getConfig()->set('cert', __FILE__);
-            $request->getConfig()->set('ssl_key', [__FILE__, '123']);
-            $request->getConfig()->set('verify', false);
-            $t = new Transaction(new Client(), $request);
-            $f = new CurlFactory();
-            curl_close($f($t, new MessageFactory()));
-            $this->assertEquals('123', $_SERVER['last_curl'][CURLOPT_PROXY]);
-            $this->assertEquals(1000, $_SERVER['last_curl'][CURLOPT_CONNECTTIMEOUT_MS]);
-            $this->assertEquals(2000, $_SERVER['last_curl'][CURLOPT_TIMEOUT_MS]);
-            $this->assertEquals(__FILE__, $_SERVER['last_curl'][CURLOPT_SSLCERT]);
-            $this->assertEquals(__FILE__, $_SERVER['last_curl'][CURLOPT_SSLKEY]);
-            $this->assertEquals('123', $_SERVER['last_curl'][CURLOPT_SSLKEYPASSWD]);
-            $this->assertEquals(0, $_SERVER['last_curl'][CURLOPT_SSL_VERIFYHOST]);
-            $this->assertEquals(false, $_SERVER['last_curl'][CURLOPT_SSL_VERIFYPEER]);
-        }
-
-        /**
-         * @expectedException \RuntimeException
-         */
-        public function testEnsuresCertExists()
-        {
-            $request = new Request('GET', Server::$url);
-            $this->emit($request);
-            $request->getConfig()->set('cert', __FILE__ . 'ewfwef');
-            $f = new CurlFactory();
-            $f(new Transaction(new Client(), $request), new MessageFactory());
-        }
-
-        /**
-         * @expectedException \RuntimeException
-         */
-        public function testEnsuresKeyExists()
-        {
-            $request = new Request('GET', Server::$url);
-            $this->emit($request);
-            $request->getConfig()->set('ssl_key', __FILE__ . 'ewfwef');
-            $f = new CurlFactory();
-            $f(new Transaction(new Client(), $request), new MessageFactory());
-        }
-
-        /**
-         * @expectedException \RuntimeException
-         */
-        public function testEnsuresCacertExists()
-        {
-            $request = new Request('GET', Server::$url);
-            $this->emit($request);
-            $request->getConfig()->set('verify', __FILE__ . 'ewfwef');
-            $f = new CurlFactory();
-            $f(new Transaction(new Client(), $request), new MessageFactory());
-        }
-
-        public function testClientUsesSslByDefault()
-        {
-            Server::flush();
-            Server::enqueue(["HTTP/1.1 200 OK\r\nContent-Length: 3\r\n\r\nfoo"]);
-            $f = new CurlFactory();
-            $client = new Client([
-                'base_url' => Server::$url,
-                'adapter' => new MultiAdapter(new MessageFactory(), ['handle_factory' => $f])
-            ]);
-            $client->get();
-            $this->assertEquals(2, $_SERVER['last_curl'][CURLOPT_SSL_VERIFYHOST]);
-            $this->assertEquals(true, $_SERVER['last_curl'][CURLOPT_SSL_VERIFYPEER]);
-            $this->assertFileExists($_SERVER['last_curl'][CURLOPT_CAINFO]);
-        }
-
-        public function testConvertsConstantNameKeysToValues()
-        {
-            $request = new Request('GET', Server::$url);
-            $request->getConfig()->set('curl', ['CURLOPT_USERAGENT' => 'foo']);
-            $this->emit($request);
-            $f = new CurlFactory();
-            curl_close($f(new Transaction(new Client(), $request), new MessageFactory()));
-            $this->assertEquals('foo', $_SERVER['last_curl'][CURLOPT_USERAGENT]);
-        }
-
-        public function testStripsFragment()
-        {
-            $request = new Request('GET', Server::$url . '#foo');
-            $this->emit($request);
-            $f = new CurlFactory();
-            curl_close($f(new Transaction(new Client(), $request), new MessageFactory()));
-            $this->assertEquals(Server::$url, $_SERVER['last_curl'][CURLOPT_URL]);
-        }
-
-        public function testDoesNotSendSizeTwice()
-        {
-            $request = new Request('PUT', Server::$url, [], Stream::factory(str_repeat('a', 32769)));
-            $this->emit($request);
-            $f = new CurlFactory();
-            curl_close($f(new Transaction(new Client(), $request), new MessageFactory()));
-            $this->assertEquals(32769, $_SERVER['last_curl'][CURLOPT_INFILESIZE]);
-            $this->assertNotContains('Content-Length', implode(' ', $_SERVER['last_curl'][CURLOPT_HTTPHEADER]));
-        }
-
-        public function testCanSendPayloadWithGet()
-        {
-            Server::flush();
-            Server::enqueue(["HTTP/1.1 200 OK\r\n\r\n"]);
-            $request = new Request(
-                'GET',
-                Server::$url,
-                [],
-                Stream::factory('foo')
-            );
-            $this->emit($request);
-            $t = new Transaction(new Client(), $request);
-            $f = new CurlFactory();
-            $h = $f($t, new MessageFactory());
-            curl_exec($h);
-            curl_close($h);
-            $sent = Server::received(true)[0];
-            $this->assertEquals('foo', (string) $sent->getBody());
-            $this->assertEquals(3, (string) $sent->getHeader('Content-Length'));
-        }
-
-        private function emit(RequestInterface $request)
-        {
-            $event = new BeforeEvent(new Transaction(new Client(), $request));
-            $request->getEmitter()->emit('before', $event);
-        }
-
-        public function testDoesNotAlwaysAddContentType()
-        {
-            Server::flush();
-            Server::enqueue(["HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n"]);
-            $client = new Client();
-            $client->put(Server::$url . '/foo', ['body' => 'foo']);
-            $request = Server::received(true)[0];
-            $this->assertEquals('', $request->getHeader('Content-Type'));
-        }
-
-        /**
-         * @expectedException \GuzzleHttp\Exception\AdapterException
-         */
-        public function testThrowsForStreamOption()
-        {
-            $request = new Request('GET', Server::$url . 'haha');
-            $request->getConfig()->set('stream', true);
-            $t = new Transaction(new Client(), $request);
-            $f = new CurlFactory();
-            $f($t, new MessageFactory());
-        }
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Adapter/Curl/MultiAdapterTest.php b/core/vendor/guzzlehttp/guzzle/tests/Adapter/Curl/MultiAdapterTest.php
deleted file mode 100644
index f6175ae412477edb7a7ddd3b82eb35d6866b0b8b..0000000000000000000000000000000000000000
--- a/core/vendor/guzzlehttp/guzzle/tests/Adapter/Curl/MultiAdapterTest.php
+++ /dev/null
@@ -1,322 +0,0 @@
-<?php
-
-namespace GuzzleHttp\Tests\Adapter\Curl;
-
-require_once __DIR__ . '/AbstractCurl.php';
-
-use GuzzleHttp\Adapter\Curl\MultiAdapter;
-use GuzzleHttp\Adapter\Transaction;
-use GuzzleHttp\Client;
-use GuzzleHttp\Event\CompleteEvent;
-use GuzzleHttp\Event\ErrorEvent;
-use GuzzleHttp\Exception\RequestException;
-use GuzzleHttp\Message\MessageFactory;
-use GuzzleHttp\Message\Request;
-use GuzzleHttp\Message\Response;
-use GuzzleHttp\Stream\NoSeekStream;
-use GuzzleHttp\Stream\Stream;
-use GuzzleHttp\Tests\Server;
-
-/**
- * @covers GuzzleHttp\Adapter\Curl\MultiAdapter
- */
-class MultiAdapterTest extends AbstractCurl
-{
-    protected function getAdapter($factory = null, $options = [])
-    {
-        return new MultiAdapter($factory ?: new MessageFactory(), $options);
-    }
-
-    public function testSendsSingleRequest()
-    {
-        Server::flush();
-        Server::enqueue("HTTP/1.1 200 OK\r\nFoo: bar\r\nContent-Length: 0\r\n\r\n");
-        $t = new Transaction(new Client(), new Request('GET', Server::$url));
-        $a = new MultiAdapter(new MessageFactory());
-        $response = $a->send($t);
-        $this->assertEquals(200, $response->getStatusCode());
-        $this->assertEquals('bar', $response->getHeader('Foo'));
-    }
-
-    public function testCanSetSelectTimeout()
-    {
-        $current = isset($_SERVER[MultiAdapter::ENV_SELECT_TIMEOUT])
-            ? $_SERVER[MultiAdapter::ENV_SELECT_TIMEOUT]: null;
-        unset($_SERVER[MultiAdapter::ENV_SELECT_TIMEOUT]);
-        $a = new MultiAdapter(new MessageFactory());
-        $this->assertEquals(1, $this->readAttribute($a, 'selectTimeout'));
-        $a = new MultiAdapter(new MessageFactory(), ['select_timeout' => 10]);
-        $this->assertEquals(10, $this->readAttribute($a, 'selectTimeout'));
-        $_SERVER[MultiAdapter::ENV_SELECT_TIMEOUT] = 2;
-        $a = new MultiAdapter(new MessageFactory());
-        $this->assertEquals(2, $this->readAttribute($a, 'selectTimeout'));
-        $_SERVER[MultiAdapter::ENV_SELECT_TIMEOUT] = $current;
-    }
-
-    /**
-     * @expectedException \GuzzleHttp\Exception\AdapterException
-     * @expectedExceptionMessage cURL error -2:
-     */
-    public function testChecksCurlMultiResult()
-    {
-        MultiAdapter::throwMultiError(-2);
-    }
-
-    public function testChecksForCurlException()
-    {
-        $request = new Request('GET', 'http://httbin.org');
-        $transaction = $this->getMockBuilder('GuzzleHttp\Adapter\Transaction')
-            ->setMethods(['getRequest'])
-            ->disableOriginalConstructor()
-            ->getMock();
-        $transaction->expects($this->exactly(2))
-            ->method('getRequest')
-            ->will($this->returnValue($request));
-        $context = $this->getMockBuilder('GuzzleHttp\Adapter\Curl\BatchContext')
-            ->setMethods(['throwsExceptions'])
-            ->disableOriginalConstructor()
-            ->getMock();
-        $context->expects($this->once())
-            ->method('throwsExceptions')
-            ->will($this->returnValue(true));
-        $a = new MultiAdapter(new MessageFactory());
-        $r = new \ReflectionMethod($a, 'isCurlException');
-        $r->setAccessible(true);
-        try {
-            $r->invoke($a, $transaction, ['result' => -10], $context, []);
-            $this->fail('Did not throw');
-        } catch (RequestException $e) {
-            $this->assertSame($request, $e->getRequest());
-            $this->assertContains('[curl] (#-10) ', $e->getMessage());
-            $this->assertContains($request->getUrl(), $e->getMessage());
-        }
-    }
-
-    public function testSendsParallelRequestsFromQueue()
-    {
-        $c = new Client();
-        Server::flush();
-        Server::enqueue([
-            "HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n",
-            "HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n",
-            "HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n",
-            "HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n"
-        ]);
-        $transactions = [
-            new Transaction($c, new Request('GET', Server::$url)),
-            new Transaction($c, new Request('PUT', Server::$url)),
-            new Transaction($c, new Request('HEAD', Server::$url)),
-            new Transaction($c, new Request('GET', Server::$url))
-        ];
-        $a = new MultiAdapter(new MessageFactory());
-        $a->sendAll(new \ArrayIterator($transactions), 2);
-        foreach ($transactions as $t) {
-            $response = $t->getResponse();
-            $this->assertNotNull($response);
-            $this->assertEquals(200, $response->getStatusCode());
-        }
-    }
-
-    public function testCreatesAndReleasesHandlesWhenNeeded()
-    {
-        $a = new MultiAdapter(new MessageFactory());
-        $c = new Client([
-            'adapter'  => $a,
-            'base_url' => Server::$url
-        ]);
-
-        Server::flush();
-        Server::enqueue([
-            "HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n",
-            "HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n",
-            "HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n",
-            "HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n",
-            "HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n",
-            "HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n",
-            "HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n",
-        ]);
-
-        $ef = function (ErrorEvent $e) { throw $e->getException(); };
-
-        $request1 = $c->createRequest('GET', '/');
-        $request1->getEmitter()->on('headers', function () use ($a, $c, $ef) {
-            $a->send(new Transaction($c, $c->createRequest('GET', '/', [
-                'events' => [
-                    'headers' => function () use ($a, $c, $ef) {
-                        $r = $c->createRequest('GET', '/', [
-                            'events' => ['error' => ['fn' => $ef, 'priority' => 9999]]
-                        ]);
-                        $r->getEmitter()->once('headers', function () use ($a, $c, $r) {
-                            $a->send(new Transaction($c, $r));
-                        });
-                        $a->send(new Transaction($c, $r));
-                        // Now, reuse an existing handle
-                        $a->send(new Transaction($c, $r));
-                        },
-                    'error' => ['fn' => $ef, 'priority' => 9999]
-                ]
-            ])));
-        });
-
-        $request1->getEmitter()->on('error', $ef);
-
-        $transactions = [
-            new Transaction($c, $request1),
-            new Transaction($c, $c->createRequest('PUT')),
-            new Transaction($c, $c->createRequest('HEAD'))
-        ];
-
-        $a->sendAll(new \ArrayIterator($transactions), 2);
-
-        foreach ($transactions as $index => $t) {
-            $response = $t->getResponse();
-            $this->assertInstanceOf(
-                'GuzzleHttp\\Message\\ResponseInterface',
-                $response,
-                'Transaction at index ' . $index . ' did not populate response'
-            );
-            $this->assertEquals(200, $response->getStatusCode());
-        }
-    }
-
-    public function testThrowsAndReleasesWhenErrorDuringCompleteEvent()
-    {
-        Server::flush();
-        Server::enqueue("HTTP/1.1 500 Internal Server Error\r\nContent-Length: 0\r\n\r\n");
-        $request = new Request('GET', Server::$url);
-        $request->getEmitter()->on('complete', function (CompleteEvent $e) {
-            throw new RequestException('foo', $e->getRequest());
-        });
-        $t = new Transaction(new Client(), $request);
-        $a = new MultiAdapter(new MessageFactory());
-        try {
-            $a->send($t);
-            $this->fail('Did not throw');
-        } catch (RequestException $e) {
-            $this->assertSame($request, $e->getRequest());
-        }
-    }
-
-    public function testEnsuresResponseWasSetForGet()
-    {
-        $client = new Client();
-        $request = $client->createRequest('GET', Server::$url);
-        $response = new Response(200, []);
-        $er = null;
-
-        $request->getEmitter()->on(
-            'error',
-            function (ErrorEvent $e) use (&$er, $response) {
-                $er = $e;
-            }
-        );
-
-        $transaction = $this->getMockBuilder('GuzzleHttp\Adapter\Transaction')
-            ->setMethods(['getResponse', 'setResponse'])
-            ->setConstructorArgs([$client, $request])
-            ->getMock();
-        $transaction->expects($this->any())->method('setResponse');
-        $transaction->expects($this->any())
-            ->method('getResponse')
-            ->will($this->returnCallback(function () use ($response) {
-                $caller = debug_backtrace()[6]['function'];
-                return $caller == 'addHandle' ||
-                    $caller == 'validateResponseWasSet'
-                    ? null
-                    : $response;
-            }));
-
-        $a = new MultiAdapter(new MessageFactory());
-        Server::flush();
-        Server::enqueue(["HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n"]);
-        $a->sendAll(new \ArrayIterator([$transaction]), 10);
-        $this->assertNotNull($er);
-
-        $this->assertContains(
-            'No response was received',
-            $er->getException()->getMessage()
-        );
-    }
-
-    private function runConnectionTest(
-        $queue,
-        $stream,
-        $msg,
-        $statusCode = null
-    ) {
-        $obj = new \stdClass();
-        $er = null;
-        $client = new Client();
-        $request = $client->createRequest('PUT', Server::$url, [
-            'body' => $stream
-        ]);
-
-        $request->getEmitter()->on(
-            'error',
-            function (ErrorEvent $e) use (&$er) {
-                $er = $e;
-            }
-        );
-
-        $transaction = $this->getMockBuilder('GuzzleHttp\Adapter\Transaction')
-            ->setMethods(['getResponse', 'setResponse'])
-            ->setConstructorArgs([$client, $request])
-            ->getMock();
-
-        $transaction->expects($this->any())
-            ->method('setResponse')
-            ->will($this->returnCallback(function ($r) use (&$obj) {
-                $obj->res = $r;
-            }));
-
-        $transaction->expects($this->any())
-            ->method('getResponse')
-            ->will($this->returnCallback(function () use ($obj, &$called) {
-                $caller = debug_backtrace()[6]['function'];
-                if ($caller == 'addHandle') {
-                    return null;
-                } elseif ($caller == 'validateResponseWasSet') {
-                    return ++$called == 2 ? $obj->res : null;
-                } else {
-                    return $obj->res;
-                }
-            }));
-
-        $a = new MultiAdapter(new MessageFactory());
-        Server::flush();
-        Server::enqueue($queue);
-        $a->sendAll(new \ArrayIterator([$transaction]), 10);
-
-        if ($msg) {
-            $this->assertNotNull($er);
-            $this->assertContains($msg, $er->getException()->getMessage());
-        } else {
-            $this->assertEquals(
-                $statusCode,
-                $transaction->getResponse()->getStatusCode()
-            );
-        }
-    }
-
-    public function testThrowsWhenTheBodyCannotBeRewound()
-    {
-        $this->runConnectionTest(
-            ["HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n"],
-            new NoSeekStream(Stream::factory('foo')),
-            'attempting to rewind the request body failed'
-        );
-    }
-
-    public function testRetriesRewindableStreamsWhenClosedConnectionErrors()
-    {
-        $this->runConnectionTest(
-            [
-                "HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n",
-                "HTTP/1.1 201 OK\r\nContent-Length: 0\r\n\r\n",
-            ],
-            Stream::factory('foo'),
-            false,
-            201
-        );
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Adapter/Curl/RequestMediatorTest.php b/core/vendor/guzzlehttp/guzzle/tests/Adapter/Curl/RequestMediatorTest.php
deleted file mode 100644
index 740ceaa1e52791cfe01216f4f407ca8adb051c93..0000000000000000000000000000000000000000
--- a/core/vendor/guzzlehttp/guzzle/tests/Adapter/Curl/RequestMediatorTest.php
+++ /dev/null
@@ -1,113 +0,0 @@
-<?php
-
-namespace GuzzleHttp\Tests\Adapter\Curl;
-
-use GuzzleHttp\Adapter\Curl\MultiAdapter;
-use GuzzleHttp\Adapter\Curl\RequestMediator;
-use GuzzleHttp\Adapter\Transaction;
-use GuzzleHttp\Client;
-use GuzzleHttp\Event\HeadersEvent;
-use GuzzleHttp\Message\MessageFactory;
-use GuzzleHttp\Message\Request;
-use GuzzleHttp\Stream\Stream;
-use GuzzleHttp\Message\Response;
-use GuzzleHttp\Tests\Server;
-
-/**
- * @covers GuzzleHttp\Adapter\Curl\RequestMediator
- */
-class RequestMediatorTest extends \PHPUnit_Framework_TestCase
-{
-    public function testSetsResponseBodyForDownload()
-    {
-        $body = Stream::factory();
-        $request = new Request('GET', 'http://httbin.org');
-        $ee = null;
-        $request->getEmitter()->on(
-            'headers',
-            function (HeadersEvent $e) use (&$ee) {
-                $ee = $e;
-            }
-        );
-        $t = new Transaction(new Client(), $request);
-        $m = new RequestMediator($t, new MessageFactory());
-        $m->setResponseBody($body);
-        $this->assertEquals(18, $m->receiveResponseHeader(null, "HTTP/1.1 202 FOO\r\n"));
-        $this->assertEquals(10, $m->receiveResponseHeader(null, "Foo: Bar\r\n"));
-        $this->assertEquals(11, $m->receiveResponseHeader(null, "Baz : Bam\r\n"));
-        $this->assertEquals(19, $m->receiveResponseHeader(null, "Content-Length: 3\r\n"));
-        $this->assertEquals(2, $m->receiveResponseHeader(null, "\r\n"));
-        $this->assertNotNull($ee);
-        $this->assertEquals(202, $t->getResponse()->getStatusCode());
-        $this->assertEquals('FOO', $t->getResponse()->getReasonPhrase());
-        $this->assertEquals('Bar', $t->getResponse()->getHeader('Foo'));
-        $this->assertEquals('Bam', $t->getResponse()->getHeader('Baz'));
-        $m->writeResponseBody(null, 'foo');
-        $this->assertEquals('foo', (string) $body);
-        $this->assertEquals('3', $t->getResponse()->getHeader('Content-Length'));
-    }
-
-    public function testSendsToNewBodyWhenNot2xxResponse()
-    {
-        $body = Stream::factory();
-        $request = new Request('GET', 'http://httbin.org');
-        $t = new Transaction(new Client(), $request);
-        $m = new RequestMediator($t, new MessageFactory());
-        $m->setResponseBody($body);
-        $this->assertEquals(27, $m->receiveResponseHeader(null, "HTTP/1.1 304 Not Modified\r\n"));
-        $this->assertEquals(2, $m->receiveResponseHeader(null, "\r\n"));
-        $this->assertEquals(304, $t->getResponse()->getStatusCode());
-        $m->writeResponseBody(null, 'foo');
-        $this->assertEquals('', (string) $body);
-        $this->assertEquals('foo', (string) $t->getResponse()->getBody());
-    }
-
-    public function testUsesDefaultBodyIfNoneSet()
-    {
-        $t = new Transaction(new Client(), new Request('GET', 'http://httbin.org'));
-        $t->setResponse(new Response(200));
-        $m = new RequestMediator($t, new MessageFactory());
-        $this->assertEquals(3, $m->writeResponseBody(null, 'foo'));
-        $this->assertEquals('foo', (string) $t->getResponse()->getBody());
-    }
-
-    public function testCanUseResponseBody()
-    {
-        $body = Stream::factory();
-        $t = new Transaction(new Client(), new Request('GET', 'http://httbin.org'));
-        $t->setResponse(new Response(200, [], $body));
-        $m = new RequestMediator($t, new MessageFactory());
-        $this->assertEquals(3, $m->writeResponseBody(null, 'foo'));
-        $this->assertEquals('foo', (string) $body);
-    }
-
-    public function testHandlesTransactionWithNoResponseWhenWritingBody()
-    {
-        $t = new Transaction(new Client(), new Request('GET', 'http://httbin.org'));
-        $m = new RequestMediator($t, new MessageFactory());
-        $this->assertEquals(0, $m->writeResponseBody(null, 'test'));
-    }
-
-    public function testReadsFromRequestBody()
-    {
-        $body = Stream::factory('foo');
-        $t = new Transaction(new Client(), new Request('PUT', 'http://httbin.org', [], $body));
-        $m = new RequestMediator($t, new MessageFactory());
-        $this->assertEquals('foo', $m->readRequestBody(null, null, 3));
-    }
-
-    public function testEmitsHeadersEventForHeadRequest()
-    {
-        Server::enqueue(["HTTP/1.1 200 OK\r\nContent-Length: 2\r\n\r\nOK"]);
-        $ee = null;
-        $client = new Client(['adapter' => new MultiAdapter(new MessageFactory())]);
-        $client->head(Server::$url, [
-            'events' => [
-                'headers' => function (HeadersEvent $e) use (&$ee) {
-                    $ee = $e;
-                }
-            ]
-        ]);
-        $this->assertInstanceOf('GuzzleHttp\\Event\\HeadersEvent', $ee);
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Adapter/FakeParallelAdapterTest.php b/core/vendor/guzzlehttp/guzzle/tests/Adapter/FakeParallelAdapterTest.php
deleted file mode 100644
index 8140d462d0c9d753d425b1f08538b4b7c1195eda..0000000000000000000000000000000000000000
--- a/core/vendor/guzzlehttp/guzzle/tests/Adapter/FakeParallelAdapterTest.php
+++ /dev/null
@@ -1,35 +0,0 @@
-<?php
-
-namespace GuzzleHttp\Tests\Adapter;
-
-use GuzzleHttp\Adapter\FakeParallelAdapter;
-use GuzzleHttp\Adapter\MockAdapter;
-use GuzzleHttp\Client;
-use GuzzleHttp\Message\Response;
-use GuzzleHttp\Adapter\TransactionIterator;
-
-/**
- * @covers GuzzleHttp\Adapter\FakeParallelAdapter
- */
-class FakeParallelAdapterTest extends \PHPUnit_Framework_TestCase
-{
-    public function testSendsAllTransactions()
-    {
-        $client = new Client();
-        $requests = [
-            $client->createRequest('GET', 'http://httbin.org'),
-            $client->createRequest('HEAD', 'http://httbin.org'),
-        ];
-
-        $sent = [];
-        $f = new FakeParallelAdapter(new MockAdapter(function ($trans) use (&$sent) {
-            $sent[] = $trans->getRequest()->getMethod();
-            return new Response(200);
-        }));
-
-        $tIter = new TransactionIterator($requests, $client, []);
-        $f->sendAll($tIter, 2);
-        $this->assertContains('GET', $sent);
-        $this->assertContains('HEAD', $sent);
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Adapter/MockAdapterTest.php b/core/vendor/guzzlehttp/guzzle/tests/Adapter/MockAdapterTest.php
deleted file mode 100644
index 07dbe0d587bcbdd725e418f77d71afb45d353e8f..0000000000000000000000000000000000000000
--- a/core/vendor/guzzlehttp/guzzle/tests/Adapter/MockAdapterTest.php
+++ /dev/null
@@ -1,103 +0,0 @@
-<?php
-
-namespace GuzzleHttp\Tests\Adapter;
-
-use GuzzleHttp\Adapter\MockAdapter;
-use GuzzleHttp\Adapter\Transaction;
-use GuzzleHttp\Adapter\TransactionInterface;
-use GuzzleHttp\Client;
-use GuzzleHttp\Event\CompleteEvent;
-use GuzzleHttp\Event\ErrorEvent;
-use GuzzleHttp\Exception\RequestException;
-use GuzzleHttp\Message\Request;
-use GuzzleHttp\Message\Response;
-use GuzzleHttp\Stream;
-
-/**
- * @covers GuzzleHttp\Adapter\MockAdapter
- */
-class MockAdapterTest extends \PHPUnit_Framework_TestCase
-{
-    public function testYieldsMockResponse()
-    {
-        $response = new Response(200);
-        $m = new MockAdapter();
-        $m->setResponse($response);
-        $this->assertSame($response, $m->send(new Transaction(new Client(), new Request('GET', 'http://httbin.org'))));
-    }
-
-    public function testMocksWithCallable()
-    {
-        $response = new Response(200);
-        $r = function (TransactionInterface $trans) use ($response) {
-            return $response;
-        };
-        $m = new MockAdapter($r);
-        $this->assertSame($response, $m->send(new Transaction(new Client(), new Request('GET', 'http://httbin.org'))));
-    }
-
-    /**
-     * @expectedException \RuntimeException
-     */
-    public function testValidatesResponses()
-    {
-        $m = new MockAdapter();
-        $m->setResponse('foo');
-        $m->send(new Transaction(new Client(), new Request('GET', 'http://httbin.org')));
-    }
-
-    public function testHandlesErrors()
-    {
-        $m = new MockAdapter();
-        $m->setResponse(new Response(404));
-        $request = new Request('GET', 'http://httbin.org');
-        $c = false;
-        $request->getEmitter()->once('complete', function (CompleteEvent $e) use (&$c) {
-            $c = true;
-            throw new RequestException('foo', $e->getRequest());
-        });
-        $request->getEmitter()->on('error', function (ErrorEvent $e) {
-            $e->intercept(new Response(201));
-        });
-        $r = $m->send(new Transaction(new Client(), $request));
-        $this->assertTrue($c);
-        $this->assertEquals(201, $r->getStatusCode());
-    }
-
-    /**
-     * @expectedException \GuzzleHttp\Exception\RequestException
-     */
-    public function testThrowsUnhandledErrors()
-    {
-        $m = new MockAdapter();
-        $m->setResponse(new Response(404));
-        $request = new Request('GET', 'http://httbin.org');
-        $request->getEmitter()->once('complete', function (CompleteEvent $e) {
-            throw new RequestException('foo', $e->getRequest());
-        });
-        $m->send(new Transaction(new Client(), $request));
-    }
-
-    public function testReadsRequestBody()
-    {
-        $response = new Response(200);
-        $m = new MockAdapter($response);
-        $m->setResponse($response);
-        $body = Stream\create('foo');
-        $request = new Request('PUT', 'http://httpbin.org/put', [], $body);
-        $this->assertSame($response, $m->send(new Transaction(new Client(), $request)));
-        $this->assertEquals(3, $body->tell());
-    }
-
-    public function testEmitsHeadersEvent()
-    {
-        $m = new MockAdapter(new Response(404));
-        $request = new Request('GET', 'http://httbin.org');
-        $called = false;
-        $request->getEmitter()->once('headers', function () use (&$called) {
-            $called = true;
-        });
-        $m->send(new Transaction(new Client(), $request));
-        $this->assertTrue($called);
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Adapter/StreamAdapterTest.php b/core/vendor/guzzlehttp/guzzle/tests/Adapter/StreamAdapterTest.php
deleted file mode 100644
index 7349dc720ef252d286493a020cddbe55c6fbce49..0000000000000000000000000000000000000000
--- a/core/vendor/guzzlehttp/guzzle/tests/Adapter/StreamAdapterTest.php
+++ /dev/null
@@ -1,402 +0,0 @@
-<?php
-
-namespace GuzzleHttp\Tests\Adapter;
-
-use GuzzleHttp\Adapter\StreamAdapter;
-use GuzzleHttp\Client;
-use GuzzleHttp\Event\ErrorEvent;
-use GuzzleHttp\Message\MessageFactory;
-use GuzzleHttp\Message\Response;
-use GuzzleHttp\Stream\Stream;
-use GuzzleHttp\Tests\Server;
-
-/**
- * @covers GuzzleHttp\Adapter\StreamAdapter
- */
-class StreamAdapterTest extends \PHPUnit_Framework_TestCase
-{
-    public function testReturnsResponseForSuccessfulRequest()
-    {
-        Server::flush();
-        Server::enqueue(
-            "HTTP/1.1 200 OK\r\nFoo: Bar\r\nContent-Length: 2\r\n\r\nhi"
-        );
-        $client = new Client([
-            'base_url' => Server::$url,
-            'adapter' => new StreamAdapter(new MessageFactory())
-        ]);
-        $response = $client->get('/', ['headers' => ['Foo' => 'Bar']]);
-        $this->assertEquals(200, $response->getStatusCode());
-        $this->assertEquals('OK', $response->getReasonPhrase());
-        $this->assertEquals('Bar', $response->getHeader('Foo'));
-        $this->assertEquals('2', $response->getHeader('Content-Length'));
-        $this->assertEquals('hi', $response->getBody());
-        $sent = Server::received(true)[0];
-        $this->assertEquals('GET', $sent->getMethod());
-        $this->assertEquals('/', $sent->getResource());
-        $this->assertEquals('127.0.0.1:8125', $sent->getHeader('host'));
-        $this->assertEquals('Bar', $sent->getHeader('foo'));
-        $this->assertTrue($sent->hasHeader('user-agent'));
-    }
-
-    /**
-     * @expectedException \GuzzleHttp\Exception\RequestException
-     * @expectedExceptionMessage Error creating resource. [url] http://localhost:123 [proxy] tcp://localhost:1234
-     */
-    public function testThrowsExceptionsCaughtDuringTransfer()
-    {
-        Server::flush();
-        $client = new Client([
-            'adapter' => new StreamAdapter(new MessageFactory()),
-        ]);
-        $client->get('http://localhost:123', [
-            'timeout' => 0.01,
-            'proxy'   => 'tcp://localhost:1234'
-        ]);
-    }
-
-    /**
-     * @expectedException \GuzzleHttp\Exception\RequestException
-     * @expectedExceptionMessage URL is invalid: ftp://localhost:123
-     */
-    public function testEnsuresTheHttpProtocol()
-    {
-        Server::flush();
-        $client = new Client([
-            'adapter' => new StreamAdapter(new MessageFactory()),
-        ]);
-        $client->get('ftp://localhost:123');
-    }
-
-    public function testCanHandleExceptionsUsingEvents()
-    {
-        Server::flush();
-        $client = new Client([
-            'adapter' => new StreamAdapter(new MessageFactory())
-        ]);
-        $request = $client->createRequest('GET', Server::$url);
-        $mockResponse = new Response(200);
-        $request->getEmitter()->on(
-            'error',
-            function (ErrorEvent $e) use ($mockResponse) {
-                $e->intercept($mockResponse);
-            }
-        );
-        $this->assertSame($mockResponse, $client->send($request));
-    }
-
-    public function testEmitsAfterSendEvent()
-    {
-        $ee = null;
-        Server::flush();
-        Server::enqueue(
-            "HTTP/1.1 200 OK\r\nFoo: Bar\r\nContent-Length: 8\r\n\r\nhi there"
-        );
-        $client = new Client(['adapter' => new StreamAdapter(new MessageFactory())]);
-        $request = $client->createRequest('GET', Server::$url);
-        $request->getEmitter()->on('complete', function ($e) use (&$ee) {
-            $ee = $e;
-        });
-        $client->send($request);
-        $this->assertInstanceOf('GuzzleHttp\Event\CompleteEvent', $ee);
-        $this->assertSame($request, $ee->getRequest());
-        $this->assertEquals(200, $ee->getResponse()->getStatusCode());
-    }
-
-    public function testStreamAttributeKeepsStreamOpen()
-    {
-        Server::flush();
-        Server::enqueue(
-            "HTTP/1.1 200 OK\r\nFoo: Bar\r\nContent-Length: 8\r\n\r\nhi there"
-        );
-        $client = new Client([
-            'base_url' => Server::$url,
-            'adapter' => new StreamAdapter(new MessageFactory())
-        ]);
-        $response = $client->put('/foo', [
-            'headers' => ['Foo' => 'Bar'],
-            'body' => 'test',
-            'stream' => true
-        ]);
-        $this->assertEquals(200, $response->getStatusCode());
-        $this->assertEquals('OK', $response->getReasonPhrase());
-        $this->assertEquals('8', $response->getHeader('Content-Length'));
-        $body = $response->getBody();
-        if (defined('HHVM_VERSION')) {
-            $this->markTestIncomplete('HHVM has not implemented this?');
-        }
-        $this->assertEquals('http', $body->getMetadata()['wrapper_type']);
-        $this->assertEquals(8, $body->getMetadata()['unread_bytes']);
-        $this->assertEquals(Server::$url . 'foo', $body->getMetadata()['uri']);
-        $this->assertEquals('hi', $body->read(2));
-        $body->close();
-
-        $sent = Server::received(true)[0];
-        $this->assertEquals('PUT', $sent->getMethod());
-        $this->assertEquals('/foo', $sent->getResource());
-        $this->assertEquals('127.0.0.1:8125', $sent->getHeader('host'));
-        $this->assertEquals('Bar', $sent->getHeader('foo'));
-        $this->assertTrue($sent->hasHeader('user-agent'));
-    }
-
-    public function testDrainsResponseIntoTempStream()
-    {
-        Server::flush();
-        Server::enqueue("HTTP/1.1 200 OK\r\nFoo: Bar\r\nContent-Length: 8\r\n\r\nhi there");
-        $client = new Client([
-            'base_url' => Server::$url,
-            'adapter' => new StreamAdapter(new MessageFactory())
-        ]);
-        $response = $client->get('/');
-        $body = $response->getBody();
-        $this->assertEquals('php://temp', $body->getMetadata()['uri']);
-        $this->assertEquals('hi', $body->read(2));
-        $body->close();
-    }
-
-    public function testDrainsResponseIntoSaveToBody()
-    {
-        $r = fopen('php://temp', 'r+');
-        Server::flush();
-        Server::enqueue("HTTP/1.1 200 OK\r\nFoo: Bar\r\nContent-Length: 8\r\n\r\nhi there");
-        $client = new Client([
-            'base_url' => Server::$url,
-            'adapter' => new StreamAdapter(new MessageFactory())
-        ]);
-        $response = $client->get('/', ['save_to' => $r]);
-        $body = $response->getBody();
-        $this->assertEquals('php://temp', $body->getMetadata()['uri']);
-        $this->assertEquals('hi', $body->read(2));
-        $this->assertEquals(' there', stream_get_contents($r));
-        $body->close();
-    }
-
-    public function testDrainsResponseIntoSaveToBodyAtPath()
-    {
-        $tmpfname = tempnam('/tmp', 'save_to_path');
-        Server::flush();
-        Server::enqueue("HTTP/1.1 200 OK\r\nFoo: Bar\r\nContent-Length: 8\r\n\r\nhi there");
-        $client = new Client([
-            'base_url' => Server::$url,
-            'adapter' => new StreamAdapter(new MessageFactory())
-        ]);
-        $response = $client->get('/', ['save_to' => $tmpfname]);
-        $body = $response->getBody();
-        $this->assertEquals($tmpfname, $body->getMetadata()['uri']);
-        $this->assertEquals('hi', $body->read(2));
-        $body->close();
-        unlink($tmpfname);
-    }
-
-    public function testAddsGzipFilterIfAcceptHeaderIsPresent()
-    {
-        Server::flush();
-        Server::enqueue("HTTP/1.1 200 OK\r\nFoo: Bar\r\nContent-Length: 8\r\n\r\nhi there");
-        $client = new Client([
-            'base_url' => Server::$url,
-            'adapter' => new StreamAdapter(new MessageFactory())
-        ]);
-        $response = $client->get('/', [
-            'headers' => ['Accept-Encoding' => 'gzip'],
-            'stream' => true
-        ]);
-        $body = $response->getBody();
-        $this->assertEquals('compress.zlib://http://127.0.0.1:8125/', $body->getMetadata()['uri']);
-    }
-
-    protected function getStreamFromBody(Stream $body)
-    {
-        $r = new \ReflectionProperty($body, 'stream');
-        $r->setAccessible(true);
-
-        return $r->getValue($body);
-    }
-
-    protected function getSendResult(array $opts)
-    {
-        Server::enqueue("HTTP/1.1 200 OK\r\nFoo: Bar\r\nContent-Length: 8\r\n\r\nhi there");
-        $client = new Client(['adapter' => new StreamAdapter(new MessageFactory())]);
-
-        return $client->get(Server::$url, $opts);
-    }
-
-    public function testAddsProxy()
-    {
-        $body = $this->getSendResult(['stream' => true, 'proxy' => '127.0.0.1:8125'])->getBody();
-        $opts = stream_context_get_options($this->getStreamFromBody($body));
-        $this->assertEquals('127.0.0.1:8125', $opts['http']['proxy']);
-        $this->assertTrue($opts['http']['request_fulluri']);
-    }
-
-    public function testAddsTimeout()
-    {
-        $body = $this->getSendResult(['stream' => true, 'timeout' => 200])->getBody();
-        $opts = stream_context_get_options($this->getStreamFromBody($body));
-        $this->assertEquals(200, $opts['http']['timeout']);
-    }
-
-    /**
-     * @expectedException \RuntimeException
-     * @expectedExceptionMessage SSL certificate authority file not found: /does/not/exist
-     */
-    public function testVerifiesVerifyIsValidIfPath()
-    {
-        (new Client([
-            'adapter' => new StreamAdapter(new MessageFactory()),
-            'base_url' => Server::$url,
-            'defaults' => ['verify' => '/does/not/exist']
-        ]))->get('/');
-    }
-
-    public function testVerifyCanBeDisabled()
-    {
-        Server::enqueue("HTTP/1.1 200\r\nContent-Length: 0\r\n\r\n");
-        (new Client([
-            'adapter' => new StreamAdapter(new MessageFactory()),
-            'base_url' => Server::$url,
-            'defaults' => ['verify' => false]
-        ]))->get('/');
-    }
-
-    public function testVerifyCanBeSetToPath()
-    {
-        $path = __DIR__ . '/../../src/cacert.pem';
-        $this->assertFileExists($path);
-        $body = $this->getSendResult(['stream' => true, 'verify' => $path])->getBody();
-        $opts = stream_context_get_options($this->getStreamFromBody($body));
-        $this->assertEquals(true, $opts['http']['verify_peer']);
-        $this->assertEquals($path, $opts['http']['cafile']);
-        $this->assertTrue(file_exists($opts['http']['cafile']));
-    }
-
-    /**
-     * @expectedException \RuntimeException
-     * @expectedExceptionMessage SSL certificate not found: /does/not/exist
-     */
-    public function testVerifiesCertIfValidPath()
-    {
-        (new Client([
-            'adapter' => new StreamAdapter(new MessageFactory()),
-            'base_url' => Server::$url,
-            'defaults' => ['cert' => '/does/not/exist']
-        ]))->get('/');
-    }
-
-    public function testCanSetPasswordWhenSettingCert()
-    {
-        $path = __DIR__ . '/../../src/cacert.pem';
-        $body = $this->getSendResult(['stream' => true, 'cert' => [$path, 'foo']])->getBody();
-        $opts = stream_context_get_options($this->getStreamFromBody($body));
-        $this->assertEquals($path, $opts['http']['local_cert']);
-        $this->assertEquals('foo', $opts['http']['passphrase']);
-    }
-
-    public function testDebugAttributeWritesStreamInfoToTempBufferByDefault()
-    {
-        if (defined('HHVM_VERSION')) {
-            $this->markTestSkipped('HHVM has not implemented this?');
-            return;
-        }
-
-        Server::flush();
-        Server::enqueue("HTTP/1.1 200 OK\r\nFoo: Bar\r\nContent-Length: 8\r\n\r\nhi there");
-        $client = new Client([
-            'base_url' => Server::$url,
-            'adapter' => new StreamAdapter(new MessageFactory())
-        ]);
-        ob_start();
-        $client->get('/', ['debug' => true]);
-        $contents = ob_get_clean();
-        $this->assertContains('<http://127.0.0.1:8125/> [CONNECT]', $contents);
-        $this->assertContains('<http://127.0.0.1:8125/> [FILE_SIZE_IS]', $contents);
-        $this->assertContains('<http://127.0.0.1:8125/> [PROGRESS]', $contents);
-    }
-
-    public function testDebugAttributeWritesStreamInfoToBuffer()
-    {
-        if (defined('HHVM_VERSION')) {
-            $this->markTestSkipped('HHVM has not implemented this?');
-            return;
-        }
-
-        $buffer = fopen('php://temp', 'r+');
-        Server::flush();
-        Server::enqueue("HTTP/1.1 200 OK\r\nContent-Length: 8\r\nContent-Type: text/plain\r\n\r\nhi there");
-        $client = new Client([
-            'base_url' => Server::$url,
-            'adapter' => new StreamAdapter(new MessageFactory())
-        ]);
-        $client->get('/', ['debug' => $buffer]);
-        fseek($buffer, 0);
-        $contents = stream_get_contents($buffer);
-        $this->assertContains('<http://127.0.0.1:8125/> [CONNECT]', $contents);
-        $this->assertContains('<http://127.0.0.1:8125/> [FILE_SIZE_IS] message: "Content-Length: 8"', $contents);
-        $this->assertContains('<http://127.0.0.1:8125/> [PROGRESS] bytes_max: "8"', $contents);
-        $this->assertContains('<http://127.0.0.1:8125/> [MIME_TYPE_IS] message: "text/plain"', $contents);
-    }
-
-    public function testAddsProxyByProtocol()
-    {
-        $url = str_replace('http', 'tcp', Server::$url);
-        $body = $this->getSendResult(['stream' => true, 'proxy' => ['http' => $url]])->getBody();
-        $opts = stream_context_get_options($this->getStreamFromBody($body));
-        $this->assertEquals($url, $opts['http']['proxy']);
-    }
-
-    public function testPerformsShallowMergeOfCustomContextOptions()
-    {
-        $body = $this->getSendResult([
-            'stream' => true,
-            'config' => [
-                'stream_context' => [
-                    'http' => [
-                        'request_fulluri' => true,
-                        'method' => 'HEAD'
-                    ],
-                    'socket' => [
-                        'bindto' => '127.0.0.1:0'
-                    ],
-                    'ssl' => [
-                        'verify_peer' => false
-                    ]
-                ]
-            ]
-        ])->getBody();
-
-        $opts = stream_context_get_options($this->getStreamFromBody($body));
-        $this->assertEquals('HEAD', $opts['http']['method']);
-        $this->assertTrue($opts['http']['request_fulluri']);
-        $this->assertFalse($opts['ssl']['verify_peer']);
-        $this->assertEquals('127.0.0.1:0', $opts['socket']['bindto']);
-    }
-
-    /**
-     * @expectedException \GuzzleHttp\Exception\RequestException
-     * @expectedExceptionMessage stream_context must be an array
-     */
-    public function testEnsuresThatStreamContextIsAnArray()
-    {
-        $this->getSendResult([
-            'stream' => true,
-            'config' => ['stream_context' => 'foo']
-        ]);
-    }
-
-    /**
-     * @ticket https://github.com/guzzle/guzzle/issues/725
-     */
-    public function testHandlesMultipleHeadersOfSameName()
-    {
-        $a = new StreamAdapter(new MessageFactory());
-        $ref = new \ReflectionMethod($a, 'headersFromLines');
-        $ref->setAccessible(true);
-        $this->assertEquals([
-            'foo' => ['bar', 'bam'],
-            'abc' => ['123']
-        ], $ref->invoke($a, [
-            'foo: bar',
-            'foo: bam',
-            'abc: 123'
-        ]));
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Adapter/StreamingProxyAdapterTest.php b/core/vendor/guzzlehttp/guzzle/tests/Adapter/StreamingProxyAdapterTest.php
deleted file mode 100644
index 8eb6e686149bf2850970fa6c1ec7836a31a0094e..0000000000000000000000000000000000000000
--- a/core/vendor/guzzlehttp/guzzle/tests/Adapter/StreamingProxyAdapterTest.php
+++ /dev/null
@@ -1,54 +0,0 @@
-<?php
-
-namespace GuzzleHttp\Tests\Adapter;
-
-use GuzzleHttp\Adapter\Transaction;
-use GuzzleHttp\Client;
-use GuzzleHttp\Message\Request;
-use GuzzleHttp\Adapter\StreamingProxyAdapter;
-use GuzzleHttp\Message\Response;
-
-/**
- * @covers GuzzleHttp\Adapter\StreamingProxyAdapter
- */
-class StreamingProxyAdapterTest extends \PHPUnit_Framework_TestCase
-{
-    public function testSendsWithDefaultAdapter()
-    {
-        $response = new Response(200);
-        $mock = $this->getMockBuilder('GuzzleHttp\Adapter\AdapterInterface')
-            ->setMethods(['send'])
-            ->getMockForAbstractClass();
-        $mock->expects($this->once())
-            ->method('send')
-            ->will($this->returnValue($response));
-        $streaming = $this->getMockBuilder('GuzzleHttp\Adapter\AdapterInterface')
-            ->setMethods(['send'])
-            ->getMockForAbstractClass();
-        $streaming->expects($this->never())
-            ->method('send');
-
-        $s = new StreamingProxyAdapter($mock, $streaming);
-        $this->assertSame($response, $s->send(new Transaction(new Client(), new Request('GET', '/'))));
-    }
-
-    public function testSendsWithStreamingAdapter()
-    {
-        $response = new Response(200);
-        $mock = $this->getMockBuilder('GuzzleHttp\Adapter\AdapterInterface')
-            ->setMethods(['send'])
-            ->getMockForAbstractClass();
-        $mock->expects($this->never())
-            ->method('send');
-        $streaming = $this->getMockBuilder('GuzzleHttp\Adapter\AdapterInterface')
-            ->setMethods(['send'])
-            ->getMockForAbstractClass();
-        $streaming->expects($this->once())
-            ->method('send')
-            ->will($this->returnValue($response));
-        $request = new Request('GET', '/');
-        $request->getConfig()->set('stream', true);
-        $s = new StreamingProxyAdapter($mock, $streaming);
-        $this->assertSame($response, $s->send(new Transaction(new Client(), $request)));
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Adapter/TransactionIteratorTest.php b/core/vendor/guzzlehttp/guzzle/tests/Adapter/TransactionIteratorTest.php
deleted file mode 100644
index bee3ab0e1c0766e0349916348e8848d0fe668206..0000000000000000000000000000000000000000
--- a/core/vendor/guzzlehttp/guzzle/tests/Adapter/TransactionIteratorTest.php
+++ /dev/null
@@ -1,73 +0,0 @@
-<?php
-
-namespace GuzzleHttp\Tests\Http;
-
-use GuzzleHttp\Client;
-use GuzzleHttp\Adapter\TransactionIterator;
-
-class TransactionIteratorTest extends \PHPUnit_Framework_TestCase
-{
-    /**
-     * @expectedException \InvalidArgumentException
-     */
-    public function testValidatesConstructor()
-    {
-        new TransactionIterator('foo', new Client(), []);
-    }
-
-    public function testCreatesTransactions()
-    {
-        $client = new Client();
-        $requests = [
-            $client->createRequest('GET', 'http://test.com'),
-            $client->createRequest('POST', 'http://test.com'),
-            $client->createRequest('PUT', 'http://test.com'),
-        ];
-        $t = new TransactionIterator($requests, $client, []);
-        $this->assertEquals(0, $t->key());
-        $this->assertTrue($t->valid());
-        $this->assertEquals('GET', $t->current()->getRequest()->getMethod());
-        $t->next();
-        $this->assertEquals(1, $t->key());
-        $this->assertTrue($t->valid());
-        $this->assertEquals('POST', $t->current()->getRequest()->getMethod());
-        $t->next();
-        $this->assertEquals(2, $t->key());
-        $this->assertTrue($t->valid());
-        $this->assertEquals('PUT', $t->current()->getRequest()->getMethod());
-    }
-
-    public function testCanForeach()
-    {
-        $c = new Client();
-        $requests = [
-            $c->createRequest('GET', 'http://test.com'),
-            $c->createRequest('POST', 'http://test.com'),
-            $c->createRequest('PUT', 'http://test.com'),
-        ];
-
-        $t = new TransactionIterator(new \ArrayIterator($requests), $c, []);
-        $methods = [];
-
-        foreach ($t as $trans) {
-            $this->assertInstanceOf(
-                'GuzzleHttp\Adapter\TransactionInterface',
-                $trans
-            );
-            $methods[] = $trans->getRequest()->getMethod();
-        }
-
-        $this->assertEquals(['GET', 'POST', 'PUT'], $methods);
-    }
-
-    /**
-     * @expectedException \RuntimeException
-     */
-    public function testValidatesEachElement()
-    {
-        $c = new Client();
-        $requests = ['foo'];
-        $t = new TransactionIterator(new \ArrayIterator($requests), $c, []);
-        iterator_to_array($t);
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Adapter/TransactionTest.php b/core/vendor/guzzlehttp/guzzle/tests/Adapter/TransactionTest.php
deleted file mode 100644
index 9b7ee1f7976ebde3c63a663d6c3c9576c8d22a9c..0000000000000000000000000000000000000000
--- a/core/vendor/guzzlehttp/guzzle/tests/Adapter/TransactionTest.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-namespace GuzzleHttp\Tests\Adapter;
-
-use GuzzleHttp\Adapter\Transaction;
-use GuzzleHttp\Client;
-use GuzzleHttp\Message\Request;
-use GuzzleHttp\Message\Response;
-
-/**
- * @covers GuzzleHttp\Adapter\Transaction
- */
-class TransactionTest extends \PHPUnit_Framework_TestCase
-{
-    public function testHasRequestAndClient()
-    {
-        $c = new Client();
-        $req = new Request('GET', '/');
-        $response = new Response(200);
-        $t = new Transaction($c, $req);
-        $this->assertSame($c, $t->getClient());
-        $this->assertSame($req, $t->getRequest());
-        $this->assertNull($t->getResponse());
-        $t->setResponse($response);
-        $this->assertSame($response, $t->getResponse());
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/tests/BatchResultsTest.php b/core/vendor/guzzlehttp/guzzle/tests/BatchResultsTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..080d44c01722e6eddfc986e318e1a846b9efe848
--- /dev/null
+++ b/core/vendor/guzzlehttp/guzzle/tests/BatchResultsTest.php
@@ -0,0 +1,58 @@
+<?php
+namespace GuzzleHttp\Tests;
+
+use GuzzleHttp\BatchResults;
+
+/**
+ * @covers \GuzzleHttp\BatchResults
+ */
+class BatchResultsTest extends \PHPUnit_Framework_TestCase
+{
+    public function testExposesResults()
+    {
+        $a = new \stdClass();
+        $b = new \stdClass();
+        $c = new \stdClass();
+        $hash = new \SplObjectStorage();
+        $hash[$a] = '1';
+        $hash[$b] = '2';
+        $hash[$c] = new \Exception('foo');
+
+        $batch = new BatchResults($hash);
+        $this->assertCount(3, $batch);
+        $this->assertEquals([$a, $b, $c], $batch->getKeys());
+        $this->assertEquals([$hash[$c]], $batch->getFailures());
+        $this->assertEquals(['1', '2'], $batch->getSuccessful());
+        $this->assertEquals('1', $batch->getResult($a));
+        $this->assertNull($batch->getResult(new \stdClass()));
+        $this->assertTrue(isset($batch[0]));
+        $this->assertFalse(isset($batch[10]));
+        $this->assertEquals('1', $batch[0]);
+        $this->assertEquals('2', $batch[1]);
+        $this->assertNull($batch[100]);
+        $this->assertInstanceOf('Exception', $batch[2]);
+
+        $results = iterator_to_array($batch);
+        $this->assertEquals(['1', '2', $hash[$c]], $results);
+    }
+
+    /**
+     * @expectedException \RuntimeException
+     */
+    public function testCannotSetByIndex()
+    {
+        $hash = new \SplObjectStorage();
+        $batch = new BatchResults($hash);
+        $batch[10] = 'foo';
+    }
+
+    /**
+     * @expectedException \RuntimeException
+     */
+    public function testCannotUnsetByIndex()
+    {
+        $hash = new \SplObjectStorage();
+        $batch = new BatchResults($hash);
+        unset($batch[10]);
+    }
+}
diff --git a/core/vendor/guzzlehttp/guzzle/tests/ClientTest.php b/core/vendor/guzzlehttp/guzzle/tests/ClientTest.php
index e2a991f0b2c8ea4a726dcdb2a22ccd8a123f42fb..48f17026dbe6dc76b4ca94fe2acc946cd5c6c0e9 100644
--- a/core/vendor/guzzlehttp/guzzle/tests/ClientTest.php
+++ b/core/vendor/guzzlehttp/guzzle/tests/ClientTest.php
@@ -1,25 +1,37 @@
 <?php
-
 namespace GuzzleHttp\Tests;
 
-use GuzzleHttp\Adapter\FakeParallelAdapter;
-use GuzzleHttp\Adapter\MockAdapter;
 use GuzzleHttp\Client;
 use GuzzleHttp\Event\BeforeEvent;
+use GuzzleHttp\Event\ErrorEvent;
 use GuzzleHttp\Message\MessageFactory;
 use GuzzleHttp\Message\Response;
 use GuzzleHttp\Exception\RequestException;
+use GuzzleHttp\Ring\Client\MockHandler;
+use GuzzleHttp\Ring\Future\FutureArray;
 use GuzzleHttp\Subscriber\History;
 use GuzzleHttp\Subscriber\Mock;
+use React\Promise\Deferred;
 
 /**
  * @covers GuzzleHttp\Client
  */
 class ClientTest extends \PHPUnit_Framework_TestCase
 {
+    /** @callable */
+    private $ma;
+
+    public function setup()
+    {
+        $this->ma = function () {
+            throw new \RuntimeException('Should not have been called.');
+        };
+    }
+
     public function testProvidesDefaultUserAgent()
     {
-        $this->assertEquals(1, preg_match('#^Guzzle/.+ curl/.+ PHP/.+$#', Client::getDefaultUserAgent()));
+        $ua = Client::getDefaultUserAgent();
+        $this->assertEquals(1, preg_match('#^Guzzle/.+ curl/.+ PHP/.+$#', $ua));
     }
 
     public function testUsesDefaultDefaultOptions()
@@ -27,7 +39,7 @@ public function testUsesDefaultDefaultOptions()
         $client = new Client();
         $this->assertTrue($client->getDefaultOption('allow_redirects'));
         $this->assertTrue($client->getDefaultOption('exceptions'));
-        $this->assertContains('cacert.pem', $client->getDefaultOption('verify'));
+        $this->assertTrue($client->getDefaultOption('verify'));
     }
 
     public function testUsesProvidedDefaultOptions()
@@ -40,7 +52,7 @@ public function testUsesProvidedDefaultOptions()
         ]);
         $this->assertFalse($client->getDefaultOption('allow_redirects'));
         $this->assertTrue($client->getDefaultOption('exceptions'));
-        $this->assertContains('cacert.pem', $client->getDefaultOption('verify'));
+        $this->assertTrue($client->getDefaultOption('verify'));
         $this->assertEquals(['foo' => 'bar'], $client->getDefaultOption('query'));
     }
 
@@ -58,32 +70,27 @@ public function testCanSpecifyBaseUrlUriTemplate()
         $this->assertEquals('http://foo.com/baz/', $client->getBaseUrl());
     }
 
-    public function testClientUsesDefaultAdapterWhenNoneIsSet()
+    /**
+     * @expectedException \Exception
+     * @expectedExceptionMessage Foo
+     */
+    public function testCanSpecifyHandler()
     {
-        $client = new Client();
-        if (!extension_loaded('curl')) {
-            $adapter = 'GuzzleHttp\Adapter\StreamAdapter';
-        } elseif (ini_get('allow_url_fopen')) {
-            $adapter = 'GuzzleHttp\Adapter\StreamingProxyAdapter';
-        } else {
-            $adapter = 'GuzzleHttp\Adapter\Curl\CurlAdapter';
-        }
-        $this->assertInstanceOf($adapter, $this->readAttribute($client, 'adapter'));
+        $client = new Client(['handler' => function () {
+                throw new \Exception('Foo');
+            }]);
+        $client->get('http://httpbin.org');
     }
 
     /**
      * @expectedException \Exception
      * @expectedExceptionMessage Foo
      */
-    public function testCanSpecifyAdapter()
+    public function testCanSpecifyHandlerAsAdapter()
     {
-        $adapter = $this->getMockBuilder('GuzzleHttp\Adapter\AdapterInterface')
-            ->setMethods(['send'])
-            ->getMockForAbstractClass();
-        $adapter->expects($this->once())
-            ->method('send')
-            ->will($this->throwException(new \Exception('Foo')));
-        $client = new Client(['adapter' => $adapter]);
+        $client = new Client(['adapter' => function () {
+            throw new \Exception('Foo');
+        }]);
         $client->get('http://httpbin.org');
     }
 
@@ -226,6 +233,27 @@ function ($method, $url, array $options = []) use (&$o) {
         $this->assertEquals('a=b&baz=bam&t=1', $request->getQuery());
     }
 
+    public function testClientMergesDefaultHeadersCaseInsensitively()
+    {
+        $client = new Client(['defaults' => ['headers' => ['Foo' => 'Bar']]]);
+        $request = $client->createRequest('GET', 'http://foo.com?a=b', [
+            'headers' => ['foo' => 'custom', 'user-agent' => 'test']
+        ]);
+        $this->assertEquals('test', $request->getHeader('User-Agent'));
+        $this->assertEquals('custom', $request->getHeader('Foo'));
+    }
+
+    public function testDoesNotOverwriteExistingUA()
+    {
+        $client = new Client(['defaults' => [
+            'headers' => ['User-Agent' => 'test']
+        ]]);
+        $this->assertEquals(
+            ['User-Agent' => 'test'],
+            $client->getDefaultOption('headers')
+        );
+    }
+
     public function testUsesBaseUrlWhenNoUrlIsSet()
     {
         $client = new Client(['base_url' => 'http://www.foo.com/baz?bam=bar']);
@@ -285,56 +313,69 @@ public function testCanSetRelativeUrlStartingWithHttp()
 
     public function testClientSendsRequests()
     {
-        $response = new Response(200);
-        $adapter = new MockAdapter();
-        $adapter->setResponse($response);
-        $client = new Client(['adapter' => $adapter]);
-        $this->assertSame($response, $client->get('http://test.com'));
+        $mock = new MockHandler(['status' => 200, 'headers' => []]);
+        $client = new Client(['handler' => $mock]);
+        $response = $client->get('http://test.com');
+        $this->assertEquals(200, $response->getStatusCode());
         $this->assertEquals('http://test.com', $response->getEffectiveUrl());
     }
 
     public function testSendingRequestCanBeIntercepted()
     {
         $response = new Response(200);
-        $response2 = new Response(200);
-        $adapter = new MockAdapter();
-        $adapter->setResponse($response);
-        $client = new Client(['adapter' => $adapter]);
+        $client = new Client(['handler' => $this->ma]);
         $client->getEmitter()->on(
             'before',
-            function (BeforeEvent $e) use ($response2) {
-                $e->intercept($response2);
+            function (BeforeEvent $e) use ($response) {
+                $e->intercept($response);
             }
         );
-        $this->assertSame($response2, $client->get('http://test.com'));
-        $this->assertEquals('http://test.com', $response2->getEffectiveUrl());
+        $this->assertSame($response, $client->get('http://test.com'));
+        $this->assertEquals('http://test.com', $response->getEffectiveUrl());
     }
 
     /**
      * @expectedException \GuzzleHttp\Exception\RequestException
-     * @expectedExceptionMessage No response
+     * @expectedExceptionMessage Argument 1 passed to GuzzleHttp\Message\FutureResponse::proxy() must implement interface GuzzleHttp\Ring\Future\FutureInterface
      */
     public function testEnsuresResponseIsPresentAfterSending()
     {
-        $adapter = $this->getMockBuilder('GuzzleHttp\Adapter\MockAdapter')
-            ->setMethods(['send'])
-            ->getMock();
-        $adapter->expects($this->once())
-            ->method('send');
-        $client = new Client(['adapter' => $adapter]);
+        $handler = function () {};
+        $client = new Client(['handler' => $handler]);
         $client->get('http://httpbin.org');
     }
 
+    /**
+     * @expectedException \GuzzleHttp\Exception\RequestException
+     * @expectedExceptionMessage Waiting did not resolve future
+     */
+    public function testEnsuresResponseIsPresentAfterDereferencing()
+    {
+        $deferred = new Deferred();
+        $handler = new MockHandler(function () use ($deferred) {
+            return new FutureArray(
+                $deferred->promise(),
+                function () {}
+            );
+        });
+        $client = new Client(['handler' => $handler]);
+        $response = $client->get('http://httpbin.org');
+        $response->wait();
+    }
+
     public function testClientHandlesErrorsDuringBeforeSend()
     {
         $client = new Client();
         $client->getEmitter()->on('before', function ($e) {
             throw new \Exception('foo');
         });
-        $client->getEmitter()->on('error', function ($e) {
+        $client->getEmitter()->on('error', function (ErrorEvent $e) {
             $e->intercept(new Response(200));
         });
-        $this->assertEquals(200, $client->get('http://test.com')->getStatusCode());
+        $this->assertEquals(
+            200,
+            $client->get('http://test.com')->getStatusCode()
+        );
     }
 
     /**
@@ -344,7 +385,7 @@ public function testClientHandlesErrorsDuringBeforeSend()
     public function testClientHandlesErrorsDuringBeforeSendAndThrowsIfUnhandled()
     {
         $client = new Client();
-        $client->getEmitter()->on('before', function ($e) {
+        $client->getEmitter()->on('before', function (BeforeEvent $e) {
             throw new RequestException('foo', $e->getRequest());
         });
         $client->get('http://httpbin.org');
@@ -357,12 +398,95 @@ public function testClientHandlesErrorsDuringBeforeSendAndThrowsIfUnhandled()
     public function testClientWrapsExceptions()
     {
         $client = new Client();
-        $client->getEmitter()->on('before', function ($e) {
+        $client->getEmitter()->on('before', function (BeforeEvent $e) {
             throw new \Exception('foo');
         });
         $client->get('http://httpbin.org');
     }
 
+    public function testCanInjectResponseForFutureError()
+    {
+        $calledFuture = false;
+        $deferred = new Deferred();
+        $future = new FutureArray(
+            $deferred->promise(),
+            function () use ($deferred, &$calledFuture) {
+                $calledFuture = true;
+                $deferred->resolve(['error' => new \Exception('Noo!')]);
+            }
+        );
+        $mock = new MockHandler($future);
+        $client = new Client(['handler' => $mock]);
+        $called = 0;
+        $response = $client->get('http://localhost:123/foo', [
+            'future' => true,
+            'events' => [
+                'error' => function (ErrorEvent $e) use (&$called) {
+                    $called++;
+                    $e->intercept(new Response(200));
+                }
+            ]
+        ]);
+        $this->assertEquals(0, $called);
+        $this->assertInstanceOf('GuzzleHttp\Message\FutureResponse', $response);
+        $this->assertEquals(200, $response->getStatusCode());
+        $this->assertTrue($calledFuture);
+        $this->assertEquals(1, $called);
+    }
+
+    public function testCanReturnFutureResults()
+    {
+        $called = false;
+        $deferred = new Deferred();
+        $future = new FutureArray(
+            $deferred->promise(),
+            function () use ($deferred, &$called) {
+                $called = true;
+                $deferred->resolve(['status' => 201, 'headers' => []]);
+            }
+        );
+        $mock = new MockHandler($future);
+        $client = new Client(['handler' => $mock]);
+        $response = $client->get('http://localhost:123/foo', ['future' => true]);
+        $this->assertFalse($called);
+        $this->assertInstanceOf('GuzzleHttp\Message\FutureResponse', $response);
+        $this->assertEquals(201, $response->getStatusCode());
+        $this->assertTrue($called);
+    }
+
+    public function testThrowsExceptionsWhenDereferenced()
+    {
+        $calledFuture = false;
+        $deferred = new Deferred();
+        $future = new FutureArray(
+            $deferred->promise(),
+            function () use ($deferred, &$calledFuture) {
+                $calledFuture = true;
+                $deferred->resolve(['error' => new \Exception('Noop!')]);
+            }
+        );
+        $client = new Client(['handler' => new MockHandler($future)]);
+        try {
+            $res = $client->get('http://localhost:123/foo', ['future' => true]);
+            $res->wait();
+            $this->fail('Did not throw');
+        } catch (RequestException $e) {
+            $this->assertEquals(1, $calledFuture);
+        }
+    }
+
+    /**
+     * @expectedExceptionMessage Noo!
+     * @expectedException \GuzzleHttp\Exception\RequestException
+     */
+    public function testThrowsExceptionsSynchronously()
+    {
+        $client = new Client([
+            'handler' => new MockHandler(['error' => new \Exception('Noo!')])
+        ]);
+        $client->get('http://localhost:123/foo');
+    }
+
     public function testCanSetDefaultValues()
     {
         $client = new Client(['foo' => 'bar']);
@@ -389,24 +513,14 @@ public function testSendsAllInParallel()
         ];
 
         $client->sendAll($requests);
-        $requests = array_map(function($r) { return $r->getMethod(); }, $history->getRequests());
+        $requests = array_map(function($r) {
+            return $r->getMethod();
+        }, $history->getRequests());
         $this->assertContains('GET', $requests);
         $this->assertContains('POST', $requests);
         $this->assertContains('PUT', $requests);
     }
 
-    public function testCanSetCustomParallelAdapter()
-    {
-        $called = false;
-        $pa = new FakeParallelAdapter(new MockAdapter(function () use (&$called) {
-            $called = true;
-            return new Response(203);
-        }));
-        $client = new Client(['parallel_adapter' => $pa]);
-        $client->sendAll([$client->createRequest('GET', 'http://www.foo.com')]);
-        $this->assertTrue($called);
-    }
-
     public function testCanDisableAuthPerRequest()
     {
         $client = new Client(['defaults' => ['auth' => 'foo']]);
@@ -416,40 +530,56 @@ public function testCanDisableAuthPerRequest()
         $this->assertFalse($request->getConfig()->hasKey('auth'));
     }
 
-    /**
-     * @expectedException \PHPUnit_Framework_Error_Deprecated
-     */
-    public function testHasDeprecatedGetEmitter()
-    {
-        $client = new Client();
-        $client->getEventDispatcher();
-    }
-
     public function testUsesProxyEnvironmentVariables()
     {
-        $http = isset($_SERVER['HTTP_PROXY']) ? $_SERVER['HTTP_PROXY'] : null;
-        $https = isset($_SERVER['HTTPS_PROXY']) ? $_SERVER['HTTPS_PROXY'] : null;
-        unset($_SERVER['HTTP_PROXY']);
-        unset($_SERVER['HTTPS_PROXY']);
+        $http = getenv('HTTP_PROXY');
+        $https = getenv('HTTPS_PROXY');
 
         $client = new Client();
         $this->assertNull($client->getDefaultOption('proxy'));
 
-        $_SERVER['HTTP_PROXY'] = '127.0.0.1';
+        putenv('HTTP_PROXY=127.0.0.1');
         $client = new Client();
         $this->assertEquals(
             ['http' => '127.0.0.1'],
             $client->getDefaultOption('proxy')
         );
 
-        $_SERVER['HTTPS_PROXY'] = '127.0.0.2';
+        putenv('HTTPS_PROXY=127.0.0.2');
         $client = new Client();
         $this->assertEquals(
             ['http' => '127.0.0.1', 'https' => '127.0.0.2'],
             $client->getDefaultOption('proxy')
         );
 
-        $_SERVER['HTTP_PROXY'] = $http;
-        $_SERVER['HTTPS_PROXY'] = $https;
+        putenv("HTTP_PROXY=$http");
+        putenv("HTTPS_PROXY=$https");
+    }
+
+    public function testReturnsFutureForErrorWhenRequested()
+    {
+        $client = new Client(['handler' => new MockHandler(['status' => 404])]);
+        $request = $client->createRequest('GET', 'http://localhost:123/foo', [
+            'future' => true
+        ]);
+        $res = $client->send($request);
+        $this->assertInstanceOf('GuzzleHttp\Message\FutureResponse', $res);
+        try {
+            $res->wait();
+            $this->fail('did not throw');
+        } catch (RequestException $e) {
+            $this->assertContains('404', $e->getMessage());
+        }
+    }
+
+    public function testReturnsFutureForResponseWhenRequested()
+    {
+        $client = new Client(['handler' => new MockHandler(['status' => 200])]);
+        $request = $client->createRequest('GET', 'http://localhost:123/foo', [
+            'future' => true
+        ]);
+        $res = $client->send($request);
+        $this->assertInstanceOf('GuzzleHttp\Message\FutureResponse', $res);
+        $this->assertEquals(200, $res->getStatusCode());
     }
 }
diff --git a/core/vendor/guzzlehttp/guzzle/tests/CollectionTest.php b/core/vendor/guzzlehttp/guzzle/tests/CollectionTest.php
index 9e6155f7b39eaaf714e099f8851d8980842bfc13..d137947db79d28a5054e3093fbb629d81196e53c 100644
--- a/core/vendor/guzzlehttp/guzzle/tests/CollectionTest.php
+++ b/core/vendor/guzzlehttp/guzzle/tests/CollectionTest.php
@@ -65,9 +65,11 @@ public function testHandlesMergingInDisparateDataSources()
         );
         $this->coll->merge($params);
         $this->assertEquals($this->coll->toArray(), $params);
-
-        // Pass the same object to itself
-        $this->assertEquals($this->coll->merge($this->coll), $this->coll);
+        $this->coll->merge(new Collection(['test4' => 'hi']));
+        $this->assertEquals(
+            $this->coll->toArray(),
+            $params + ['test4' => 'hi']
+        );
     }
 
     public function testCanClearAllDataOrSpecificKeys()
@@ -175,7 +177,7 @@ public function testAllowsFunctionalFilter()
             'same_number' => 'ten'
         ));
 
-        $filtered = $this->coll->filter(function($key, $value) {
+        $filtered = $this->coll->filter(function ($key, $value) {
             return $value == 'ten';
         });
 
@@ -195,7 +197,7 @@ public function testAllowsFunctionalMapping()
             'number_3' => 3
         ));
 
-        $mapped = $this->coll->map(function($key, $value) {
+        $mapped = $this->coll->map(function ($key, $value) {
             return $value * $value;
         });
 
@@ -228,13 +230,8 @@ public function testImplementsArrayAccess()
 
     public function testCanReplaceAllData()
     {
-        $this->assertSame($this->coll, $this->coll->replace(array(
-            'a' => '123'
-        )));
-
-        $this->assertEquals(array(
-            'a' => '123'
-        ), $this->coll->toArray());
+        $this->coll->replace(array('a' => '123'));
+        $this->assertEquals(array('a' => '123'), $this->coll->toArray());
     }
 
     public function testPreparesFromConfig()
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Cookie/CookieJarTest.php b/core/vendor/guzzlehttp/guzzle/tests/Cookie/CookieJarTest.php
index eaa2a5fdaa25a1266b4a73a20182048f3f03e815..1360419d9d84076c68476c49b0836cfbf240cd1e 100644
--- a/core/vendor/guzzlehttp/guzzle/tests/Cookie/CookieJarTest.php
+++ b/core/vendor/guzzlehttp/guzzle/tests/Cookie/CookieJarTest.php
@@ -4,8 +4,8 @@
 
 use GuzzleHttp\Cookie\CookieJar;
 use GuzzleHttp\Cookie\SetCookie;
-use GuzzleHttp\Message\Response;
 use GuzzleHttp\Message\Request;
+use GuzzleHttp\Message\Response;
 
 /**
  * @covers GuzzleHttp\Cookie\CookieJar
@@ -228,10 +228,10 @@ public function testAddsCookiesFromResponseWithRequest()
     public function getMatchingCookiesDataProvider()
     {
         return array(
-            array('https://example.com', 'foo=bar;baz=foobar'),
+            array('https://example.com', 'foo=bar; baz=foobar'),
             array('http://example.com', ''),
-            array('https://example.com:8912', 'foo=bar;baz=foobar'),
-            array('https://foo.example.com', 'foo=bar;baz=foobar'),
+            array('https://example.com:8912', 'foo=bar; baz=foobar'),
+            array('https://foo.example.com', 'foo=bar; baz=foobar'),
             array('http://foo.example.com/test/acme/', 'googoo=gaga')
         );
     }
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Cookie/FileCookieJarTest.php b/core/vendor/guzzlehttp/guzzle/tests/Cookie/FileCookieJarTest.php
index 40431c40b5a378b7c1773c73364c876c2b4d8c90..1d11337154280827f75d915c74da0eb21b72dfdc 100644
--- a/core/vendor/guzzlehttp/guzzle/tests/Cookie/FileCookieJarTest.php
+++ b/core/vendor/guzzlehttp/guzzle/tests/Cookie/FileCookieJarTest.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp\Tests\CookieJar;
 
 use GuzzleHttp\Cookie\FileCookieJar;
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Cookie/SetCookieTest.php b/core/vendor/guzzlehttp/guzzle/tests/Cookie/SetCookieTest.php
index 20cb23b74225027b4d09b9a5b5892933454b2eb5..3ddd082018bba044756cd023e4954f1ed73c8899 100644
--- a/core/vendor/guzzlehttp/guzzle/tests/Cookie/SetCookieTest.php
+++ b/core/vendor/guzzlehttp/guzzle/tests/Cookie/SetCookieTest.php
@@ -60,15 +60,15 @@ public function testHoldsValues()
         $this->assertEquals('baz', $cookie->toArray()['foo']);
         $this->assertEquals('bam', $cookie->toArray()['bar']);
 
-        $cookie->setName('a')
-            ->setValue('b')
-            ->setPath('c')
-            ->setDomain('bar.com')
-            ->setExpires(10)
-            ->setMaxAge(200)
-            ->setSecure(false)
-            ->setHttpOnly(false)
-            ->setDiscard(false);
+        $cookie->setName('a');
+        $cookie->setValue('b');
+        $cookie->setPath('c');
+        $cookie->setDomain('bar.com');
+        $cookie->setExpires(10);
+        $cookie->setMaxAge(200);
+        $cookie->setSecure(false);
+        $cookie->setHttpOnly(false);
+        $cookie->setDiscard(false);
 
         $this->assertEquals('a', $cookie->getName());
         $this->assertEquals('b', $cookie->getValue());
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Event/AbstractEventTest.php b/core/vendor/guzzlehttp/guzzle/tests/Event/AbstractEventTest.php
index 357a6a6f5522d3e8b7ae610a853afb034d427cff..b8c06f15272ec70072e884cbedad4ce3385faf83 100644
--- a/core/vendor/guzzlehttp/guzzle/tests/Event/AbstractEventTest.php
+++ b/core/vendor/guzzlehttp/guzzle/tests/Event/AbstractEventTest.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp\Tests\Event;
 
 class AbstractEventTest extends \PHPUnit_Framework_TestCase
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Event/AbstractRequestEventTest.php b/core/vendor/guzzlehttp/guzzle/tests/Event/AbstractRequestEventTest.php
index eeda4e4ffa40ef19d6df1aa72ba980b8ad211c94..50536c5826eb4344e8ee44c551a30a83943c70ff 100644
--- a/core/vendor/guzzlehttp/guzzle/tests/Event/AbstractRequestEventTest.php
+++ b/core/vendor/guzzlehttp/guzzle/tests/Event/AbstractRequestEventTest.php
@@ -1,9 +1,8 @@
 <?php
-
 namespace GuzzleHttp\Tests\Event;
 
 use GuzzleHttp\Client;
-use GuzzleHttp\Adapter\Transaction;
+use GuzzleHttp\Transaction;
 use GuzzleHttp\Message\Request;
 
 /**
@@ -17,8 +16,8 @@ public function testHasTransactionMethods()
         $e = $this->getMockBuilder('GuzzleHttp\Event\AbstractRequestEvent')
             ->setConstructorArgs([$t])
             ->getMockForAbstractClass();
-        $this->assertSame($t->getClient(), $e->getClient());
-        $this->assertSame($t->getRequest(), $e->getRequest());
+        $this->assertSame($t->client, $e->getClient());
+        $this->assertSame($t->request, $e->getRequest());
     }
 
     public function testHasTransaction()
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Event/AbstractRetryableEventTest.php b/core/vendor/guzzlehttp/guzzle/tests/Event/AbstractRetryableEventTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..dcc874c66d47bfcd7bc58e265becf8fffbb6f02c
--- /dev/null
+++ b/core/vendor/guzzlehttp/guzzle/tests/Event/AbstractRetryableEventTest.php
@@ -0,0 +1,37 @@
+<?php
+namespace GuzzleHttp\Tests\Event;
+
+use GuzzleHttp\Client;
+use GuzzleHttp\Transaction;
+use GuzzleHttp\Message\Request;
+
+/**
+ * @covers GuzzleHttp\Event\AbstractRetryableEvent
+ */
+class AbstractRetryableEventTest extends \PHPUnit_Framework_TestCase
+{
+    public function testCanRetry()
+    {
+        $t = new Transaction(new Client(), new Request('GET', '/'));
+        $t->transferInfo = ['foo' => 'bar'];
+        $e = $this->getMockBuilder('GuzzleHttp\Event\AbstractRetryableEvent')
+            ->setConstructorArgs([$t])
+            ->getMockForAbstractClass();
+        $e->retry();
+        $this->assertTrue($e->isPropagationStopped());
+        $this->assertEquals('before', $t->state);
+    }
+
+    public function testCanRetryAfterDelay()
+    {
+        $t = new Transaction(new Client(), new Request('GET', '/'));
+        $t->transferInfo = ['foo' => 'bar'];
+        $e = $this->getMockBuilder('GuzzleHttp\Event\AbstractRetryableEvent')
+            ->setConstructorArgs([$t])
+            ->getMockForAbstractClass();
+        $e->retry(10);
+        $this->assertTrue($e->isPropagationStopped());
+        $this->assertEquals('before', $t->state);
+        $this->assertEquals(10, $t->request->getConfig()->get('delay'));
+    }
+}
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Event/AbstractTransferEventTest.php b/core/vendor/guzzlehttp/guzzle/tests/Event/AbstractTransferEventTest.php
index 418e555adabb49b06a9871392a8e4fc3803d0101..6f2deba30206136312fa1a1c958d87abf113354e 100644
--- a/core/vendor/guzzlehttp/guzzle/tests/Event/AbstractTransferEventTest.php
+++ b/core/vendor/guzzlehttp/guzzle/tests/Event/AbstractTransferEventTest.php
@@ -1,9 +1,9 @@
 <?php
-
 namespace GuzzleHttp\Tests\Event;
 
 use GuzzleHttp\Client;
-use GuzzleHttp\Adapter\Transaction;
+use GuzzleHttp\Message\Response;
+use GuzzleHttp\Transaction;
 use GuzzleHttp\Message\Request;
 
 /**
@@ -13,13 +13,36 @@ class AbstractTransferEventTest extends \PHPUnit_Framework_TestCase
 {
     public function testHasStats()
     {
-        $s = ['foo' => 'bar'];
         $t = new Transaction(new Client(), new Request('GET', '/'));
+        $t->transferInfo = ['foo' => 'bar'];
         $e = $this->getMockBuilder('GuzzleHttp\Event\AbstractTransferEvent')
-            ->setConstructorArgs([$t, $s])
+            ->setConstructorArgs([$t])
             ->getMockForAbstractClass();
         $this->assertNull($e->getTransferInfo('baz'));
         $this->assertEquals('bar', $e->getTransferInfo('foo'));
-        $this->assertEquals($s, $e->getTransferInfo());
+        $this->assertEquals($t->transferInfo, $e->getTransferInfo());
+    }
+
+    public function testHasResponse()
+    {
+        $t = new Transaction(new Client(), new Request('GET', '/'));
+        $t->response = new Response(200);
+        $e = $this->getMockBuilder('GuzzleHttp\Event\AbstractTransferEvent')
+            ->setConstructorArgs([$t])
+            ->getMockForAbstractClass();
+        $this->assertSame($t->response, $e->getResponse());
+    }
+
+    public function testCanInterceptWithResponse()
+    {
+        $t = new Transaction(new Client(), new Request('GET', '/'));
+        $r = new Response(200);
+        $e = $this->getMockBuilder('GuzzleHttp\Event\AbstractTransferEvent')
+            ->setConstructorArgs([$t])
+            ->getMockForAbstractClass();
+        $e->intercept($r);
+        $this->assertSame($t->response, $r);
+        $this->assertSame($t->response, $e->getResponse());
+        $this->assertTrue($e->isPropagationStopped());
     }
 }
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Event/RequestBeforeSendEventTest.php b/core/vendor/guzzlehttp/guzzle/tests/Event/BeforeEventTest.php
similarity index 70%
rename from core/vendor/guzzlehttp/guzzle/tests/Event/RequestBeforeSendEventTest.php
rename to core/vendor/guzzlehttp/guzzle/tests/Event/BeforeEventTest.php
index 91590c8263b3a43348d46fa2a45b85339e55306a..469e4e25169c499317f00da335cefe0f8450f779 100644
--- a/core/vendor/guzzlehttp/guzzle/tests/Event/RequestBeforeSendEventTest.php
+++ b/core/vendor/guzzlehttp/guzzle/tests/Event/BeforeEventTest.php
@@ -1,8 +1,7 @@
 <?php
-
 namespace GuzzleHttp\Tests\Event;
 
-use GuzzleHttp\Adapter\Transaction;
+use GuzzleHttp\Transaction;
 use GuzzleHttp\Client;
 use GuzzleHttp\Event\BeforeEvent;
 use GuzzleHttp\Message\Request;
@@ -15,15 +14,13 @@ class BeforeEventTest extends \PHPUnit_Framework_TestCase
 {
     public function testInterceptsWithEvent()
     {
-        $response = new Response(200);
-        $res = null;
         $t = new Transaction(new Client(), new Request('GET', '/'));
-        $t->getRequest()->getEmitter()->on('complete', function ($e) use (&$res) {
-            $res = $e;
-        });
+        $t->exception = new \Exception('foo');
         $e = new BeforeEvent($t);
+        $response = new Response(200);
         $e->intercept($response);
         $this->assertTrue($e->isPropagationStopped());
-        $this->assertSame($res->getClient(), $e->getClient());
+        $this->assertSame($t->response, $response);
+        $this->assertNull($t->exception);
     }
 }
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Event/EmitterTest.php b/core/vendor/guzzlehttp/guzzle/tests/Event/EmitterTest.php
index 6c9ea61040e83a5ebeb405500923bae5bdd856b0..5b7061bc600c24e311c6d8986029eeb4568f0b98 100644
--- a/core/vendor/guzzlehttp/guzzle/tests/Event/EmitterTest.php
+++ b/core/vendor/guzzlehttp/guzzle/tests/Event/EmitterTest.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp\Tests\Event;
 
 use GuzzleHttp\Event\Emitter;
@@ -42,7 +41,9 @@ public function testAddListener()
     {
         $this->emitter->on('pre.foo', array($this->listener, 'preFoo'));
         $this->emitter->on('post.foo', array($this->listener, 'postFoo'));
-        $this->assertCount(1, $this->emitter->listeners(self::preFoo));
+        $this->assertTrue($this->emitter->hasListeners(self::preFoo));
+        $this->assertTrue($this->emitter->hasListeners(self::preFoo));
+        $this->assertCount(1, $this->emitter->listeners(self::postFoo));
         $this->assertCount(1, $this->emitter->listeners(self::postFoo));
         $this->assertCount(2, $this->emitter->listeners());
     }
@@ -256,12 +257,12 @@ public function testReturnsEmptyArrayForNonExistentEvent()
     public function testCanAddFirstAndLastListeners()
     {
         $b = '';
-        $this->emitter->on('foo', function() use (&$b) { $b .= 'a'; }, 'first'); // 1
-        $this->emitter->on('foo', function() use (&$b) { $b .= 'b'; }, 'last');  // 0
-        $this->emitter->on('foo', function() use (&$b) { $b .= 'c'; }, 'first'); // 2
-        $this->emitter->on('foo', function() use (&$b) { $b .= 'd'; }, 'first'); // 3
-        $this->emitter->on('foo', function() use (&$b) { $b .= 'e'; }, 'first'); // 4
-        $this->emitter->on('foo', function() use (&$b) { $b .= 'f'; });          // 0
+        $this->emitter->on('foo', function () use (&$b) { $b .= 'a'; }, 'first'); // 1
+        $this->emitter->on('foo', function () use (&$b) { $b .= 'b'; }, 'last');  // 0
+        $this->emitter->on('foo', function () use (&$b) { $b .= 'c'; }, 'first'); // 2
+        $this->emitter->on('foo', function () use (&$b) { $b .= 'd'; }, 'first'); // 3
+        $this->emitter->on('foo', function () use (&$b) { $b .= 'e'; }, 'first'); // 4
+        $this->emitter->on('foo', function () use (&$b) { $b .= 'f'; });          // 0
         $this->emitter->emit('foo', $this->getEvent());
         $this->assertEquals('edcabf', $b);
     }
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Event/ErrorEventTest.php b/core/vendor/guzzlehttp/guzzle/tests/Event/ErrorEventTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..e91b7f0c3a38ee7666ffffc35ec6fbf758e8ed73
--- /dev/null
+++ b/core/vendor/guzzlehttp/guzzle/tests/Event/ErrorEventTest.php
@@ -0,0 +1,23 @@
+<?php
+namespace GuzzleHttp\Tests\Event;
+
+use GuzzleHttp\Transaction;
+use GuzzleHttp\Client;
+use GuzzleHttp\Event\ErrorEvent;
+use GuzzleHttp\Exception\RequestException;
+use GuzzleHttp\Message\Request;
+
+/**
+ * @covers GuzzleHttp\Event\ErrorEvent
+ */
+class ErrorEventTest extends \PHPUnit_Framework_TestCase
+{
+    public function testInterceptsWithEvent()
+    {
+        $t = new Transaction(new Client(), new Request('GET', '/'));
+        $except = new RequestException('foo', $t->request);
+        $t->exception = $except;
+        $e = new ErrorEvent($t);
+        $this->assertSame($e->getException(), $t->exception);
+    }
+}
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Event/HasEmitterTraitTest.php b/core/vendor/guzzlehttp/guzzle/tests/Event/HasEmitterTraitTest.php
index bfd0870e77395af599f2b9309c89089513eb874a..470991871610f5bd4801421a276466f7ab677674 100644
--- a/core/vendor/guzzlehttp/guzzle/tests/Event/HasEmitterTraitTest.php
+++ b/core/vendor/guzzlehttp/guzzle/tests/Event/HasEmitterTraitTest.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp\Tests\Event;
 
 use GuzzleHttp\Event\HasEmitterInterface;
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Event/HeadersEventTest.php b/core/vendor/guzzlehttp/guzzle/tests/Event/HeadersEventTest.php
deleted file mode 100644
index 02db4dce3d3dc792d1688c0d8e3d7117f198649b..0000000000000000000000000000000000000000
--- a/core/vendor/guzzlehttp/guzzle/tests/Event/HeadersEventTest.php
+++ /dev/null
@@ -1,39 +0,0 @@
-<?php
-
-namespace GuzzleHttp\Tests\Event;
-
-use GuzzleHttp\Adapter\Transaction;
-use GuzzleHttp\Client;
-use GuzzleHttp\Event\HeadersEvent;
-use GuzzleHttp\Message\Request;
-use GuzzleHttp\Message\Response;
-
-/**
- * @covers GuzzleHttp\Event\HeadersEvent
- */
-class HeadersEventTest extends \PHPUnit_Framework_TestCase
-{
-    public function testHasValues()
-    {
-        $c = new Client();
-        $r = new Request('GET', '/');
-        $t = new Transaction($c, $r);
-        $response = new Response(200);
-        $t->setResponse($response);
-        $e = new HeadersEvent($t);
-        $this->assertSame($c, $e->getClient());
-        $this->assertSame($r, $e->getRequest());
-        $this->assertSame($response, $e->getResponse());
-    }
-
-    /**
-     * @expectedException \RuntimeException
-     */
-    public function testEnsuresResponseIsSet()
-    {
-        $c = new Client();
-        $r = new Request('GET', '/');
-        $t = new Transaction($c, $r);
-        new HeadersEvent($t);
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Event/ListenerAttacherTraitTest.php b/core/vendor/guzzlehttp/guzzle/tests/Event/ListenerAttacherTraitTest.php
index 18ad85214cb07471df3c62d4a55ee75682b4a271..c066788bcc60181b7573e4950b82f6c48660f0fe 100644
--- a/core/vendor/guzzlehttp/guzzle/tests/Event/ListenerAttacherTraitTest.php
+++ b/core/vendor/guzzlehttp/guzzle/tests/Event/ListenerAttacherTraitTest.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp\Tests\Event;
 
 use GuzzleHttp\Event\HasEmitterInterface;
@@ -23,7 +22,7 @@ class ListenerAttacherTraitTest extends \PHPUnit_Framework_TestCase
 {
     public function testRegistersEvents()
     {
-        $fn = function() {};
+        $fn = function () {};
         $o = new ObjectWithEvents([
             'foo' => $fn,
             'bar' => $fn,
@@ -40,7 +39,7 @@ public function testRegistersEvents()
 
     public function testRegistersEventsWithPriorities()
     {
-        $fn = function() {};
+        $fn = function () {};
         $o = new ObjectWithEvents([
             'foo' => ['fn' => $fn, 'priority' => 99, 'once' => true],
             'bar' => ['fn' => $fn, 'priority' => 50],
@@ -54,7 +53,7 @@ public function testRegistersEventsWithPriorities()
 
     public function testRegistersMultipleEvents()
     {
-        $fn = function() {};
+        $fn = function () {};
         $eventArray = [['fn' => $fn], ['fn' => $fn]];
         $o = new ObjectWithEvents([
             'foo' => $eventArray,
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Event/ProgressEventTest.php b/core/vendor/guzzlehttp/guzzle/tests/Event/ProgressEventTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..664f8b6bba8e940b1a6697be2bc37d60bb030fd4
--- /dev/null
+++ b/core/vendor/guzzlehttp/guzzle/tests/Event/ProgressEventTest.php
@@ -0,0 +1,25 @@
+<?php
+namespace GuzzleHttp\Tests\Event;
+
+use GuzzleHttp\Client;
+use GuzzleHttp\Event\ProgressEvent;
+use GuzzleHttp\Message\Request;
+use GuzzleHttp\Transaction;
+
+/**
+ * @covers GuzzleHttp\Event\ProgressEvent
+ */
+class ProgressEventTest extends \PHPUnit_Framework_TestCase
+{
+    public function testContainsNumbers()
+    {
+        $t = new Transaction(new Client(), new Request('GET', 'http://a.com'));
+        $p = new ProgressEvent($t, 2, 1, 3, 0);
+        $this->assertSame($t->request, $p->getRequest());
+        $this->assertSame($t->client, $p->getClient());
+        $this->assertEquals(2, $p->downloadSize);
+        $this->assertEquals(1, $p->downloaded);
+        $this->assertEquals(3, $p->uploadSize);
+        $this->assertEquals(0, $p->uploaded);
+    }
+}
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Event/RequestAfterSendEventTest.php b/core/vendor/guzzlehttp/guzzle/tests/Event/RequestAfterSendEventTest.php
deleted file mode 100644
index 5b56a625764266e170522b8c550f336095230eb0..0000000000000000000000000000000000000000
--- a/core/vendor/guzzlehttp/guzzle/tests/Event/RequestAfterSendEventTest.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-namespace GuzzleHttp\Tests\Event;
-
-use GuzzleHttp\Adapter\Transaction;
-use GuzzleHttp\Client;
-use GuzzleHttp\Event\CompleteEvent;
-use GuzzleHttp\Message\Request;
-use GuzzleHttp\Message\Response;
-
-/**
- * @covers GuzzleHttp\Event\CompleteEvent
- */
-class CompleteEventTest extends \PHPUnit_Framework_TestCase
-{
-    public function testHasValues()
-    {
-        $c = new Client();
-        $r = new Request('GET', '/');
-        $res = new Response(200);
-        $t = new Transaction($c, $r);
-        $e = new CompleteEvent($t);
-        $e->intercept($res);
-        $this->assertTrue($e->isPropagationStopped());
-        $this->assertSame($res, $e->getResponse());
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Event/RequestErrorEventTest.php b/core/vendor/guzzlehttp/guzzle/tests/Event/RequestErrorEventTest.php
deleted file mode 100644
index 14a27e7d87398419de3b3df04032ac3e25e2a9db..0000000000000000000000000000000000000000
--- a/core/vendor/guzzlehttp/guzzle/tests/Event/RequestErrorEventTest.php
+++ /dev/null
@@ -1,41 +0,0 @@
-<?php
-
-namespace GuzzleHttp\Tests\Event;
-
-use GuzzleHttp\Adapter\Transaction;
-use GuzzleHttp\Client;
-use GuzzleHttp\Event\ErrorEvent;
-use GuzzleHttp\Exception\RequestException;
-use GuzzleHttp\Message\Request;
-use GuzzleHttp\Message\Response;
-
-/**
- * @covers GuzzleHttp\Event\ErrorEvent
- */
-class ErrorEventTest extends \PHPUnit_Framework_TestCase
-{
-    public function testInterceptsWithEvent()
-    {
-        $client = new Client();
-        $request = new Request('GET', '/');
-        $response = new Response(404);
-        $transaction = new Transaction($client, $request);
-        $except = new RequestException('foo', $request, $response);
-        $event = new ErrorEvent($transaction, $except);
-
-        $this->assertSame($except, $event->getException());
-        $this->assertSame($response, $event->getResponse());
-        $this->assertSame($request, $event->getRequest());
-
-        $res = null;
-        $request->getEmitter()->on('complete', function ($e) use (&$res) {
-            $res = $e;
-        });
-
-        $good = new Response(200);
-        $event->intercept($good);
-        $this->assertTrue($event->isPropagationStopped());
-        $this->assertSame($res->getClient(), $event->getClient());
-        $this->assertSame($good, $res->getResponse());
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Event/RequestEventsTest.php b/core/vendor/guzzlehttp/guzzle/tests/Event/RequestEventsTest.php
index a63b3aaa199322ae236074465b0875904783f297..b3b96660fdba90ff281064220242c708fab73567 100644
--- a/core/vendor/guzzlehttp/guzzle/tests/Event/RequestEventsTest.php
+++ b/core/vendor/guzzlehttp/guzzle/tests/Event/RequestEventsTest.php
@@ -1,159 +1,13 @@
 <?php
-
 namespace GuzzleHttp\Tests\Event;
 
-use GuzzleHttp\Client;
-use GuzzleHttp\Adapter\Transaction;
-use GuzzleHttp\Event\BeforeEvent;
-use GuzzleHttp\Event\ErrorEvent;
 use GuzzleHttp\Event\RequestEvents;
-use GuzzleHttp\Exception\RequestException;
-use GuzzleHttp\Message\Request;
-use GuzzleHttp\Message\Response;
-use GuzzleHttp\Subscriber\Mock;
 
 /**
  * @covers GuzzleHttp\Event\RequestEvents
  */
 class RequestEventsTest extends \PHPUnit_Framework_TestCase
 {
-    public function testEmitsAfterSendEvent()
-    {
-        $res = null;
-        $t = new Transaction(new Client(), new Request('GET', '/'));
-        $t->setResponse(new Response(200));
-        $t->getRequest()->getEmitter()->on('complete', function ($e) use (&$res) {
-            $res = $e;
-        });
-        RequestEvents::emitComplete($t);
-        $this->assertSame($res->getClient(), $t->getClient());
-        $this->assertSame($res->getRequest(), $t->getRequest());
-        $this->assertEquals('/', $t->getResponse()->getEffectiveUrl());
-    }
-
-    public function testEmitsAfterSendEventAndEmitsErrorIfNeeded()
-    {
-        $ex2 = $res = null;
-        $request = new Request('GET', '/');
-        $t = new Transaction(new Client(), $request);
-        $t->setResponse(new Response(200));
-        $ex = new RequestException('foo', $request);
-        $t->getRequest()->getEmitter()->on('complete', function ($e) use ($ex) {
-            $ex->e = $e;
-            throw $ex;
-        });
-        $t->getRequest()->getEmitter()->on('error', function ($e) use (&$ex2) {
-            $ex2 = $e->getException();
-            $e->stopPropagation();
-        });
-        RequestEvents::emitComplete($t);
-        $this->assertSame($ex, $ex2);
-    }
-
-    public function testBeforeSendEmitsErrorEvent()
-    {
-        $ex = new \Exception('Foo');
-        $client = new Client();
-        $request = new Request('GET', '/');
-        $response = new Response(200);
-        $t = new Transaction($client, $request);
-        $beforeCalled = $errCalled = 0;
-
-        $request->getEmitter()->on(
-            'before',
-            function (BeforeEvent $e) use ($request, $client, &$beforeCalled, $ex) {
-                $this->assertSame($request, $e->getRequest());
-                $this->assertSame($client, $e->getClient());
-                $beforeCalled++;
-                throw $ex;
-            }
-        );
-
-        $request->getEmitter()->on(
-            'error',
-            function (ErrorEvent $e) use (&$errCalled, $response, $ex) {
-                $errCalled++;
-                $this->assertInstanceOf('GuzzleHttp\Exception\RequestException', $e->getException());
-                $this->assertSame($ex, $e->getException()->getPrevious());
-                $e->intercept($response);
-            }
-        );
-
-        RequestEvents::emitBefore($t);
-        $this->assertEquals(1, $beforeCalled);
-        $this->assertEquals(1, $errCalled);
-        $this->assertSame($response, $t->getResponse());
-    }
-
-    public function testThrowsUnInterceptedErrors()
-    {
-        $ex = new \Exception('Foo');
-        $client = new Client();
-        $request = new Request('GET', '/');
-        $t = new Transaction($client, $request);
-        $errCalled = 0;
-
-        $request->getEmitter()->on('before', function (BeforeEvent $e) use ($ex) {
-            throw $ex;
-        });
-
-        $request->getEmitter()->on('error', function (ErrorEvent $e) use (&$errCalled) {
-            $errCalled++;
-        });
-
-        try {
-            RequestEvents::emitBefore($t);
-            $this->fail('Did not throw');
-        } catch (RequestException $e) {
-            $this->assertEquals(1, $errCalled);
-        }
-    }
-
-    public function testDoesNotEmitErrorEventTwice()
-    {
-        $client = new Client();
-        $mock = new Mock([new Response(500)]);
-        $client->getEmitter()->attach($mock);
-
-        $r = [];
-        $client->getEmitter()->on('error', function (ErrorEvent $event) use (&$r) {
-            $r[] = $event->getRequest();
-        });
-
-        try {
-            $client->get('http://foo.com');
-            $this->fail('Did not throw');
-        } catch (RequestException $e) {
-            $this->assertCount(1, $r);
-        }
-    }
-
-    /**
-     * Note: Longest test name ever.
-     */
-    public function testEmitsErrorEventForRequestExceptionsThrownDuringBeforeThatHaveNotEmittedAnErrorEvent()
-    {
-        $request = new Request('GET', '/');
-        $ex = new RequestException('foo', $request);
-
-        $client = new Client();
-        $client->getEmitter()->on('before', function (BeforeEvent $event) use ($ex) {
-            throw $ex;
-        });
-        $called = false;
-        $client->getEmitter()->on('error', function (ErrorEvent $event) use ($ex, &$called) {
-            $called = true;
-            $this->assertSame($ex, $event->getException());
-        });
-
-        try {
-            $client->get('http://foo.com');
-            $this->fail('Did not throw');
-        } catch (RequestException $e) {
-            $this->assertTrue($called);
-        }
-    }
-
     public function prepareEventProvider()
     {
         $cb = function () {};
@@ -209,4 +63,12 @@ public function testConvertsEventArrays(
         $result = RequestEvents::convertEventArray($in, $events, $add);
         $this->assertEquals($out, $result);
     }
+
+    /**
+     * @expectedException \InvalidArgumentException
+     */
+    public function testValidatesEventFormat()
+    {
+        RequestEvents::convertEventArray(['foo' => false], ['foo'], []);
+    }
 }
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Exception/RequestExceptionTest.php b/core/vendor/guzzlehttp/guzzle/tests/Exception/RequestExceptionTest.php
index c50816c8c4606111b2a784f4010e2e282d746272..bea9077bff14cd32b9bdeef3cdd62639a2e15a92 100644
--- a/core/vendor/guzzlehttp/guzzle/tests/Exception/RequestExceptionTest.php
+++ b/core/vendor/guzzlehttp/guzzle/tests/Exception/RequestExceptionTest.php
@@ -1,10 +1,10 @@
 <?php
-
 namespace GuzzleHttp\Tests\Event;
 
 use GuzzleHttp\Exception\RequestException;
 use GuzzleHttp\Message\Request;
 use GuzzleHttp\Message\Response;
+use GuzzleHttp\Ring\Exception\ConnectException;
 
 /**
  * @covers GuzzleHttp\Exception\RequestException
@@ -59,26 +59,25 @@ public function testCreatesGenericErrorResponseException()
         $this->assertInstanceOf('GuzzleHttp\Exception\RequestException', $e);
     }
 
-    public function testCanSetAndRetrieveErrorEmitted()
-    {
-        $e = RequestException::create(new Request('GET', '/'), new Response(600));
-        $this->assertFalse($e->emittedError());
-        $e->emittedError(true);
-        $this->assertTrue($e->emittedError());
+    public function testHasStatusCodeAsExceptionCode() {
+        $e = RequestException::create(new Request('GET', '/'), new Response(442));
+        $this->assertEquals(442, $e->getCode());
     }
 
-    /**
-     * @expectedException \InvalidArgumentException
-     */
-    public function testCannotSetEmittedErrorToFalse()
+    public function testWrapsRequestExceptions()
     {
-        $e = RequestException::create(new Request('GET', '/'), new Response(600));
-        $e->emittedError(true);
-        $e->emittedError(false);
+        $e = new \Exception('foo');
+        $r = new Request('GET', 'http://www.oo.com');
+        $ex = RequestException::wrapException($r, $e);
+        $this->assertInstanceOf('GuzzleHttp\Exception\RequestException', $ex);
+        $this->assertSame($e, $ex->getPrevious());
     }
 
-    public function testHasStatusCodeAsExceptionCode() {
-        $e = RequestException::create(new Request('GET', '/'), new Response(442));
-        $this->assertEquals(442, $e->getCode());
+    public function testWrapsConnectExceptions()
+    {
+        $e = new ConnectException('foo');
+        $r = new Request('GET', 'http://www.oo.com');
+        $ex = RequestException::wrapException($r, $e);
+        $this->assertInstanceOf('GuzzleHttp\Exception\ConnectException', $ex);
     }
 }
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Exception/XmlParseExceptionTest.php b/core/vendor/guzzlehttp/guzzle/tests/Exception/XmlParseExceptionTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..51b97425ec6911b1aed099043b31b43fa83ff859
--- /dev/null
+++ b/core/vendor/guzzlehttp/guzzle/tests/Exception/XmlParseExceptionTest.php
@@ -0,0 +1,19 @@
+<?php
+
+namespace GuzzleHttp\tests\Exception;
+
+use GuzzleHttp\Exception\XmlParseException;
+
+/**
+ * @covers GuzzleHttp\Exception\XmlParseException
+ */
+class XmlParseExceptionTest extends \PHPUnit_Framework_TestCase
+{
+    public function testHasError()
+    {
+        $error = new \LibXMLError();
+        $e = new XmlParseException('foo', null, null, $error);
+        $this->assertSame($error, $e->getError());
+        $this->assertEquals('foo', $e->getMessage());
+    }
+}
diff --git a/core/vendor/guzzlehttp/guzzle/tests/FunctionsTest.php b/core/vendor/guzzlehttp/guzzle/tests/FunctionsTest.php
deleted file mode 100644
index f632877626d4c9d533509736f1fad22a2bac88a5..0000000000000000000000000000000000000000
--- a/core/vendor/guzzlehttp/guzzle/tests/FunctionsTest.php
+++ /dev/null
@@ -1,174 +0,0 @@
-<?php
-
-namespace GuzzleHttp\Tests;
-
-use GuzzleHttp\Client;
-use GuzzleHttp\Event\BeforeEvent;
-use GuzzleHttp\Event\CompleteEvent;
-use GuzzleHttp\Event\ErrorEvent;
-use GuzzleHttp\Message\Response;
-use GuzzleHttp\Subscriber\Mock;
-
-class FunctionsTest extends \PHPUnit_Framework_TestCase
-{
-    public function testExpandsTemplate()
-    {
-        $this->assertEquals('foo/123', \GuzzleHttp\uri_template('foo/{bar}', ['bar' => '123']));
-    }
-
-    public function noBodyProvider()
-    {
-        return [['get'], ['head'], ['delete']];
-    }
-
-    /**
-     * @dataProvider noBodyProvider
-     */
-    public function testSendsNoBody($method)
-    {
-        Server::flush();
-        Server::enqueue([new Response(200)]);
-        call_user_func("GuzzleHttp\\{$method}", Server::$url, [
-            'headers' => ['foo' => 'bar'],
-            'query' => ['a' => '1']
-        ]);
-        $sent = Server::received(true)[0];
-        $this->assertEquals(strtoupper($method), $sent->getMethod());
-        $this->assertEquals('/?a=1', $sent->getResource());
-        $this->assertEquals('bar', $sent->getHeader('foo'));
-    }
-
-    public function testSendsOptionsRequest()
-    {
-        Server::flush();
-        Server::enqueue([new Response(200)]);
-        \GuzzleHttp\options(Server::$url, ['headers' => ['foo' => 'bar']]);
-        $sent = Server::received(true)[0];
-        $this->assertEquals('OPTIONS', $sent->getMethod());
-        $this->assertEquals('/', $sent->getResource());
-        $this->assertEquals('bar', $sent->getHeader('foo'));
-    }
-
-    public function hasBodyProvider()
-    {
-        return [['put'], ['post'], ['patch']];
-    }
-
-    /**
-     * @dataProvider hasBodyProvider
-     */
-    public function testSendsWithBody($method)
-    {
-        Server::flush();
-        Server::enqueue([new Response(200)]);
-        call_user_func("GuzzleHttp\\{$method}", Server::$url, [
-            'headers' => ['foo' => 'bar'],
-            'body'    => 'test',
-            'query'   => ['a' => '1']
-        ]);
-        $sent = Server::received(true)[0];
-        $this->assertEquals(strtoupper($method), $sent->getMethod());
-        $this->assertEquals('/?a=1', $sent->getResource());
-        $this->assertEquals('bar', $sent->getHeader('foo'));
-        $this->assertEquals('test', $sent->getBody());
-    }
-
-    /**
-     * @expectedException \PHPUnit_Framework_Error_Deprecated
-     * @expectedExceptionMessage GuzzleHttp\Tests\HasDeprecations::baz() is deprecated and will be removed in a future version. Update your code to use the equivalent GuzzleHttp\Tests\HasDeprecations::foo() method instead to avoid breaking changes when this shim is removed.
-     */
-    public function testManagesDeprecatedMethods()
-    {
-        $d = new HasDeprecations();
-        $d->baz();
-    }
-
-    /**
-     * @expectedException \BadMethodCallException
-     */
-    public function testManagesDeprecatedMethodsAndHandlesMissingMethods()
-    {
-        $d = new HasDeprecations();
-        $d->doesNotExist();
-    }
-
-    public function testBatchesRequests()
-    {
-        $client = new Client();
-        $responses = [
-            new Response(301, ['Location' => 'http://foo.com/bar']),
-            new Response(200),
-            new Response(200),
-            new Response(404)
-        ];
-        $client->getEmitter()->attach(new Mock($responses));
-        $requests = [
-            $client->createRequest('GET', 'http://foo.com/baz'),
-            $client->createRequest('HEAD', 'http://httpbin.org/get'),
-            $client->createRequest('PUT', 'http://httpbin.org/put'),
-        ];
-
-        $a = $b = $c = 0;
-        $result = \GuzzleHttp\batch($client, $requests, [
-            'before'   => function (BeforeEvent $e) use (&$a) { $a++; },
-            'complete' => function (CompleteEvent $e) use (&$b) { $b++; },
-            'error'    => function (ErrorEvent $e) use (&$c) { $c++; },
-        ]);
-
-        $this->assertEquals(4, $a);
-        $this->assertEquals(2, $b);
-        $this->assertEquals(1, $c);
-        $this->assertCount(3, $result);
-
-        foreach ($result as $i => $request) {
-            $this->assertSame($requests[$i], $request);
-        }
-
-        // The first result is actually the second (redirect) response.
-        $this->assertSame($responses[1], $result[$requests[0]]);
-        // The second result is a 1:1 request:response map
-        $this->assertSame($responses[2], $result[$requests[1]]);
-        // The third entry is the 404 RequestException
-        $this->assertSame($responses[3], $result[$requests[2]]->getResponse());
-    }
-
-    /**
-     * @expectedException \InvalidArgumentException
-     * @expectedExceptionMessage Invalid event format
-     */
-    public function testBatchValidatesTheEventFormat()
-    {
-        $client = new Client();
-        $requests = [$client->createRequest('GET', 'http://foo.com/baz')];
-        \GuzzleHttp\batch($client, $requests, ['complete' => 'foo']);
-    }
-
-    public function testJsonDecodes()
-    {
-        $data = \GuzzleHttp\json_decode('true');
-        $this->assertTrue($data);
-    }
-
-    /**
-     * @expectedException \InvalidArgumentException
-     * @expectedExceptionMessage Unable to parse JSON data: JSON_ERROR_SYNTAX - Syntax error, malformed JSON
-     */
-    public function testJsonDecodesWithErrorMessages()
-    {
-        \GuzzleHttp\json_decode('!narf!');
-    }
-}
-
-class HasDeprecations
-{
-    function foo()
-    {
-        return 'abc';
-    }
-    function __call($name, $arguments)
-    {
-        return \GuzzleHttp\deprecation_proxy($this, $name, $arguments, [
-            'baz' => 'foo'
-        ]);
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Message/AbstractMessageTest.php b/core/vendor/guzzlehttp/guzzle/tests/Message/AbstractMessageTest.php
index fd037ce7bd31b08518ae04443163936267fb2549..f02a576f5a0a4bcfeaa1bd0924c40651eb55d5b9 100644
--- a/core/vendor/guzzlehttp/guzzle/tests/Message/AbstractMessageTest.php
+++ b/core/vendor/guzzlehttp/guzzle/tests/Message/AbstractMessageTest.php
@@ -47,7 +47,8 @@ public function testCanRemoveBodyBySettingToNullAndRemovesCommonBodyHeaders()
     {
         $m = new Request('GET', 'http://foo.com');
         $m->setBody(Stream::factory('foo'));
-        $m->setHeader('Content-Length', 3)->setHeader('Transfer-Encoding', 'chunked');
+        $m->setHeader('Content-Length', 3);
+        $m->setHeader('Transfer-Encoding', 'chunked');
         $m->setBody(null);
         $this->assertNull($m->getBody());
         $this->assertFalse($m->hasHeader('Content-Length'));
@@ -129,9 +130,10 @@ public function testAddsHeadersWhenNotPresent()
     public function testAddsHeadersWhenPresentSameCase()
     {
         $h = new Request('GET', 'http://foo.com');
-        $h->addHeader('foo', 'bar')->addHeader('foo', 'baz');
+        $h->addHeader('foo', 'bar');
+        $h->addHeader('foo', 'baz');
         $this->assertEquals('bar, baz', $h->getHeader('foo'));
-        $this->assertEquals(['bar', 'baz'], $h->getHeader('foo', true));
+        $this->assertEquals(['bar', 'baz'], $h->getHeaderAsArray('foo'));
     }
 
     public function testAddsMultipleHeaders()
@@ -151,7 +153,8 @@ public function testAddsMultipleHeaders()
     public function testAddsHeadersWhenPresentDifferentCase()
     {
         $h = new Request('GET', 'http://foo.com');
-        $h->addHeader('Foo', 'bar')->addHeader('fOO', 'baz');
+        $h->addHeader('Foo', 'bar');
+        $h->addHeader('fOO', 'baz');
         $this->assertEquals('bar, baz', $h->getHeader('foo'));
     }
 
@@ -162,14 +165,6 @@ public function testAddsHeadersWithArray()
         $this->assertEquals('bar, baz', $h->getHeader('foo'));
     }
 
-    /**
-     * @expectedException \InvalidArgumentException
-     */
-    public function testThrowsExceptionWhenInvalidValueProvidedToAddHeader()
-    {
-        (new Request('GET', 'http://foo.com'))->addHeader('foo', false);
-    }
-
     public function testGetHeadersReturnsAnArrayOfOverTheWireHeaderValues()
     {
         $h = new Request('GET', 'http://foo.com');
@@ -209,14 +204,6 @@ public function testSetHeaderOverwritesExistingValuesUsingArray()
         $this->assertEquals('bar', $h->getHeader('foo'));
     }
 
-    /**
-     * @expectedException \InvalidArgumentException
-     */
-    public function testThrowsExceptionWhenInvalidValueProvidedToSetHeader()
-    {
-        (new Request('GET', 'http://foo.com'))->setHeader('foo', false);
-    }
-
     public function testSetHeadersOverwritesAllHeaders()
     {
         $h = new Request('GET', 'http://foo.com');
@@ -250,7 +237,7 @@ public function testReturnsCorrectTypeWhenMissing()
     {
         $h = new Request('GET', 'http://foo.com');
         $this->assertInternalType('string', $h->getHeader('foo'));
-        $this->assertInternalType('array', $h->getHeader('foo', true));
+        $this->assertInternalType('array', $h->getHeaderAsArray('foo'));
     }
 
     public function testSetsIntegersAndFloatsAsHeaders()
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Message/FutureResponseTest.php b/core/vendor/guzzlehttp/guzzle/tests/Message/FutureResponseTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..771631d56bb7da64f4910bc504714fa08942d5f6
--- /dev/null
+++ b/core/vendor/guzzlehttp/guzzle/tests/Message/FutureResponseTest.php
@@ -0,0 +1,160 @@
+<?php
+namespace GuzzleHttp\Tests\Message;
+
+use GuzzleHttp\Message\FutureResponse;
+use GuzzleHttp\Message\Response;
+use GuzzleHttp\Stream\Stream;
+use React\Promise\Deferred;
+use GuzzleHttp\Tests\Subscriber\MockTest;
+
+class FutureResponseTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @expectedException \RuntimeException
+     * @expectedExceptionMessage Class has no foo property
+     */
+    public function testValidatesMagicMethod()
+    {
+        $f = MockTest::createFuture(function () {});
+        $f->foo;
+    }
+
+    public function testDoesTheSameAsResponseWhenDereferenced()
+    {
+        $str = Stream::factory('foo');
+        $response = new Response(200, ['Foo' => 'bar'], $str);
+        $future = MockTest::createFuture(function () use ($response) {
+            return $response;
+        });
+        $this->assertFalse($this->readAttribute($future, 'isRealized'));
+        $this->assertEquals(200, $future->getStatusCode());
+        $this->assertTrue($this->readAttribute($future, 'isRealized'));
+        // Deref again does nothing.
+        $future->wait();
+        $this->assertTrue($this->readAttribute($future, 'isRealized'));
+        $this->assertEquals('bar', $future->getHeader('Foo'));
+        $this->assertEquals(['bar'], $future->getHeaderAsarray('Foo'));
+        $this->assertSame($response->getHeaders(), $future->getHeaders());
+        $this->assertSame(
+            $response->getBody(),
+            $future->getBody()
+        );
+        $this->assertSame(
+            $response->getProtocolVersion(),
+            $future->getProtocolVersion()
+        );
+        $this->assertSame(
+            $response->getEffectiveUrl(),
+            $future->getEffectiveUrl()
+        );
+        $future->setEffectiveUrl('foo');
+        $this->assertEquals('foo', $response->getEffectiveUrl());
+        $this->assertSame(
+            $response->getReasonPhrase(),
+            $future->getReasonPhrase()
+        );
+
+        $this->assertTrue($future->hasHeader('foo'));
+
+        $future->removeHeader('Foo');
+        $this->assertFalse($future->hasHeader('foo'));
+        $this->assertFalse($response->hasHeader('foo'));
+
+        $future->setBody(Stream::factory('true'));
+        $this->assertEquals('true', (string) $response->getBody());
+        $this->assertTrue($future->json());
+        $this->assertSame((string) $response, (string) $future);
+
+        $future->setBody(Stream::factory('<a><b>c</b></a>'));
+        $this->assertEquals('c', (string) $future->xml()->b);
+
+        $future->addHeader('a', 'b');
+        $this->assertEquals('b', $future->getHeader('a'));
+
+        $future->addHeaders(['a' => '2']);
+        $this->assertEquals('b, 2', $future->getHeader('a'));
+
+        $future->setHeader('a', '2');
+        $this->assertEquals('2', $future->getHeader('a'));
+
+        $future->setHeaders(['a' => '3']);
+        $this->assertEquals(['a' => ['3']], $future->getHeaders());
+    }
+
+    public function testCanDereferenceManually()
+    {
+        $response = new Response(200, ['Foo' => 'bar']);
+        $future = MockTest::createFuture(function () use ($response) {
+            return $response;
+        });
+        $this->assertSame($response, $future->wait());
+        $this->assertTrue($this->readAttribute($future, 'isRealized'));
+    }
+
+    public function testCanCancel()
+    {
+        $c = false;
+        $deferred = new Deferred();
+        $future = new FutureResponse(
+            $deferred->promise(),
+            function () {},
+            function () use (&$c) {
+                $c = true;
+                return true;
+            }
+        );
+
+        $this->assertFalse($this->readAttribute($future, 'isRealized'));
+        $future->cancel();
+        $this->assertTrue($this->readAttribute($future, 'isRealized'));
+        $future->cancel();
+    }
+
+    public function testCanCancelButReturnsFalseForNoCancelFunction()
+    {
+        $future = MockTest::createFuture(function () {});
+        $future->cancel();
+        $this->assertTrue($this->readAttribute($future, 'isRealized'));
+    }
+
+    /**
+     * @expectedException \GuzzleHttp\Ring\Exception\CancelledFutureAccessException
+     */
+    public function testAccessingCancelledResponseThrows()
+    {
+        $future = MockTest::createFuture(function () {});
+        $future->cancel();
+        $future->getStatusCode();
+    }
+
+    public function testExceptionInToStringTriggersError()
+    {
+        $future = MockTest::createFuture(function () {
+            throw new \Exception('foo');
+        });
+        $err = '';
+        set_error_handler(function () use (&$err) {
+            $err = func_get_args()[1];
+        });
+        echo $future;
+        restore_error_handler();
+        $this->assertContains('foo', $err);
+    }
+
+    public function testProxiesSetters()
+    {
+        $str = Stream::factory('foo');
+        $response = new Response(200, ['Foo' => 'bar'], $str);
+        $future = MockTest::createFuture(function () use ($response) {
+            return $response;
+        });
+
+        $future->setStatusCode(202);
+        $this->assertEquals(202, $future->getStatusCode());
+        $this->assertEquals(202, $response->getStatusCode());
+
+        $future->setReasonPhrase('foo');
+        $this->assertEquals('foo', $future->getReasonPhrase());
+        $this->assertEquals('foo', $response->getReasonPhrase());
+    }
+}
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Message/MessageFactoryTest.php b/core/vendor/guzzlehttp/guzzle/tests/Message/MessageFactoryTest.php
index 8b391752a1c4de693e64ecc744e0ff3a069cd2e2..ee83e5de05ae4942011423c52ca3c94e9ad36977 100644
--- a/core/vendor/guzzlehttp/guzzle/tests/Message/MessageFactoryTest.php
+++ b/core/vendor/guzzlehttp/guzzle/tests/Message/MessageFactoryTest.php
@@ -1,17 +1,17 @@
 <?php
-
 namespace GuzzleHttp\Tests\Message;
 
 use GuzzleHttp\Client;
+use GuzzleHttp\Message\RequestInterface;
 use GuzzleHttp\Post\PostFile;
 use GuzzleHttp\Message\Response;
 use GuzzleHttp\Message\MessageFactory;
 use GuzzleHttp\Subscriber\Cookie;
 use GuzzleHttp\Cookie\CookieJar;
-use GuzzleHttp\Subscriber\Mock;
-use GuzzleHttp\Stream\Stream;
 use GuzzleHttp\Query;
+use GuzzleHttp\Stream\Stream;
 use GuzzleHttp\Subscriber\History;
+use GuzzleHttp\Subscriber\Mock;
 
 /**
  * @covers GuzzleHttp\Message\MessageFactory
@@ -92,7 +92,7 @@ public function testCreatesRequestWithPostBodyAndPostFiles()
 
     public function testCreatesResponseFromMessage()
     {
-        $response = (new MessageFactory)->fromMessage("HTTP/1.1 200 OK\r\nContent-Length: 4\r\n\r\ntest");
+        $response = (new MessageFactory())->fromMessage("HTTP/1.1 200 OK\r\nContent-Length: 4\r\n\r\ntest");
         $this->assertEquals(200, $response->getStatusCode());
         $this->assertEquals('OK', $response->getReasonPhrase());
         $this->assertEquals('4', $response->getHeader('Content-Length'));
@@ -101,7 +101,7 @@ public function testCreatesResponseFromMessage()
 
     public function testCanCreateHeadResponses()
     {
-        $response = (new MessageFactory)->fromMessage("HTTP/1.1 200 OK\r\nContent-Length: 4\r\n\r\n");
+        $response = (new MessageFactory())->fromMessage("HTTP/1.1 200 OK\r\nContent-Length: 4\r\n\r\n");
         $this->assertEquals(200, $response->getStatusCode());
         $this->assertEquals('OK', $response->getReasonPhrase());
         $this->assertEquals(null, $response->getBody());
@@ -113,7 +113,7 @@ public function testCanCreateHeadResponses()
      */
     public function testFactoryRequiresMessageForRequest()
     {
-        (new MessageFactory)->fromMessage('');
+        (new MessageFactory())->fromMessage('');
     }
 
     /**
@@ -122,12 +122,12 @@ public function testFactoryRequiresMessageForRequest()
      */
     public function testValidatesOptionsAreImplemented()
     {
-        (new MessageFactory)->createRequest('GET', 'http://test.com', ['foo' => 'bar']);
+        (new MessageFactory())->createRequest('GET', 'http://test.com', ['foo' => 'bar']);
     }
 
     public function testOptionsAddsRequestOptions()
     {
-        $request = (new MessageFactory)->createRequest(
+        $request = (new MessageFactory())->createRequest(
             'GET', 'http://test.com', ['config' => ['baz' => 'bar']]
         );
         $this->assertEquals('bar', $request->getConfig()->get('baz'));
@@ -135,7 +135,7 @@ public function testOptionsAddsRequestOptions()
 
     public function testCanDisableRedirects()
     {
-        $request = (new MessageFactory)->createRequest('GET', '/', ['allow_redirects' => false]);
+        $request = (new MessageFactory())->createRequest('GET', '/', ['allow_redirects' => false]);
         $this->assertEmpty($request->getEmitter()->listeners('complete'));
     }
 
@@ -144,12 +144,12 @@ public function testCanDisableRedirects()
      */
     public function testValidatesRedirects()
     {
-        (new MessageFactory)->createRequest('GET', '/', ['allow_redirects' => []]);
+        (new MessageFactory())->createRequest('GET', '/', ['allow_redirects' => []]);
     }
 
     public function testCanEnableStrictRedirectsAndSpecifyMax()
     {
-        $request = (new MessageFactory)->createRequest('GET', '/', [
+        $request = (new MessageFactory())->createRequest('GET', '/', [
             'allow_redirects' => ['max' => 10, 'strict' => true]
         ]);
         $this->assertTrue($request->getConfig()['redirect']['strict']);
@@ -158,7 +158,7 @@ public function testCanEnableStrictRedirectsAndSpecifyMax()
 
     public function testCanAddCookiesFromHash()
     {
-        $request = (new MessageFactory)->createRequest('GET', 'http://www.test.com/', [
+        $request = (new MessageFactory())->createRequest('GET', 'http://www.test.com/', [
             'cookies' => ['Foo' => 'Bar']
         ]);
         $cookies = null;
@@ -191,7 +191,7 @@ public function testAddsCookieUsingTrue()
     public function testAddsCookieFromCookieJar()
     {
         $jar = new CookieJar();
-        $request = (new MessageFactory)->createRequest('GET', '/', ['cookies' => $jar]);
+        $request = (new MessageFactory())->createRequest('GET', '/', ['cookies' => $jar]);
         foreach ($request->getEmitter()->listeners('before') as $l) {
             if ($l[0] instanceof Cookie) {
                 $this->assertSame($jar, $l[0]->getCookieJar());
@@ -204,12 +204,12 @@ public function testAddsCookieFromCookieJar()
      */
     public function testValidatesCookies()
     {
-        (new MessageFactory)->createRequest('GET', '/', ['cookies' => 'baz']);
+        (new MessageFactory())->createRequest('GET', '/', ['cookies' => 'baz']);
     }
 
     public function testCanAddQuery()
     {
-        $request = (new MessageFactory)->createRequest('GET', 'http://foo.com', [
+        $request = (new MessageFactory())->createRequest('GET', 'http://foo.com', [
             'query' => ['Foo' => 'Bar']
         ]);
         $this->assertEquals('Bar', $request->getQuery()->get('Foo'));
@@ -220,14 +220,14 @@ public function testCanAddQuery()
      */
     public function testValidatesQuery()
     {
-        (new MessageFactory)->createRequest('GET', 'http://foo.com', [
+        (new MessageFactory())->createRequest('GET', 'http://foo.com', [
             'query' => 'foo'
         ]);
     }
 
     public function testCanSetDefaultQuery()
     {
-        $request = (new MessageFactory)->createRequest('GET', 'http://foo.com?test=abc', [
+        $request = (new MessageFactory())->createRequest('GET', 'http://foo.com?test=abc', [
             'query' => ['Foo' => 'Bar', 'test' => 'def']
         ]);
         $this->assertEquals('Bar', $request->getQuery()->get('Foo'));
@@ -236,16 +236,19 @@ public function testCanSetDefaultQuery()
 
     public function testCanSetDefaultQueryWithObject()
     {
-        $request = (new MessageFactory)->createRequest('GET', 'http://foo.com?test=abc', [
-            'query' => new Query(['Foo' => 'Bar', 'test' => 'def'])
-        ]);
+        $request = (new MessageFactory)->createRequest(
+            'GET',
+            'http://foo.com?test=abc', [
+                'query' => new Query(['Foo' => 'Bar', 'test' => 'def'])
+            ]
+        );
         $this->assertEquals('Bar', $request->getQuery()->get('Foo'));
         $this->assertEquals('abc', $request->getQuery()->get('test'));
     }
 
     public function testCanAddBasicAuth()
     {
-        $request = (new MessageFactory)->createRequest('GET', 'http://foo.com', [
+        $request = (new MessageFactory())->createRequest('GET', 'http://foo.com', [
             'auth' => ['michael', 'test']
         ]);
         $this->assertTrue($request->hasHeader('Authorization'));
@@ -253,7 +256,7 @@ public function testCanAddBasicAuth()
 
     public function testCanAddDigestAuth()
     {
-        $request = (new MessageFactory)->createRequest('GET', 'http://foo.com', [
+        $request = (new MessageFactory())->createRequest('GET', 'http://foo.com', [
             'auth' => ['michael', 'test', 'digest']
         ]);
         $this->assertEquals('michael:test', $request->getConfig()->getPath('curl/' . CURLOPT_USERPWD));
@@ -262,7 +265,7 @@ public function testCanAddDigestAuth()
 
     public function testCanDisableAuth()
     {
-        $request = (new MessageFactory)->createRequest('GET', 'http://foo.com', [
+        $request = (new MessageFactory())->createRequest('GET', 'http://foo.com', [
             'auth' => false
         ]);
         $this->assertFalse($request->hasHeader('Authorization'));
@@ -270,7 +273,7 @@ public function testCanDisableAuth()
 
     public function testCanSetCustomAuth()
     {
-        $request = (new MessageFactory)->createRequest('GET', 'http://foo.com', [
+        $request = (new MessageFactory())->createRequest('GET', 'http://foo.com', [
             'auth' => 'foo'
         ]);
         $this->assertEquals('foo', $request->getConfig()['auth']);
@@ -364,19 +367,19 @@ public function testCanDisableExceptions()
     public function testCanChangeSaveToLocation()
     {
         $saveTo = Stream::factory();
-        $request = (new MessageFactory)->createRequest('GET', '/', ['save_to' => $saveTo]);
+        $request = (new MessageFactory())->createRequest('GET', '/', ['save_to' => $saveTo]);
         $this->assertSame($saveTo, $request->getConfig()->get('save_to'));
     }
 
     public function testCanSetProxy()
     {
-        $request = (new MessageFactory)->createRequest('GET', '/', ['proxy' => '192.168.16.121']);
+        $request = (new MessageFactory())->createRequest('GET', '/', ['proxy' => '192.168.16.121']);
         $this->assertEquals('192.168.16.121', $request->getConfig()->get('proxy'));
     }
 
     public function testCanSetHeadersOption()
     {
-        $request = (new MessageFactory)->createRequest('GET', '/', ['headers' => ['Foo' => 'Bar']]);
+        $request = (new MessageFactory())->createRequest('GET', '/', ['headers' => ['Foo' => 'Bar']]);
         $this->assertEquals('Bar', (string) $request->getHeader('Foo'));
     }
 
@@ -479,7 +482,7 @@ public function testCanSetProtocolVersion()
 
     public function testCanAddJsonData()
     {
-        $request = (new MessageFactory)->createRequest('PUT', 'http://f.com', [
+        $request = (new MessageFactory())->createRequest('PUT', 'http://f.com', [
             'json' => ['foo' => 'bar']
         ]);
         $this->assertEquals(
@@ -491,7 +494,7 @@ public function testCanAddJsonData()
 
     public function testCanAddJsonDataToAPostRequest()
     {
-        $request = (new MessageFactory)->createRequest('POST', 'http://f.com', [
+        $request = (new MessageFactory())->createRequest('POST', 'http://f.com', [
             'json' => ['foo' => 'bar']
         ]);
         $this->assertEquals(
@@ -503,7 +506,7 @@ public function testCanAddJsonDataToAPostRequest()
 
     public function testCanAddJsonDataAndNotOverwriteContentType()
     {
-        $request = (new MessageFactory)->createRequest('PUT', 'http://f.com', [
+        $request = (new MessageFactory())->createRequest('PUT', 'http://f.com', [
             'headers' => ['Content-Type' => 'foo'],
             'json' => null
         ]);
@@ -511,21 +514,22 @@ public function testCanAddJsonDataAndNotOverwriteContentType()
         $this->assertEquals('null', (string) $request->getBody());
     }
 
-    public function testCanUseCustomSubclassesWithMethods()
+    public function testCanUseCustomRequestOptions()
     {
-        (new ExtendedFactory)->createRequest('PUT', 'http://f.com', [
+        $c = false;
+        $f = new MessageFactory([
+            'foo' => function (RequestInterface $request, $value) use (&$c) {
+                $c = true;
+                $this->assertEquals('bar', $value);
+            }
+        ]);
+
+        $f->createRequest('PUT', 'http://f.com', [
             'headers' => ['Content-Type' => 'foo'],
             'foo' => 'bar'
         ]);
-        try {
-            $f = new MessageFactory;
-            $f->createRequest('PUT', 'http://f.com', [
-                'headers' => ['Content-Type' => 'foo'],
-                'foo' => 'bar'
-            ]);
-        } catch (\InvalidArgumentException $e) {
-            $this->assertContains('foo config', $e->getMessage());
-        }
+
+        $this->assertTrue($c);
     }
 
     /**
@@ -533,7 +537,7 @@ public function testCanUseCustomSubclassesWithMethods()
      */
     public function testDoesNotApplyPostBodyRightAway()
     {
-        $request = (new MessageFactory)->createRequest('POST', 'http://f.cn', [
+        $request = (new MessageFactory())->createRequest('POST', 'http://f.cn', [
             'body' => ['foo' => ['bar', 'baz']]
         ]);
         $this->assertEquals('', $request->getHeader('Content-Type'));
@@ -562,6 +566,33 @@ public function testCanForceMultipartUploadWithContentType()
             (string) $history->getLastRequest()->getBody()
         );
     }
+
+    public function testDecodeDoesNotForceAcceptHeader()
+    {
+        $request = (new MessageFactory())->createRequest('POST', 'http://f.cn', [
+            'decode_content' => true
+        ]);
+        $this->assertEquals('', $request->getHeader('Accept-Encoding'));
+        $this->assertTrue($request->getConfig()->get('decode_content'));
+    }
+
+    public function testDecodeCanAddAcceptHeader()
+    {
+        $request = (new MessageFactory())->createRequest('POST', 'http://f.cn', [
+            'decode_content' => 'gzip'
+        ]);
+        $this->assertEquals('gzip', $request->getHeader('Accept-Encoding'));
+        $this->assertTrue($request->getConfig()->get('decode_content'));
+    }
+
+    public function testCanDisableDecoding()
+    {
+        $request = (new MessageFactory())->createRequest('POST', 'http://f.cn', [
+            'decode_content' => false
+        ]);
+        $this->assertEquals('', $request->getHeader('Accept-Encoding'));
+        $this->assertNull($request->getConfig()->get('decode_content'));
+    }
 }
 
 class ExtendedFactory extends MessageFactory
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Message/RequestTest.php b/core/vendor/guzzlehttp/guzzle/tests/Message/RequestTest.php
index 0944049bdfbf781d3a46d5952623af17ad7aef01..a6241a42926f3772e1802567a846acbd619cc2dc 100644
--- a/core/vendor/guzzlehttp/guzzle/tests/Message/RequestTest.php
+++ b/core/vendor/guzzlehttp/guzzle/tests/Message/RequestTest.php
@@ -4,8 +4,8 @@
 
 use GuzzleHttp\Event\Emitter;
 use GuzzleHttp\Message\Request;
-use GuzzleHttp\Stream\Stream;
 use GuzzleHttp\Query;
+use GuzzleHttp\Stream\Stream;
 
 /**
  * @covers GuzzleHttp\Message\Request
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Message/ResponseTest.php b/core/vendor/guzzlehttp/guzzle/tests/Message/ResponseTest.php
index 2ab0bf7d48681c701fb94c09c1350d6e03433c66..bbae24a17f8681d6fe3bfaaed034e8656de4d28f 100644
--- a/core/vendor/guzzlehttp/guzzle/tests/Message/ResponseTest.php
+++ b/core/vendor/guzzlehttp/guzzle/tests/Message/ResponseTest.php
@@ -2,6 +2,7 @@
 
 namespace GuzzleHttp\Tests\Message;
 
+use GuzzleHttp\Exception\XmlParseException;
 use GuzzleHttp\Message\Response;
 use GuzzleHttp\Stream\Stream;
 
@@ -68,13 +69,20 @@ public function testParsesXmlResponses()
     }
 
     /**
-     * @expectedException \GuzzleHttp\Exception\ParseException
+     * @expectedException \GuzzleHttp\Exception\XmlParseException
      * @expectedExceptionMessage Unable to parse response body into XML: String could not be parsed as XML
      */
     public function testThrowsExceptionWhenFailsToParseXmlResponse()
     {
         $response = new Response(200, [], Stream::factory('<abc'));
-        $response->xml();
+        try {
+            $response->xml();
+        } catch (XmlParseException $e) {
+            $xmlParseError = $e->getError();
+            $this->assertInstanceOf('\LibXMLError', $xmlParseError);
+            $this->assertContains("Couldn't find end of Start Tag abc line 1", $xmlParseError->message);
+            throw $e;
+        }
     }
 
     public function testHasEffectiveUrl()
@@ -88,7 +96,7 @@ public function testHasEffectiveUrl()
     public function testPreventsComplexExternalEntities()
     {
         $xml = '<?xml version="1.0"?><!DOCTYPE scan[<!ENTITY test SYSTEM "php://filter/read=convert.base64-encode/resource=ResponseTest.php">]><scan>&test;</scan>';
-        $response = new Response(200, array(), Stream::factory($xml));
+        $response = new Response(200, [], Stream::factory($xml));
 
         $oldCwd = getcwd();
         chdir(__DIR__);
@@ -100,4 +108,13 @@ public function testPreventsComplexExternalEntities()
             chdir($oldCwd);
         }
     }
+
+    public function testStatusAndReasonAreMutable()
+    {
+        $response = new Response(200);
+        $response->setStatusCode(201);
+        $this->assertEquals(201, $response->getStatusCode());
+        $response->setReasonPhrase('Foo');
+        $this->assertEquals('Foo', $response->getReasonPhrase());
+    }
 }
diff --git a/core/vendor/guzzlehttp/guzzle/tests/PoolTest.php b/core/vendor/guzzlehttp/guzzle/tests/PoolTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..b5c2e076d71d482518b6e67297c4949d5a99a6d1
--- /dev/null
+++ b/core/vendor/guzzlehttp/guzzle/tests/PoolTest.php
@@ -0,0 +1,219 @@
+<?php
+namespace GuzzleHttp\Tests;
+
+use GuzzleHttp\Client;
+use GuzzleHttp\Event\RequestEvents;
+use GuzzleHttp\Pool;
+use GuzzleHttp\Ring\Client\MockHandler;
+use GuzzleHttp\Ring\Future\FutureArray;
+use GuzzleHttp\Subscriber\History;
+use GuzzleHttp\Event\BeforeEvent;
+use GuzzleHttp\Event\CompleteEvent;
+use GuzzleHttp\Event\ErrorEvent;
+use GuzzleHttp\Event\EndEvent;
+use GuzzleHttp\Message\Response;
+use GuzzleHttp\Subscriber\Mock;
+use React\Promise\Deferred;
+
+class PoolTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @expectedException \InvalidArgumentException
+     */
+    public function testValidatesIterable()
+    {
+        new Pool(new Client(), 'foo');
+    }
+
+    public function testCanControlPoolSizeAndClient()
+    {
+        $c = new Client();
+        $p = new Pool($c, [], ['pool_size' => 10]);
+        $this->assertSame($c, $this->readAttribute($p, 'client'));
+        $this->assertEquals(10, $this->readAttribute($p, 'poolSize'));
+    }
+
+    /**
+     * @expectedException \InvalidArgumentException
+     */
+    public function testValidatesEachElement()
+    {
+        $c = new Client();
+        $requests = ['foo'];
+        $p = new Pool($c, new \ArrayIterator($requests));
+        $p->wait();
+    }
+
+    public function testSendsAndRealizesFuture()
+    {
+        $c = $this->getClient();
+        $p = new Pool($c, [$c->createRequest('GET', 'http://foo.com')]);
+        $this->assertTrue($p->wait());
+        $this->assertFalse($p->wait());
+        $this->assertTrue($this->readAttribute($p, 'isRealized'));
+        $this->assertFalse($p->cancel());
+    }
+
+    public function testSendsManyRequestsInCappedPool()
+    {
+        $c = $this->getClient();
+        $p = new Pool($c, [$c->createRequest('GET', 'http://foo.com')]);
+        $this->assertTrue($p->wait());
+        $this->assertFalse($p->wait());
+    }
+
+    public function testSendsRequestsThatHaveNotBeenRealized()
+    {
+        $c = $this->getClient();
+        $p = new Pool($c, [$c->createRequest('GET', 'http://foo.com')]);
+        $this->assertTrue($p->wait());
+        $this->assertFalse($p->wait());
+        $this->assertFalse($p->cancel());
+    }
+
+    public function testCancelsInFlightRequests()
+    {
+        $c = $this->getClient();
+        $h = new History();
+        $c->getEmitter()->attach($h);
+        $p = new Pool($c, [
+            $c->createRequest('GET', 'http://foo.com'),
+            $c->createRequest('GET', 'http://foo.com', [
+                'events' => [
+                    'before' => [
+                        'fn' => function () use (&$p) {
+                            $this->assertTrue($p->cancel());
+                        },
+                        'priority' => RequestEvents::EARLY
+                    ]
+                ]
+            ])
+        ]);
+        ob_start();
+        $p->wait();
+        $contents = ob_get_clean();
+        $this->assertEquals(1, count($h));
+        $this->assertEquals('Cancelling', $contents);
+    }
+
+    private function getClient()
+    {
+        $deferred = new Deferred();
+        $future = new FutureArray(
+            $deferred->promise(),
+            function() use ($deferred) {
+                $deferred->resolve(['status' => 200, 'headers' => []]);
+            }, function () {
+                echo 'Cancelling';
+            }
+        );
+
+        return new Client(['handler' => new MockHandler($future)]);
+    }
+
+    public function testBatchesRequests()
+    {
+        $client = new Client(['handler' => function () {
+            throw new \RuntimeException('No network access');
+        }]);
+
+        $responses = [
+            new Response(301, ['Location' => 'http://foo.com/bar']),
+            new Response(200),
+            new Response(200),
+            new Response(404)
+        ];
+
+        $client->getEmitter()->attach(new Mock($responses));
+        $requests = [
+            $client->createRequest('GET', 'http://foo.com/baz'),
+            $client->createRequest('HEAD', 'http://httpbin.org/get'),
+            $client->createRequest('PUT', 'http://httpbin.org/put'),
+        ];
+
+        $a = $b = $c = $d = 0;
+        $result = Pool::batch($client, $requests, [
+            'before'   => function (BeforeEvent $e) use (&$a) { $a++; },
+            'complete' => function (CompleteEvent $e) use (&$b) { $b++; },
+            'error'    => function (ErrorEvent $e) use (&$c) { $c++; },
+            'end'      => function (EndEvent $e) use (&$d) { $d++; }
+        ]);
+
+        $this->assertEquals(4, $a);
+        $this->assertEquals(2, $b);
+        $this->assertEquals(1, $c);
+        $this->assertEquals(3, $d);
+        $this->assertCount(3, $result);
+        $this->assertInstanceOf('GuzzleHttp\BatchResults', $result);
+
+        // The first result is actually the second (redirect) response.
+        $this->assertSame($responses[1], $result[0]);
+        // The second result is a 1:1 request:response map
+        $this->assertSame($responses[2], $result[1]);
+        // The third entry is the 404 RequestException
+        $this->assertSame($responses[3], $result[2]->getResponse());
+    }
+
+    /**
+     * @expectedException \InvalidArgumentException
+     * @expectedExceptionMessage Each event listener must be a callable or
+     */
+    public function testBatchValidatesTheEventFormat()
+    {
+        $client = new Client();
+        $requests = [$client->createRequest('GET', 'http://foo.com/baz')];
+        Pool::batch($client, $requests, ['complete' => 'foo']);
+    }
+
+    public function testEmitsProgress()
+    {
+        $client = new Client(['handler' => function () {
+            throw new \RuntimeException('No network access');
+        }]);
+
+        $responses = [new Response(200), new Response(404)];
+        $client->getEmitter()->attach(new Mock($responses));
+        $requests = [
+            $client->createRequest('GET', 'http://foo.com/baz'),
+            $client->createRequest('HEAD', 'http://httpbin.org/get')
+        ];
+
+        $pool = new Pool($client, $requests);
+        $count = 0;
+        $thenned = null;
+        $pool->then(
+            function ($value) use (&$thenned) {
+                $thenned = $value;
+            },
+            null,
+            function ($result) use (&$count, $requests) {
+                $this->assertSame($requests[$count], $result['request']);
+                if ($count == 0) {
+                    $this->assertNull($result['error']);
+                    $this->assertEquals(200, $result['response']->getStatusCode());
+                } else {
+                    $this->assertInstanceOf(
+                        'GuzzleHttp\Exception\ClientException',
+                        $result['error']
+                    );
+                }
+                $count++;
+            }
+        );
+
+        $pool->wait();
+        $this->assertEquals(2, $count);
+        $this->assertEquals(true, $thenned);
+    }
+
+    public function testDoesNotThrowInErrorEvent()
+    {
+        $client = new Client();
+        $responses = [new Response(404)];
+        $client->getEmitter()->attach(new Mock($responses));
+        $requests = [$client->createRequest('GET', 'http://foo.com/baz')];
+        $result = Pool::batch($client, $requests);
+        $this->assertCount(1, $result);
+        $this->assertInstanceOf('GuzzleHttp\Exception\ClientException', $result[0]);
+    }
+}
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Post/MultipartBodyTest.php b/core/vendor/guzzlehttp/guzzle/tests/Post/MultipartBodyTest.php
index 1853e8d852fc2a5dce892381b5fd4ecf52ce2665..4b3b391643ae5104b30cb8ac26ab5e09ad4cedef 100644
--- a/core/vendor/guzzlehttp/guzzle/tests/Post/MultipartBodyTest.php
+++ b/core/vendor/guzzlehttp/guzzle/tests/Post/MultipartBodyTest.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp\Tests\Post;
 
 use GuzzleHttp\Post\MultipartBody;
@@ -23,7 +22,7 @@ public function testConstructorAddsFieldsAndFiles()
         $this->assertEquals('abcdef', $b->getBoundary());
         $c = (string) $b;
         $this->assertContains("--abcdef\r\nContent-Disposition: form-data; name=\"foo\"\r\n\r\nbar\r\n", $c);
-        $this->assertContains("--abcdef\r\nContent-Disposition: form-data; filename=\"foo.txt\"; name=\"foo\"\r\n"
+        $this->assertContains("--abcdef\r\nContent-Disposition: form-data; name=\"foo\"; filename=\"foo.txt\"\r\n"
             . "Content-Type: text/plain\r\n\r\nabc\r\n--abcdef--", $c);
     }
 
@@ -87,14 +86,6 @@ public function testIsSeekableReturnsTrueIfAllAreSeekable()
         $this->assertFalse($b->seek(10));
     }
 
-    public function testGetContentsCanCap()
-    {
-        $b = $this->getTestBody();
-        $c = (string) $b;
-        $b->seek(0);
-        $this->assertSame(substr($c, 0, 10), $b->getContents(10));
-    }
-
     public function testReadsFromBuffer()
     {
         $b = $this->getTestBody();
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Post/PostBodyTest.php b/core/vendor/guzzlehttp/guzzle/tests/Post/PostBodyTest.php
index e9c53229205d605b45fe6a8af26b34161cf16317..1614ec0a0bd44751770216e44350c21cf4e851e5 100644
--- a/core/vendor/guzzlehttp/guzzle/tests/Post/PostBodyTest.php
+++ b/core/vendor/guzzlehttp/guzzle/tests/Post/PostBodyTest.php
@@ -1,9 +1,8 @@
 <?php
-
 namespace GuzzleHttp\Tests\Post;
 
-use GuzzleHttp\Post\PostBody;
 use GuzzleHttp\Message\Request;
+use GuzzleHttp\Post\PostBody;
 use GuzzleHttp\Post\PostFile;
 use GuzzleHttp\Query;
 
@@ -75,20 +74,20 @@ public function testApplyingWithFieldsAddsMultipartUpload()
 
     public function testMultipartWithNestedFields()
     {
-      $b = new PostBody();
-      $b->setField('foo', ['bar' => 'baz']);
-      $b->forceMultipartUpload(true);
-      $this->assertEquals(['foo' => ['bar' => 'baz']], $b->getFields());
-      $m = new Request('POST', '/');
-      $b->applyRequestHeaders($m);
-      $this->assertContains(
-          'multipart/form-data',
-          $m->getHeader('Content-Type')
-      );
-      $this->assertTrue($m->hasHeader('Content-Length'));
-      $contents = $b->getContents();
-      $this->assertContains('name="foo[bar]"', $contents);
-      $this->assertNotContains('name="foo"', $contents);
+        $b = new PostBody();
+        $b->setField('foo', ['bar' => 'baz']);
+        $b->forceMultipartUpload(true);
+        $this->assertEquals(['foo' => ['bar' => 'baz']], $b->getFields());
+        $m = new Request('POST', '/');
+        $b->applyRequestHeaders($m);
+        $this->assertContains(
+            'multipart/form-data',
+            $m->getHeader('Content-Type')
+        );
+        $this->assertTrue($m->hasHeader('Content-Length'));
+        $contents = $b->getContents();
+        $this->assertContains('name="foo[bar]"', $contents);
+        $this->assertNotContains('name="foo"', $contents);
     }
 
     public function testCountProvidesFieldsAndFiles()
@@ -151,10 +150,25 @@ public function testDetachesAndCloses()
         $b = new PostBody();
         $b->setField('foo', 'bar');
         $b->detach();
-        $this->assertTrue($b->close());
+        $b->close();
         $this->assertEquals('', $b->read(10));
     }
 
+    public function testDetachesWhenBodyIsPresent()
+    {
+        $b = new PostBody();
+        $b->setField('foo', 'bar');
+        $b->getContents();
+        $b->detach();
+    }
+
+    public function testFlushAndMetadataPlaceholders()
+    {
+        $b = new PostBody();
+        $this->assertEquals([], $b->getMetadata());
+        $this->assertNull($b->getMetadata('foo'));
+    }
+
     public function testCreatesMultipartUploadWithMultiFields()
     {
         $b = new PostBody();
@@ -177,26 +191,26 @@ public function testCreatesMultipartUploadWithMultiFields()
 
     public function testMultipartWithBase64Fields()
     {
-      $b = new PostBody();
-      $b->setField('foo64', '/xA2JhWEqPcgyLRDdir9WSRi/khpb2Lh3ooqv+5VYoc=');
-      $b->forceMultipartUpload(true);
-      $this->assertEquals(
-          ['foo64' => '/xA2JhWEqPcgyLRDdir9WSRi/khpb2Lh3ooqv+5VYoc='],
-          $b->getFields()
-      );
-      $m = new Request('POST', '/');
-      $b->applyRequestHeaders($m);
-      $this->assertContains(
-          'multipart/form-data',
-          $m->getHeader('Content-Type')
-      );
-      $this->assertTrue($m->hasHeader('Content-Length'));
-      $contents = $b->getContents();
-      $this->assertContains('name="foo64"', $contents);
-      $this->assertContains(
-          '/xA2JhWEqPcgyLRDdir9WSRi/khpb2Lh3ooqv+5VYoc=',
-          $contents
-      );
+        $b = new PostBody();
+        $b->setField('foo64', '/xA2JhWEqPcgyLRDdir9WSRi/khpb2Lh3ooqv+5VYoc=');
+        $b->forceMultipartUpload(true);
+        $this->assertEquals(
+            ['foo64' => '/xA2JhWEqPcgyLRDdir9WSRi/khpb2Lh3ooqv+5VYoc='],
+            $b->getFields()
+        );
+        $m = new Request('POST', '/');
+        $b->applyRequestHeaders($m);
+        $this->assertContains(
+            'multipart/form-data',
+            $m->getHeader('Content-Type')
+        );
+        $this->assertTrue($m->hasHeader('Content-Length'));
+        $contents = $b->getContents();
+        $this->assertContains('name="foo64"', $contents);
+        $this->assertContains(
+            '/xA2JhWEqPcgyLRDdir9WSRi/khpb2Lh3ooqv+5VYoc=',
+            $contents
+        );
     }
 
     public function testMultipartWithAmpersandInValue()
@@ -216,4 +230,13 @@ public function testMultipartWithAmpersandInValue()
         $this->assertContains('name="a"', $contents);
         $this->assertContains('b&c=d', $contents);
     }
+
+    /**
+     * @expectedException \GuzzleHttp\Stream\Exception\CannotAttachException
+     */
+    public function testCannotAttach()
+    {
+        $b = new PostBody();
+        $b->attach('foo');
+    }
 }
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Post/PostFileTest.php b/core/vendor/guzzlehttp/guzzle/tests/Post/PostFileTest.php
index a233b3084d7d718683c5e55fd12c3ed6305812c9..800cee503a6435f4ce84e4bd096dd90049488f0e 100644
--- a/core/vendor/guzzlehttp/guzzle/tests/Post/PostFileTest.php
+++ b/core/vendor/guzzlehttp/guzzle/tests/Post/PostFileTest.php
@@ -1,7 +1,7 @@
 <?php
-
 namespace GuzzleHttp\Tests\Post;
 
+use GuzzleHttp\Post\MultipartBody;
 use GuzzleHttp\Post\PostFile;
 use GuzzleHttp\Stream\Stream;
 
@@ -18,7 +18,7 @@ public function testCreatesFromString()
         $this->assertEquals('foo', $p->getName());
         $this->assertEquals('/path/to/test.php', $p->getFilename());
         $this->assertEquals(
-            'form-data; filename="test.php"; name="foo"',
+            'form-data; name="foo"; filename="test.php"',
             $p->getHeaders()['Content-Disposition']
         );
     }
@@ -37,14 +37,7 @@ public function testDefaultsToNameWhenNoFilenameExists()
 
     public function testCreatesFromMultipartFormData()
     {
-        $mp = $this->getMockBuilder('GuzzleHttp\Post\MultipartBody')
-            ->setMethods(['getBoundary'])
-            ->disableOriginalConstructor()
-            ->getMock();
-        $mp->expects($this->once())
-            ->method('getBoundary')
-            ->will($this->returnValue('baz'));
-
+        $mp = new MultipartBody([], [], 'baz');
         $p = new PostFile('foo', $mp);
         $this->assertEquals(
             'form-data; name="foo"',
diff --git a/core/vendor/guzzlehttp/guzzle/tests/RequestFsmTest.php b/core/vendor/guzzlehttp/guzzle/tests/RequestFsmTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..86dc270318a49cdffbd23bb39b5a2855d0323812
--- /dev/null
+++ b/core/vendor/guzzlehttp/guzzle/tests/RequestFsmTest.php
@@ -0,0 +1,192 @@
+<?php
+namespace GuzzleHttp\Tests;
+
+use GuzzleHttp\Exception\RequestException;
+use GuzzleHttp\Message\MessageFactory;
+use GuzzleHttp\Message\Response;
+use GuzzleHttp\RequestFsm;
+use GuzzleHttp\Subscriber\Mock;
+use GuzzleHttp\Transaction;
+use GuzzleHttp\Client;
+use GuzzleHttp\Message\Request;
+use GuzzleHttp\Event\BeforeEvent;
+use GuzzleHttp\Event\CompleteEvent;
+use GuzzleHttp\Event\ErrorEvent;
+use GuzzleHttp\Event\EndEvent;
+use GuzzleHttp\Message\FutureResponse;
+use GuzzleHttp\Message\RequestInterface;
+use GuzzleHttp\Event\RequestEvents;
+use React\Promise\Deferred;
+
+class RequestFsmTest extends \PHPUnit_Framework_TestCase
+{
+    private $mf;
+
+    public function setup()
+    {
+        $this->mf = new MessageFactory();
+    }
+
+    public function testEmitsBeforeEventInTransition()
+    {
+        $fsm = new RequestFsm(function () {}, $this->mf);
+        $t = new Transaction(new Client(), new Request('GET', 'http://foo.com'));
+        $c = false;
+        $t->request->getEmitter()->on('before', function (BeforeEvent $e) use (&$c) {
+            $c = true;
+        });
+        $fsm($t, 'send');
+        $this->assertTrue($c);
+    }
+
+    public function testEmitsCompleteEventInTransition()
+    {
+        $fsm = new RequestFsm(function () {}, $this->mf);
+        $t = new Transaction(new Client(), new Request('GET', 'http://foo.com'));
+        $t->response = new Response(200);
+        $t->state = 'complete';
+        $c = false;
+        $t->request->getEmitter()->on('complete', function (CompleteEvent $e) use (&$c) {
+            $c = true;
+        });
+        $fsm($t, 'end');
+        $this->assertTrue($c);
+    }
+
+    public function testDoesNotEmitCompleteForFuture()
+    {
+        $fsm = new RequestFsm(function () {}, $this->mf);
+        $t = new Transaction(new Client(), new Request('GET', 'http://foo.com'));
+        $deferred = new Deferred();
+        $t->response = new FutureResponse($deferred->promise());
+        $t->state = 'complete';
+        $c = false;
+        $t->request->getEmitter()->on('complete', function (CompleteEvent $e) use (&$c) {
+            $c = true;
+        });
+        $fsm($t, 'end');
+        $this->assertFalse($c);
+    }
+
+    public function testDoesNotEmitEndForFuture()
+    {
+        $fsm = new RequestFsm(function () {}, $this->mf);
+        $t = new Transaction(new Client(), new Request('GET', 'http://foo.com'));
+        $deferred = new Deferred();
+        $t->response = new FutureResponse($deferred->promise());
+        $t->state = 'end';
+        $c = false;
+        $t->request->getEmitter()->on('end', function (EndEvent $e) use (&$c) {
+            $c = true;
+        });
+        $fsm($t);
+        $this->assertFalse($c);
+    }
+
+    public function testTransitionsThroughSuccessfulTransfer()
+    {
+        $client = new Client();
+        $client->getEmitter()->attach(new Mock([new Response(200)]));
+        $request = $client->createRequest('GET', 'http://ewfewwef.com');
+        $this->addListeners($request, $calls);
+        $client->send($request);
+        $this->assertEquals(['before', 'complete', 'end'], $calls);
+    }
+
+    public function testTransitionsThroughErrorsInBefore()
+    {
+        $fsm = new RequestFsm(function () {}, $this->mf);
+        $client = new Client();
+        $request = $client->createRequest('GET', 'http://ewfewwef.com');
+        $t = new Transaction($client, $request);
+        $calls = [];
+        $this->addListeners($t->request, $calls);
+        $t->request->getEmitter()->on('before', function (BeforeEvent $e) {
+            throw new \Exception('foo');
+        });
+        try {
+            $fsm($t, 'send');
+            $this->fail('did not throw');
+        } catch (RequestException $e) {
+            $this->assertContains('foo', $t->exception->getMessage());
+            $this->assertEquals(['before', 'error', 'end'], $calls);
+        }
+    }
+
+    public function testTransitionsThroughErrorsInComplete()
+    {
+        $client = new Client();
+        $client->getEmitter()->attach(new Mock([new Response(200)]));
+        $request = $client->createRequest('GET', 'http://ewfewwef.com');
+        $this->addListeners($request, $calls);
+        $request->getEmitter()->once('complete', function (CompleteEvent $e) {
+            throw new \Exception('foo');
+        });
+        try {
+            $client->send($request);
+            $this->fail('did not throw');
+        } catch (RequestException $e) {
+            $this->assertContains('foo', $e->getMessage());
+            $this->assertEquals(['before', 'complete', 'error', 'end'], $calls);
+        }
+    }
+
+    public function testTransitionsThroughErrorInterception()
+    {
+        $fsm = new RequestFsm(function () {}, $this->mf);
+        $client = new Client();
+        $request = $client->createRequest('GET', 'http://ewfewwef.com');
+        $t = new Transaction($client, $request);
+        $calls = [];
+        $this->addListeners($t->request, $calls);
+        $t->request->getEmitter()->on('error', function (ErrorEvent $e) {
+            $e->intercept(new Response(200));
+        });
+        $fsm($t, 'send');
+        $t->response = new Response(404);
+        $t->state = 'complete';
+        $fsm($t);
+        $this->assertEquals(200, $t->response->getStatusCode());
+        $this->assertNull($t->exception);
+        $this->assertEquals(['before', 'complete', 'error', 'complete', 'end'], $calls);
+    }
+
+    private function addListeners(RequestInterface $request, &$calls)
+    {
+        $request->getEmitter()->on('before', function (BeforeEvent $e) use (&$calls) {
+            $calls[] = 'before';
+        }, RequestEvents::EARLY);
+        $request->getEmitter()->on('complete', function (CompleteEvent $e) use (&$calls) {
+            $calls[] = 'complete';
+        }, RequestEvents::EARLY);
+        $request->getEmitter()->on('error', function (ErrorEvent $e) use (&$calls) {
+            $calls[] = 'error';
+        }, RequestEvents::EARLY);
+        $request->getEmitter()->on('end', function (EndEvent $e) use (&$calls) {
+            $calls[] = 'end';
+        }, RequestEvents::EARLY);
+    }
+
+    /**
+     * @expectedException \GuzzleHttp\Exception\RequestException
+     * @expectedExceptionMessage Too many state transitions
+     */
+    public function testDetectsInfiniteLoops()
+    {
+        $client = new Client([
+            'fsm' => $fsm = new RequestFsm(
+                    function () {},
+                    new MessageFactory(),
+                    3
+                )
+        ]);
+        $request = $client->createRequest('GET', 'http://foo.com:123');
+        $request->getEmitter()->on('before', function () {
+            throw new \Exception('foo');
+        });
+        $request->getEmitter()->on('error', function ($e) {
+            $e->retry();
+        });
+        $client->send($request);
+    }
+}
diff --git a/core/vendor/guzzlehttp/guzzle/tests/RingBridgeTest.php b/core/vendor/guzzlehttp/guzzle/tests/RingBridgeTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..19af077746564b11c02523dd738468449b65e386
--- /dev/null
+++ b/core/vendor/guzzlehttp/guzzle/tests/RingBridgeTest.php
@@ -0,0 +1,213 @@
+<?php
+namespace GuzzleHttp\Tests;
+
+use GuzzleHttp\Client;
+use GuzzleHttp\Event\ProgressEvent;
+use GuzzleHttp\Message\MessageFactory;
+use GuzzleHttp\RingBridge;
+use GuzzleHttp\Stream\Stream;
+use GuzzleHttp\Transaction;
+use GuzzleHttp\Message\Request;
+use GuzzleHttp\Message\Response;
+use GuzzleHttp\Ring\Client\MockHandler;
+use GuzzleHttp\Exception\RequestException;
+use GuzzleHttp\Event\ErrorEvent;
+use GuzzleHttp\RequestFsm;
+
+class RingBridgeTest extends \PHPUnit_Framework_TestCase
+{
+    public function testCreatesRingRequests()
+    {
+        $stream = Stream::factory('test');
+        $request = new Request('GET', 'http://httpbin.org/get?a=b', [
+            'test' => 'hello'
+        ], $stream);
+        $request->getConfig()->set('foo', 'bar');
+        $trans = new Transaction(new Client(), $request);
+        $factory = new MessageFactory();
+        $fsm = new RequestFsm(function () {}, new MessageFactory());
+        $r = RingBridge::prepareRingRequest($trans, $factory, $fsm);
+        $this->assertEquals('http', $r['scheme']);
+        $this->assertEquals('1.1', $r['version']);
+        $this->assertEquals('GET', $r['http_method']);
+        $this->assertEquals('http://httpbin.org/get?a=b', $r['url']);
+        $this->assertEquals('/get', $r['uri']);
+        $this->assertEquals('a=b', $r['query_string']);
+        $this->assertEquals([
+            'Host' => ['httpbin.org'],
+            'test' => ['hello']
+        ], $r['headers']);
+        $this->assertSame($stream, $r['body']);
+        $this->assertEquals(['foo' => 'bar'], $r['client']);
+        $this->assertFalse($r['future']);
+    }
+
+    public function testCreatesRingRequestsWithNullQueryString()
+    {
+        $request = new Request('GET', 'http://httpbin.org');
+        $trans = new Transaction(new Client(), $request);
+        $factory = new MessageFactory();
+        $fsm = new RequestFsm(function () {}, new MessageFactory());
+        $r = RingBridge::prepareRingRequest($trans, $factory, $fsm);
+        $this->assertNull($r['query_string']);
+        $this->assertEquals('/', $r['uri']);
+        $this->assertEquals(['Host' => ['httpbin.org']], $r['headers']);
+        $this->assertNull($r['body']);
+        $this->assertEquals([], $r['client']);
+    }
+
+    public function testAddsProgress()
+    {
+        Server::enqueue([new Response(200)]);
+        $client = new Client(['base_url' => Server::$url]);
+        $request = $client->createRequest('GET');
+        $called = false;
+        $request->getEmitter()->on(
+            'progress',
+            function (ProgressEvent $e) use (&$called) {
+                $called = true;
+            }
+        );
+        $this->assertEquals(200, $client->send($request)->getStatusCode());
+        $this->assertTrue($called);
+    }
+
+    public function testGetsResponseProtocolVersionAndEffectiveUrlAndReason()
+    {
+        $client = new Client([
+            'handler' => new MockHandler([
+                'status'  => 200,
+                'reason' => 'test',
+                'headers' => [],
+                'version' => '1.0',
+                'effective_url' => 'http://foo.com'
+            ])
+        ]);
+        $request = $client->createRequest('GET', 'http://foo.com');
+        $response = $client->send($request);
+        $this->assertEquals('1.0', $response->getProtocolVersion());
+        $this->assertEquals('http://foo.com', $response->getEffectiveUrl());
+        $this->assertEquals('test', $response->getReasonPhrase());
+    }
+
+    public function testGetsStreamFromResponse()
+    {
+        $res = fopen('php://temp', 'r+');
+        fwrite($res, 'foo');
+        rewind($res);
+        $client = new Client([
+            'handler' => new MockHandler([
+                'status'  => 200,
+                'headers' => [],
+                'body' => $res
+            ])
+        ]);
+        $request = $client->createRequest('GET', 'http://foo.com');
+        $response = $client->send($request);
+        $this->assertEquals('foo', (string) $response->getBody());
+    }
+
+    public function testEmitsCompleteEventOnSuccess()
+    {
+        $c = false;
+        $trans = new Transaction(new Client(), new Request('GET', 'http://f.co'));
+        $trans->request->getEmitter()->on('complete', function () use (&$c) {
+            $c = true;
+        });
+        $f = new MessageFactory();
+        $res = ['status' => 200, 'headers' => []];
+        $fsm = new RequestFsm(function () {}, new MessageFactory());
+        RingBridge::completeRingResponse($trans, $res, $f, $fsm);
+        $this->assertInstanceOf(
+            'GuzzleHttp\Message\ResponseInterface',
+            $trans->response
+        );
+        $this->assertTrue($c);
+    }
+
+    public function testEmitsErrorEventOnError()
+    {
+        $client = new Client(['base_url' => 'http://127.0.0.1:123']);
+        $request = $client->createRequest('GET');
+        $called = false;
+        $request->getEmitter()->on('error', function () use (&$called) {
+            $called = true;
+        });
+        $request->getConfig()['timeout'] = 0.001;
+        $request->getConfig()['connect_timeout'] = 0.001;
+        try {
+            $client->send($request);
+            $this->fail('did not throw');
+        } catch (RequestException $e) {
+            $this->assertSame($request, $e->getRequest());
+            $this->assertContains('cURL error', $e->getMessage());
+            $this->assertTrue($called);
+        }
+    }
+
+    /**
+     * @expectedException \InvalidArgumentException
+     */
+    public function testValidatesRingRequest()
+    {
+        RingBridge::fromRingRequest([]);
+    }
+
+    public function testCreatesRequestFromRing()
+    {
+        $request = RingBridge::fromRingRequest([
+            'http_method' => 'GET',
+            'uri' => '/',
+            'headers' => [
+                'foo' => ['bar'],
+                'host' => ['foo.com']
+            ],
+            'body' => 'test',
+            'version' => '1.0'
+        ]);
+        $this->assertEquals('GET', $request->getMethod());
+        $this->assertEquals('http://foo.com/', $request->getUrl());
+        $this->assertEquals('1.0', $request->getProtocolVersion());
+        $this->assertEquals('test', (string) $request->getBody());
+        $this->assertEquals('bar', $request->getHeader('foo'));
+    }
+
+    public function testCanInterceptException()
+    {
+        $client = new Client(['base_url' => 'http://127.0.0.1:123']);
+        $request = $client->createRequest('GET');
+        $called = false;
+        $request->getEmitter()->on(
+            'error',
+            function (ErrorEvent $e) use (&$called) {
+                $called = true;
+                $e->intercept(new Response(200));
+            }
+        );
+        $request->getConfig()['timeout'] = 0.001;
+        $request->getConfig()['connect_timeout'] = 0.001;
+        $this->assertEquals(200, $client->send($request)->getStatusCode());
+        $this->assertTrue($called);
+    }
+
+    public function testCreatesLongException()
+    {
+        $r = new Request('GET', 'http://www.google.com');
+        $e = RingBridge::getNoRingResponseException($r);
+        $this->assertInstanceOf('GuzzleHttp\Exception\RequestException', $e);
+        $this->assertSame($r, $e->getRequest());
+    }
+
+    public function testEnsuresResponseOrExceptionWhenCompletingResponse()
+    {
+        $trans = new Transaction(new Client(), new Request('GET', 'http://f.co'));
+        $f = new MessageFactory();
+        $fsm = new RequestFsm(function () {}, new MessageFactory());
+        try {
+            RingBridge::completeRingResponse($trans, [], $f, $fsm);
+        } catch (RequestException $e) {
+            $this->assertSame($trans->request, $e->getRequest());
+            $this->assertContains('RingPHP', $e->getMessage());
+        }
+    }
+}
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Server.php b/core/vendor/guzzlehttp/guzzle/tests/Server.php
index 273c852b1e198bc3b75e117c2a6858d098c9064a..1de20e38b8c8605a8529f5c7ea2a128a49c2528d 100644
--- a/core/vendor/guzzlehttp/guzzle/tests/Server.php
+++ b/core/vendor/guzzlehttp/guzzle/tests/Server.php
@@ -1,91 +1,49 @@
 <?php
-
 namespace GuzzleHttp\Tests;
 
+use GuzzleHttp\Client;
 use GuzzleHttp\Message\MessageFactory;
+use GuzzleHttp\Message\Response;
 use GuzzleHttp\Message\ResponseInterface;
-use GuzzleHttp\Client;
+use GuzzleHttp\RingBridge;
+use GuzzleHttp\Tests\Ring\Client\Server as TestServer;
 
 /**
- * The Server class is used to control a scripted webserver using node.js that
- * will respond to HTTP requests with queued responses.
- *
- * Queued responses will be served to requests using a FIFO order.  All requests
- * received by the server are stored on the node.js server and can be retrieved
- * by calling {@see Server::received()}.
- *
- * Mock responses that don't require data to be transmitted over HTTP a great
- * for testing.  Mock response, however, cannot test the actual sending of an
- * HTTP request using cURL.  This test server allows the simulation of any
- * number of HTTP request response transactions to test the actual sending of
- * requests over the wire without having to leave an internal network.
+ * Placeholder for the RingPHP-Client server that makes it easier to use.
  */
 class Server
 {
-    const REQUEST_DELIMITER = "\n----[request]\n";
-
-    /** @var Client */
-    private static $client;
-
-    public static $started;
     public static $url = 'http://127.0.0.1:8125/';
     public static $port = 8125;
 
-    /**
-     * Flush the received requests from the server
-     * @throws \RuntimeException
-     */
-    public static function flush()
-    {
-        self::start();
-
-        return self::$client->delete('guzzle-server/requests');
-    }
-
     /**
      * Queue an array of responses or a single response on the server.
      *
      * Any currently queued responses will be overwritten.  Subsequent requests
      * on the server will return queued responses in FIFO order.
      *
-     * @param array|ResponseInterface $responses A single or array of Responses
-     *                                           to queue.
+     * @param array $responses Responses to queue.
      * @throws \Exception
      */
-    public static function enqueue($responses)
+    public static function enqueue(array $responses)
     {
         static $factory;
         if (!$factory) {
             $factory = new MessageFactory();
         }
 
-        self::start();
-
         $data = [];
-        foreach ((array) $responses as $response) {
-
+        foreach ($responses as $response) {
             // Create the response object from a string
             if (is_string($response)) {
                 $response = $factory->fromMessage($response);
             } elseif (!($response instanceof ResponseInterface)) {
                 throw new \Exception('Responses must be strings or Responses');
             }
-
-            $headers = array_map(function ($h) {
-                return implode(' ,', $h);
-            }, $response->getHeaders());
-
-            $data[] = [
-                'statusCode'   => $response->getStatusCode(),
-                'reasonPhrase' => $response->getReasonPhrase(),
-                'headers'      => $headers,
-                'body'         => (string) $response->getBody()
-            ];
+            $data[] = self::convertResponse($response);
         }
 
-        self::getClient()->put('guzzle-server/responses', [
-            'body' => json_encode($data)
-        ]);
+        TestServer::enqueue($data);
     }
 
     /**
@@ -100,80 +58,50 @@ public static function enqueue($responses)
      */
     public static function received($hydrate = false)
     {
-        if (!self::$started) {
-            return [];
-        }
+        $response = TestServer::received();
 
-        $response = self::getClient()->get('guzzle-server/requests');
-        $data = array_filter(explode(self::REQUEST_DELIMITER, (string) $response->getBody()));
         if ($hydrate) {
+            $c = new Client();
             $factory = new MessageFactory();
-            $data = array_map(function($message) use ($factory) {
-                return $factory->fromMessage($message);
-            }, $data);
+            $response = array_map(function($message) use ($factory, $c) {
+                return RingBridge::fromRingRequest($message);
+            }, $response);
         }
 
-        return $data;
+        return $response;
     }
 
-    /**
-     * Stop running the node.js server
-     */
-    public static function stop()
+    public static function flush()
     {
-        if (self::$started) {
-            self::getClient()->delete('guzzle-server');
-        }
-
-        self::$started = false;
+        TestServer::flush();
     }
 
-    public static function wait($maxTries = 5)
+    public static function stop()
     {
-        $tries = 0;
-        while (!self::isListening() && ++$tries < $maxTries) {
-            usleep(100000);
-        }
-
-        if (!self::isListening()) {
-            throw new \RuntimeException('Unable to contact node.js server');
-        }
+        TestServer::stop();
     }
 
-    private static function start()
+    public static function wait($maxTries = 5)
     {
-        if (self::$started){
-            return;
-        }
-
-        if (!self::isListening()) {
-            exec('node ' . __DIR__ . \DIRECTORY_SEPARATOR . 'server.js '
-                . self::$port . ' >> /tmp/server.log 2>&1 &');
-            self::wait();
-        }
-
-        self::$started = true;
+        TestServer::wait($maxTries);
     }
 
-    private static function isListening()
+    public static function start()
     {
-        try {
-            self::getClient()->get('guzzle-server/perf', [
-                'connect_timeout' => 5,
-                'timeout'         => 5
-            ]);
-            return true;
-        } catch (\Exception $e) {
-            return false;
-        }
+        TestServer::start();
     }
 
-    private static function getClient()
+    private static function convertResponse(Response $response)
     {
-        if (!self::$client) {
-            self::$client = new Client(['base_url' => self::$url]);
-        }
-
-        return self::$client;
+        $headers = array_map(function ($h) {
+            return implode(', ', $h);
+        }, $response->getHeaders());
+
+        return [
+            'status'  => $response->getStatusCode(),
+            'reason'  => $response->getReasonPhrase(),
+            'headers' => $headers,
+            'body'    => base64_encode((string) $response->getBody())
+        ];
     }
 }
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Subscriber/CookieTest.php b/core/vendor/guzzlehttp/guzzle/tests/Subscriber/CookieTest.php
index e1897424e8f31320623a211550c7964371f44e1d..bc17e2dc20a9f0b06161a5e9b2d381cb85d9e31c 100644
--- a/core/vendor/guzzlehttp/guzzle/tests/Subscriber/CookieTest.php
+++ b/core/vendor/guzzlehttp/guzzle/tests/Subscriber/CookieTest.php
@@ -1,14 +1,13 @@
 <?php
-
 namespace GuzzleHttp\Tests\Subscriber;
 
-use GuzzleHttp\Adapter\Transaction;
+use GuzzleHttp\Transaction;
 use GuzzleHttp\Client;
-use GuzzleHttp\Event\CompleteEvent;
-use GuzzleHttp\Subscriber\Cookie;
 use GuzzleHttp\Cookie\CookieJar;
-use GuzzleHttp\Message\Response;
+use GuzzleHttp\Event\CompleteEvent;
 use GuzzleHttp\Message\Request;
+use GuzzleHttp\Message\Response;
+use GuzzleHttp\Subscriber\Cookie;
 use GuzzleHttp\Subscriber\History;
 use GuzzleHttp\Subscriber\Mock;
 
@@ -31,7 +30,7 @@ public function testExtractsAndStoresCookies()
 
         $plugin = new Cookie($mock);
         $t = new Transaction(new Client(), $request);
-        $t->setResponse($response);
+        $t->response = $response;
         $plugin->onComplete(new CompleteEvent($t));
     }
 
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Subscriber/HistoryTest.php b/core/vendor/guzzlehttp/guzzle/tests/Subscriber/HistoryTest.php
index 58c2e30fb135a97cb4f917e00867194ea8d670b5..d28e301cd06170a3033541916765ca0b7b2c70ce 100644
--- a/core/vendor/guzzlehttp/guzzle/tests/Subscriber/HistoryTest.php
+++ b/core/vendor/guzzlehttp/guzzle/tests/Subscriber/HistoryTest.php
@@ -1,17 +1,16 @@
 <?php
-
 namespace GuzzleHttp\Tests\Subscriber;
 
-use GuzzleHttp\Adapter\Transaction;
+use GuzzleHttp\Transaction;
 use GuzzleHttp\Client;
 use GuzzleHttp\Event\CompleteEvent;
 use GuzzleHttp\Event\ErrorEvent;
 use GuzzleHttp\Exception\RequestException;
 use GuzzleHttp\Message\Request;
 use GuzzleHttp\Message\Response;
+use GuzzleHttp\Stream\Stream;
 use GuzzleHttp\Subscriber\History;
 use GuzzleHttp\Subscriber\Mock;
-use GuzzleHttp\Stream\Stream;
 
 /**
  * @covers GuzzleHttp\Subscriber\History
@@ -23,7 +22,7 @@ public function testAddsForErrorEvent()
         $request = new Request('GET', '/');
         $response = new Response(400);
         $t = new Transaction(new Client(), $request);
-        $t->setResponse($response);
+        $t->response = $response;
         $e = new RequestException('foo', $request, $response);
         $ev = new ErrorEvent($t, $e);
         $h = new History(2);
@@ -48,7 +47,7 @@ public function testMaintainsLimitValue()
         $request = new Request('GET', '/');
         $response = new Response(200);
         $t = new Transaction(new Client(), $request);
-        $t->setResponse($response);
+        $t->response = $response;
         $ev = new CompleteEvent($t);
         $h = new History(2);
         $h->onComplete($ev);
@@ -74,6 +73,47 @@ public function testClearsHistory($h)
         $this->assertEquals(0, count($h));
     }
 
+    public function testWorksWithMock()
+    {
+        $client = new Client(['base_url' => 'http://localhost/']);
+        $h = new History();
+        $client->getEmitter()->attach($h);
+        $mock = new Mock([new Response(200), new Response(201), new Response(202)]);
+        $client->getEmitter()->attach($mock);
+        $request = $client->createRequest('GET', '/');
+        $client->send($request);
+        $request->setMethod('PUT');
+        $client->send($request);
+        $request->setMethod('POST');
+        $client->send($request);
+        $this->assertEquals(3, count($h));
+
+        $result = implode("\n", array_map(function ($line) {
+            return strpos($line, 'User-Agent') === 0
+                ? 'User-Agent:'
+                : trim($line);
+        }, explode("\n", $h)));
+
+        $this->assertEquals("> GET / HTTP/1.1
+Host: localhost
+User-Agent:
+
+< HTTP/1.1 200 OK
+
+> PUT / HTTP/1.1
+Host: localhost
+User-Agent:
+
+< HTTP/1.1 201 Created
+
+> POST / HTTP/1.1
+Host: localhost
+User-Agent:
+
+< HTTP/1.1 202 Accepted
+", $result);
+    }
+
     public function testCanCastToString()
     {
         $client = new Client(['base_url' => 'http://localhost/']);
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Subscriber/HttpErrorTest.php b/core/vendor/guzzlehttp/guzzle/tests/Subscriber/HttpErrorTest.php
index 12a1aef41e070a2351fbbf090609bf3f02e35925..b0266340c4c58e67ba93ec0451e6c393726c8297 100644
--- a/core/vendor/guzzlehttp/guzzle/tests/Subscriber/HttpErrorTest.php
+++ b/core/vendor/guzzlehttp/guzzle/tests/Subscriber/HttpErrorTest.php
@@ -1,13 +1,12 @@
 <?php
-
 namespace GuzzleHttp\Tests\Message;
 
+use GuzzleHttp\Client;
 use GuzzleHttp\Event\CompleteEvent;
+use GuzzleHttp\Message\Request;
 use GuzzleHttp\Message\Response;
 use GuzzleHttp\Subscriber\HttpError;
-use GuzzleHttp\Adapter\Transaction;
-use GuzzleHttp\Message\Request;
-use GuzzleHttp\Client;
+use GuzzleHttp\Transaction;
 use GuzzleHttp\Subscriber\Mock;
 
 /**
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Subscriber/MockTest.php b/core/vendor/guzzlehttp/guzzle/tests/Subscriber/MockTest.php
index c4d51aff7669716ba83cba3435fb878c43c95e8e..5e8209396f294ea3352dd3da4f75b2a22a42f917 100644
--- a/core/vendor/guzzlehttp/guzzle/tests/Subscriber/MockTest.php
+++ b/core/vendor/guzzlehttp/guzzle/tests/Subscriber/MockTest.php
@@ -1,22 +1,37 @@
 <?php
-
 namespace GuzzleHttp\Tests\Subscriber;
 
-use GuzzleHttp\Adapter\Transaction;
+use GuzzleHttp\Client;
+use GuzzleHttp\Subscriber\Mock;
+use GuzzleHttp\Message\FutureResponse;
+use GuzzleHttp\Transaction;
 use GuzzleHttp\Event\BeforeEvent;
 use GuzzleHttp\Exception\RequestException;
-use GuzzleHttp\Subscriber\Mock;
-use GuzzleHttp\Client;
+use GuzzleHttp\Message\MessageFactory;
 use GuzzleHttp\Message\Request;
 use GuzzleHttp\Message\Response;
-use GuzzleHttp\Message\MessageFactory;
 use GuzzleHttp\Stream\Stream;
+use React\Promise\Deferred;
 
 /**
  * @covers GuzzleHttp\Subscriber\Mock
  */
 class MockTest extends \PHPUnit_Framework_TestCase
 {
+    public static function createFuture(
+        callable $wait,
+        callable $cancel = null
+    ) {
+        $deferred = new Deferred();
+        return new FutureResponse(
+            $deferred->promise(),
+            function () use ($deferred, $wait) {
+                $deferred->resolve($wait());
+            },
+            $cancel
+        );
+    }
+
     public function testDescribesSubscribedEvents()
     {
         $mock = new Mock();
@@ -65,7 +80,7 @@ public function testAddsMockResponseToRequestFromClient()
         $m = new Mock([$response]);
         $ev = new BeforeEvent($t);
         $m->onBefore($ev);
-        $this->assertSame($response, $t->getResponse());
+        $this->assertSame($response, $t->response);
     }
 
     /**
@@ -105,4 +120,73 @@ public function testCanMockBadRequestExceptions()
             $this->assertSame($request, $ex->getRequest());
         }
     }
+
+    public function testCanMockFutureResponses()
+    {
+        $client = new Client(['base_url' => 'http://test.com']);
+        $request = $client->createRequest('GET', '/', ['future' => true]);
+        $response = new Response(200);
+        $future = self::createFuture(function () use ($response) {
+            return $response;
+        });
+        $mock = new Mock([$future]);
+        $this->assertCount(1, $mock);
+        $request->getEmitter()->attach($mock);
+        $res = $client->send($request);
+        $this->assertSame($future, $res);
+        $this->assertFalse($this->readAttribute($res, 'isRealized'));
+        $this->assertSame($response, $res->wait());
+    }
+
+    public function testCanMockExceptionFutureResponses()
+    {
+        $client = new Client(['base_url' => 'http://test.com']);
+        $request = $client->createRequest('GET', '/', ['future' => true]);
+        $future = self::createFuture(function () use ($request) {
+            throw new RequestException('foo', $request);
+        });
+
+        $mock = new Mock([$future]);
+        $request->getEmitter()->attach($mock);
+        $response = $client->send($request);
+        $this->assertSame($future, $response);
+        $this->assertFalse($this->readAttribute($response, 'isRealized'));
+
+        try {
+            $response->wait();
+            $this->fail('Did not throw');
+        } catch (RequestException $e) {
+            $this->assertContains('foo', $e->getMessage());
+        }
+    }
+
+    public function testCanMockFailedFutureResponses()
+    {
+        $client = new Client(['base_url' => 'http://test.com']);
+        $request = $client->createRequest('GET', '/', ['future' => true]);
+
+        // The first mock will be a mocked future response.
+        $future = self::createFuture(function () use ($client) {
+            // When dereferenced, we will set a mocked response and send
+            // another request.
+            $client->get('http://httpbin.org', ['events' => [
+                'before' => function (BeforeEvent $e) {
+                    $e->intercept(new Response(404));
+                }
+            ]]);
+        });
+
+        $mock = new Mock([$future]);
+        $request->getEmitter()->attach($mock);
+        $response = $client->send($request);
+        $this->assertSame($future, $response);
+        $this->assertFalse($this->readAttribute($response, 'isRealized'));
+
+        try {
+            $response->wait();
+            $this->fail('Did not throw');
+        } catch (RequestException $e) {
+            $this->assertEquals(404, $e->getResponse()->getStatusCode());
+        }
+    }
 }
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Subscriber/PrepareTest.php b/core/vendor/guzzlehttp/guzzle/tests/Subscriber/PrepareTest.php
index bce7d53cdc2e4fbb3edb75c82aefc0b367d93f0d..d07fdb44c04fa9c2268ca59ae6f624c9aa0ae3e3 100644
--- a/core/vendor/guzzlehttp/guzzle/tests/Subscriber/PrepareTest.php
+++ b/core/vendor/guzzlehttp/guzzle/tests/Subscriber/PrepareTest.php
@@ -1,14 +1,15 @@
 <?php
-
 namespace GuzzleHttp\Tests\Message;
 
-use GuzzleHttp\Adapter\Transaction;
+use GuzzleHttp\Message\Response;
+use GuzzleHttp\Tests\Server;
+use GuzzleHttp\Transaction;
 use GuzzleHttp\Client;
 use GuzzleHttp\Event\BeforeEvent;
-use GuzzleHttp\Subscriber\Prepare;
 use GuzzleHttp\Message\Request;
 use GuzzleHttp\Stream\NoSeekStream;
 use GuzzleHttp\Stream\Stream;
+use GuzzleHttp\Subscriber\Prepare;
 
 /**
  * @covers GuzzleHttp\Subscriber\Prepare
@@ -20,7 +21,7 @@ public function testIgnoresRequestsWithNoBody()
         $s = new Prepare();
         $t = $this->getTrans();
         $s->onBefore(new BeforeEvent($t));
-        $this->assertFalse($t->getRequest()->hasHeader('Expect'));
+        $this->assertFalse($t->request->hasHeader('Expect'));
     }
 
     public function testAppliesPostBody()
@@ -32,7 +33,7 @@ public function testAppliesPostBody()
             ->getMockForAbstractClass();
         $p->expects($this->once())
             ->method('applyRequestHeaders');
-        $t->getRequest()->setBody($p);
+        $t->request->setBody($p);
         $s->onBefore(new BeforeEvent($t));
     }
 
@@ -40,81 +41,81 @@ public function testAddsExpectHeaderWithTrue()
     {
         $s = new Prepare();
         $t = $this->getTrans();
-        $t->getRequest()->getConfig()->set('expect', true);
-        $t->getRequest()->setBody(Stream::factory('foo'));
+        $t->request->getConfig()->set('expect', true);
+        $t->request->setBody(Stream::factory('foo'));
         $s->onBefore(new BeforeEvent($t));
-        $this->assertEquals('100-Continue', $t->getRequest()->getHeader('Expect'));
+        $this->assertEquals('100-Continue', $t->request->getHeader('Expect'));
     }
 
     public function testAddsExpectHeaderBySize()
     {
         $s = new Prepare();
         $t = $this->getTrans();
-        $t->getRequest()->getConfig()->set('expect', 2);
-        $t->getRequest()->setBody(Stream::factory('foo'));
+        $t->request->getConfig()->set('expect', 2);
+        $t->request->setBody(Stream::factory('foo'));
         $s->onBefore(new BeforeEvent($t));
-        $this->assertTrue($t->getRequest()->hasHeader('Expect'));
+        $this->assertTrue($t->request->hasHeader('Expect'));
     }
 
     public function testDoesNotModifyExpectHeaderIfPresent()
     {
         $s = new Prepare();
         $t = $this->getTrans();
-        $t->getRequest()->setHeader('Expect', 'foo');
-        $t->getRequest()->setBody(Stream::factory('foo'));
+        $t->request->setHeader('Expect', 'foo');
+        $t->request->setBody(Stream::factory('foo'));
         $s->onBefore(new BeforeEvent($t));
-        $this->assertEquals('foo', $t->getRequest()->getHeader('Expect'));
+        $this->assertEquals('foo', $t->request->getHeader('Expect'));
     }
 
     public function testDoesAddExpectHeaderWhenSetToFalse()
     {
         $s = new Prepare();
         $t = $this->getTrans();
-        $t->getRequest()->getConfig()->set('expect', false);
-        $t->getRequest()->setBody(Stream::factory('foo'));
+        $t->request->getConfig()->set('expect', false);
+        $t->request->setBody(Stream::factory('foo'));
         $s->onBefore(new BeforeEvent($t));
-        $this->assertFalse($t->getRequest()->hasHeader('Expect'));
+        $this->assertFalse($t->request->hasHeader('Expect'));
     }
 
     public function testDoesNotAddExpectHeaderBySize()
     {
         $s = new Prepare();
         $t = $this->getTrans();
-        $t->getRequest()->getConfig()->set('expect', 10);
-        $t->getRequest()->setBody(Stream::factory('foo'));
+        $t->request->getConfig()->set('expect', 10);
+        $t->request->setBody(Stream::factory('foo'));
         $s->onBefore(new BeforeEvent($t));
-        $this->assertFalse($t->getRequest()->hasHeader('Expect'));
+        $this->assertFalse($t->request->hasHeader('Expect'));
     }
 
     public function testAddsExpectHeaderForNonSeekable()
     {
         $s = new Prepare();
         $t = $this->getTrans();
-        $t->getRequest()->setBody(new NoSeekStream(Stream::factory('foo')));
+        $t->request->setBody(new NoSeekStream(Stream::factory('foo')));
         $s->onBefore(new BeforeEvent($t));
-        $this->assertTrue($t->getRequest()->hasHeader('Expect'));
+        $this->assertTrue($t->request->hasHeader('Expect'));
     }
 
     public function testRemovesContentLengthWhenSendingWithChunked()
     {
         $s = new Prepare();
         $t = $this->getTrans();
-        $t->getRequest()->setBody(Stream::factory('foo'));
-        $t->getRequest()->setHeader('Transfer-Encoding', 'chunked');
+        $t->request->setBody(Stream::factory('foo'));
+        $t->request->setHeader('Transfer-Encoding', 'chunked');
         $s->onBefore(new BeforeEvent($t));
-        $this->assertFalse($t->getRequest()->hasHeader('Content-Length'));
+        $this->assertFalse($t->request->hasHeader('Content-Length'));
     }
 
     public function testUsesProvidedContentLengthAndRemovesXferEncoding()
     {
         $s = new Prepare();
         $t = $this->getTrans();
-        $t->getRequest()->setBody(Stream::factory('foo'));
-        $t->getRequest()->setHeader('Content-Length', '3');
-        $t->getRequest()->setHeader('Transfer-Encoding', 'chunked');
+        $t->request->setBody(Stream::factory('foo'));
+        $t->request->setHeader('Content-Length', '3');
+        $t->request->setHeader('Transfer-Encoding', 'chunked');
         $s->onBefore(new BeforeEvent($t));
-        $this->assertEquals(3, $t->getRequest()->getHeader('Content-Length'));
-        $this->assertFalse($t->getRequest()->hasHeader('Transfer-Encoding'));
+        $this->assertEquals(3, $t->request->getHeader('Content-Length'));
+        $this->assertFalse($t->request->hasHeader('Transfer-Encoding'));
     }
 
     public function testSetsContentTypeIfPossibleFromStream()
@@ -122,25 +123,25 @@ public function testSetsContentTypeIfPossibleFromStream()
         $body = $this->getMockBody();
         $sub = new Prepare();
         $t = $this->getTrans();
-        $t->getRequest()->setBody($body);
+        $t->request->setBody($body);
         $sub->onBefore(new BeforeEvent($t));
         $this->assertEquals(
             'image/jpeg',
-            $t->getRequest()->getHeader('Content-Type')
+            $t->request->getHeader('Content-Type')
         );
-        $this->assertEquals(4, $t->getRequest()->getHeader('Content-Length'));
+        $this->assertEquals(4, $t->request->getHeader('Content-Length'));
     }
 
     public function testDoesNotOverwriteExistingContentType()
     {
         $s = new Prepare();
         $t = $this->getTrans();
-        $t->getRequest()->setBody($this->getMockBody());
-        $t->getRequest()->setHeader('Content-Type', 'foo/baz');
+        $t->request->setBody($this->getMockBody());
+        $t->request->setHeader('Content-Type', 'foo/baz');
         $s->onBefore(new BeforeEvent($t));
         $this->assertEquals(
             'foo/baz',
-            $t->getRequest()->getHeader('Content-Type')
+            $t->request->getHeader('Content-Type')
         );
     }
 
@@ -148,9 +149,9 @@ public function testSetsContentLengthIfPossible()
     {
         $s = new Prepare();
         $t = $this->getTrans();
-        $t->getRequest()->setBody($this->getMockBody());
+        $t->request->setBody($this->getMockBody());
         $s->onBefore(new BeforeEvent($t));
-        $this->assertEquals(4, $t->getRequest()->getHeader('Content-Length'));
+        $this->assertEquals(4, $t->request->getHeader('Content-Length'));
     }
 
     public function testSetsTransferEncodingChunkedIfNeeded()
@@ -169,6 +170,20 @@ public function testSetsTransferEncodingChunkedIfNeeded()
         $this->assertEquals('chunked', $r->getHeader('Transfer-Encoding'));
     }
 
+    public function testContentLengthIntegrationTest()
+    {
+        Server::flush();
+        Server::enqueue([new Response(200)]);
+        $client = new Client(['base_url' => Server::$url]);
+        $this->assertEquals(200, $client->put('/', [
+            'body' => 'test'
+        ])->getStatusCode());
+        $request = Server::received(true)[0];
+        $this->assertEquals('PUT', $request->getMethod());
+        $this->assertEquals('4', $request->getHeader('Content-Length'));
+        $this->assertEquals('test', (string) $request->getBody());
+    }
+
     private function getTrans($request = null)
     {
         return new Transaction(
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Subscriber/RedirectTest.php b/core/vendor/guzzlehttp/guzzle/tests/Subscriber/RedirectTest.php
index 74b2a51c7638606f0aafc8f6ee5f5d54548ce6d4..168b605b26d437bf475f2cfccc13a66e4b601559 100644
--- a/core/vendor/guzzlehttp/guzzle/tests/Subscriber/RedirectTest.php
+++ b/core/vendor/guzzlehttp/guzzle/tests/Subscriber/RedirectTest.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp\Tests\Plugin\Redirect;
 
 use GuzzleHttp\Client;
@@ -25,12 +24,19 @@ public function testRedirectsRequests()
         $client->getEmitter()->attach($history);
         $client->getEmitter()->attach($mock);
 
-        $response = $client->get('/foo');
+        $request = $client->createRequest('GET', '/foo');
+        // Ensure "end" is called only once
+        $called = 0;
+        $request->getEmitter()->on('end', function () use (&$called) {
+            $called++;
+        });
+        $response = $client->send($request);
+
         $this->assertEquals(200, $response->getStatusCode());
         $this->assertContains('/redirect2', $response->getEffectiveUrl());
 
         // Ensure that two requests were sent
-        $requests = $history->getRequests();
+        $requests = $history->getRequests(true);
 
         $this->assertEquals('/foo', $requests[0]->getPath());
         $this->assertEquals('GET', $requests[0]->getMethod());
@@ -38,6 +44,8 @@ public function testRedirectsRequests()
         $this->assertEquals('GET', $requests[1]->getMethod());
         $this->assertEquals('/redirect2', $requests[2]->getPath());
         $this->assertEquals('GET', $requests[2]->getMethod());
+
+        $this->assertEquals(1, $called);
     }
 
     /**
@@ -75,7 +83,7 @@ public function testDefaultBehaviorIsToRedirectWithGetForEntityEnclosingRequests
             'body' => 'testing'
         ]);
 
-        $requests = $h->getRequests();
+        $requests = $h->getRequests(true);
         $this->assertEquals('POST', $requests[0]->getMethod());
         $this->assertEquals('GET', $requests[1]->getMethod());
         $this->assertEquals('bar', (string) $requests[1]->getHeader('X-Baz'));
@@ -99,7 +107,7 @@ public function testCanRedirectWithStrictRfcCompliance()
             'allow_redirects' => ['max' => 10, 'strict' => true]
         ]);
 
-        $requests = $h->getRequests();
+        $requests = $h->getRequests(true);
         $this->assertEquals('POST', $requests[0]->getMethod());
         $this->assertEquals('POST', $requests[1]->getMethod());
         $this->assertEquals('bar', (string) $requests[1]->getHeader('X-Baz'));
@@ -179,7 +187,7 @@ public function testCanRedirectWithNoLeadingSlashAndQuery()
         ]));
         $client->getEmitter()->attach($h);
         $client->get('?foo=bar');
-        $requests = $h->getRequests();
+        $requests = $h->getRequests(true);
         $this->assertEquals('http://www.foo.com?foo=bar', $requests[0]->getUrl());
         $this->assertEquals('http://www.foo.com/redirect?foo=bar', $requests[1]->getUrl());
     }
@@ -194,7 +202,7 @@ public function testHandlesRedirectsWithSpacesProperly()
         $h = new History();
         $client->getEmitter()->attach($h);
         $client->get('/foo');
-        $reqs = $h->getRequests();
+        $reqs = $h->getRequests(true);
         $this->assertEquals('/redirect%201', $reqs[1]->getResource());
     }
 
@@ -208,7 +216,7 @@ public function testAddsRefererWhenPossible()
         $h = new History();
         $client->getEmitter()->attach($h);
         $client->get('/foo', ['allow_redirects' => ['max' => 5, 'referer' => true]]);
-        $reqs = $h->getRequests();
+        $reqs = $h->getRequests(true);
         $this->assertEquals('http://www.foo.com/foo', $reqs[1]->getHeader('Referer'));
     }
 
@@ -224,7 +232,7 @@ public function testDoesNotAddRefererWhenChangingProtocols()
         $h = new History();
         $client->getEmitter()->attach($h);
         $client->get('/foo', ['allow_redirects' => ['max' => 5, 'referer' => true]]);
-        $reqs = $h->getRequests();
+        $reqs = $h->getRequests(true);
         $this->assertFalse($reqs[1]->hasHeader('Referer'));
     }
 
@@ -239,8 +247,23 @@ public function testRedirectsWithGetOn303()
         $client->getEmitter()->attach($mock);
         $client->getEmitter()->attach($h);
         $client->post('http://test.com/foo', ['body' => 'testing']);
-        $requests = $h->getRequests();
+        $requests = $h->getRequests(true);
         $this->assertEquals('POST', $requests[0]->getMethod());
         $this->assertEquals('GET', $requests[1]->getMethod());
     }
+
+    public function testRelativeLinkBasedLatestRequest()
+    {
+        $client = new Client(['base_url' => 'http://www.foo.com']);
+        $client->getEmitter()->attach(new Mock([
+            "HTTP/1.1 301 Moved Permanently\r\nLocation: http://www.bar.com\r\nContent-Length: 0\r\n\r\n",
+            "HTTP/1.1 301 Moved Permanently\r\nLocation: /redirect\r\nContent-Length: 0\r\n\r\n",
+            "HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n"
+        ]));
+        $response = $client->get('/');
+        $this->assertEquals(
+            'http://www.bar.com/redirect',
+            $response->getEffectiveUrl()
+        );
+    }
 }
diff --git a/core/vendor/guzzlehttp/guzzle/tests/TransactionTest.php b/core/vendor/guzzlehttp/guzzle/tests/TransactionTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..42965b1b5685ec8e260216db894e99ba4174e6f7
--- /dev/null
+++ b/core/vendor/guzzlehttp/guzzle/tests/TransactionTest.php
@@ -0,0 +1,22 @@
+<?php
+namespace GuzzleHttp\Tests;
+
+use GuzzleHttp\Client;
+use GuzzleHttp\Message\Request;
+use GuzzleHttp\Message\Response;
+use GuzzleHttp\Transaction;
+
+class TransactionTest extends \PHPUnit_Framework_TestCase
+{
+    public function testHoldsData()
+    {
+        $client = new Client();
+        $request = new Request('GET', 'http://www.foo.com');
+        $t = new Transaction($client, $request);
+        $this->assertSame($client, $t->client);
+        $this->assertSame($request, $t->request);
+        $response = new Response(200);
+        $t->response = $response;
+        $this->assertSame($response, $t->response);
+    }
+}
diff --git a/core/vendor/guzzlehttp/guzzle/tests/UriTemplateTest.php b/core/vendor/guzzlehttp/guzzle/tests/UriTemplateTest.php
index b65ec1893d962e7263bd58557e823c17567806e2..3f7a7f063b7ffa0fe14c4b14851475a534ca4477 100644
--- a/core/vendor/guzzlehttp/guzzle/tests/UriTemplateTest.php
+++ b/core/vendor/guzzlehttp/guzzle/tests/UriTemplateTest.php
@@ -31,7 +31,7 @@ public function templateProvider()
             'empty_keys' => array(),
         );
 
-        return array_map(function($t) use ($params) {
+        return array_map(function ($t) use ($params) {
             $t[] = $params;
             return $t;
         }, array(
diff --git a/core/vendor/guzzlehttp/guzzle/tests/UrlTest.php b/core/vendor/guzzlehttp/guzzle/tests/UrlTest.php
index 1321c010b7092cddb232e219fe92d6efddb6c272..4f06bd94100645fed26f3a3c65bcf1895c6be49e 100644
--- a/core/vendor/guzzlehttp/guzzle/tests/UrlTest.php
+++ b/core/vendor/guzzlehttp/guzzle/tests/UrlTest.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp\Tests;
 
 use GuzzleHttp\Query;
@@ -134,13 +133,25 @@ public function testAddsQueryIfPresent()
     public function testAddsToPath()
     {
         // Does nothing here
-        $this->assertEquals('http://e.com/base?a=1', (string) Url::fromString('http://e.com/base?a=1')->addPath(false));
-        $this->assertEquals('http://e.com/base?a=1', (string) Url::fromString('http://e.com/base?a=1')->addPath(''));
-        $this->assertEquals('http://e.com/base?a=1', (string) Url::fromString('http://e.com/base?a=1')->addPath('/'));
-        $this->assertEquals('http://e.com/base/0', (string) Url::fromString('http://e.com/base')->addPath('0'));
-
-        $this->assertEquals('http://e.com/base/relative?a=1', (string) Url::fromString('http://e.com/base?a=1')->addPath('relative'));
-        $this->assertEquals('http://e.com/base/relative?a=1', (string) Url::fromString('http://e.com/base?a=1')->addPath('/relative'));
+        $url = Url::fromString('http://e.com/base?a=1');
+        $url->addPath(false);
+        $this->assertEquals('http://e.com/base?a=1', $url);
+        $url = Url::fromString('http://e.com/base?a=1');
+        $url->addPath('');
+        $this->assertEquals('http://e.com/base?a=1', $url);
+        $url = Url::fromString('http://e.com/base?a=1');
+        $url->addPath('/');
+        $this->assertEquals('http://e.com/base?a=1', $url);
+        $url = Url::fromString('http://e.com/base');
+        $url->addPath('0');
+        $this->assertEquals('http://e.com/base/0', $url);
+
+        $url = Url::fromString('http://e.com/base?a=1');
+        $url->addPath('relative');
+        $this->assertEquals('http://e.com/base/relative?a=1', $url);
+        $url = Url::fromString('http://e.com/base?a=1');
+        $url->addPath('/relative');
+        $this->assertEquals('http://e.com/base/relative?a=1', $url);
     }
 
     /**
@@ -219,19 +230,32 @@ public function testCombinesUrls($a, $b, $c)
     public function testHasGettersAndSetters()
     {
         $url = Url::fromString('http://www.test.com/');
-        $this->assertEquals('example.com', $url->setHost('example.com')->getHost());
-        $this->assertEquals('8080', $url->setPort(8080)->getPort());
-        $this->assertEquals('/foo/bar', $url->setPath('/foo/bar')->getPath());
-        $this->assertEquals('a', $url->setPassword('a')->getPassword());
-        $this->assertEquals('b', $url->setUsername('b')->getUsername());
-        $this->assertEquals('abc', $url->setFragment('abc')->getFragment());
-        $this->assertEquals('https', $url->setScheme('https')->getScheme());
-        $this->assertEquals('a=123', (string) $url->setQuery('a=123')->getQuery());
-        $this->assertEquals('https://b:a@example.com:8080/foo/bar?a=123#abc', (string) $url);
-        $this->assertEquals('b=boo', (string) $url->setQuery(new Query(array(
-            'b' => 'boo'
-        )))->getQuery());
-        $this->assertEquals('https://b:a@example.com:8080/foo/bar?b=boo#abc', (string) $url);
+        $url->setHost('example.com');
+        $this->assertEquals('example.com', $url->getHost());
+        $url->setPort(8080);
+        $this->assertEquals('8080', $url->getPort());
+        $url->setPath('/foo/bar');
+        $this->assertEquals('/foo/bar', $url->getPath());
+        $url->setPassword('a');
+        $this->assertEquals('a', $url->getPassword());
+        $url->setUsername('b');
+        $this->assertEquals('b', $url->getUsername());
+        $url->setFragment('abc');
+        $this->assertEquals('abc', $url->getFragment());
+        $url->setScheme('https');
+        $this->assertEquals('https', $url->getScheme());
+        $url->setQuery('a=123');
+        $this->assertEquals('a=123', $url->getQuery());
+        $this->assertEquals(
+            'https://b:a@example.com:8080/foo/bar?a=123#abc',
+            (string) $url
+        );
+        $url->setQuery(new Query(['b' => 'boo']));
+        $this->assertEquals('b=boo', $url->getQuery());
+        $this->assertEquals(
+            'https://b:a@example.com:8080/foo/bar?b=boo#abc',
+            (string) $url
+        );
     }
 
     public function testSetQueryAcceptsArray()
@@ -279,7 +303,8 @@ public function urlProvider()
     public function testRemoveDotSegments($path, $result)
     {
         $url = Url::fromString('http://www.example.com');
-        $url->setPath($path)->removeDotSegments();
+        $url->setPath($path);
+        $url->removeDotSegments();
         $this->assertEquals($result, $url->getPath());
     }
 
diff --git a/core/vendor/guzzlehttp/guzzle/tests/UtilsTest.php b/core/vendor/guzzlehttp/guzzle/tests/UtilsTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..d9bdc071fa5c985c1ae882a520247016747b1d5a
--- /dev/null
+++ b/core/vendor/guzzlehttp/guzzle/tests/UtilsTest.php
@@ -0,0 +1,34 @@
+<?php
+namespace GuzzleHttp\Tests;
+
+use GuzzleHttp\Utils;
+
+class UtilsTest extends \PHPUnit_Framework_TestCase
+{
+    public function testExpandsTemplate()
+    {
+        $this->assertEquals(
+            'foo/123',
+            Utils::uriTemplate('foo/{bar}', ['bar' => '123'])
+        );
+    }
+
+    public function noBodyProvider()
+    {
+        return [['get'], ['head'], ['delete']];
+    }
+
+    public function testJsonDecodes()
+    {
+        $this->assertTrue(Utils::jsonDecode('true'));
+    }
+
+    /**
+     * @expectedException \InvalidArgumentException
+     * @expectedExceptionMessage Unable to parse JSON data: JSON_ERROR_SYNTAX - Syntax error, malformed JSON
+     */
+    public function testJsonDecodesWithErrorMessages()
+    {
+        Utils::jsonDecode('!narf!');
+    }
+}
diff --git a/core/vendor/guzzlehttp/guzzle/tests/bootstrap.php b/core/vendor/guzzlehttp/guzzle/tests/bootstrap.php
index 6c3ded321d798d31fb6b4f61991ce1acb75c557b..8713f9624ac8aa783979101218ceebfbbe163489 100644
--- a/core/vendor/guzzlehttp/guzzle/tests/bootstrap.php
+++ b/core/vendor/guzzlehttp/guzzle/tests/bootstrap.php
@@ -1,12 +1,11 @@
 <?php
-
 require __DIR__ . '/../vendor/autoload.php';
-require __DIR__ . '/Server.php';
+require __DIR__ . '/../vendor/guzzlehttp/ringphp/tests/Client/Server.php';
 
 use GuzzleHttp\Tests\Server;
 
+Server::start();
+
 register_shutdown_function(function () {
-    if (Server::$started) {
-        Server::stop();
-    }
+    Server::stop();
 });
diff --git a/core/vendor/guzzlehttp/guzzle/tests/perf.php b/core/vendor/guzzlehttp/guzzle/tests/perf.php
index 1f8567aac0550a39ae0da0b65fc80369bc1de335..6de89c261496ede82ff3670b33e2dca9db42b785 100644
--- a/core/vendor/guzzlehttp/guzzle/tests/perf.php
+++ b/core/vendor/guzzlehttp/guzzle/tests/perf.php
@@ -13,13 +13,15 @@
 
 use GuzzleHttp\Client;
 use GuzzleHttp\Tests\Server;
+use GuzzleHttp\Ring\Client\CurlMultiHandler;
+use GuzzleHttp\Pool;
 
 // Wait until the server is responding
 Server::wait();
 
 // Get custom make variables
 $total = isset($_SERVER['REQUESTS']) ? $_SERVER['REQUESTS'] : 1000;
-$parallel = isset($_SERVER['PARALLEL']) ? $_SERVER['PARALLEL'] : 25;
+$parallel = isset($_SERVER['PARALLEL']) ? $_SERVER['PARALLEL'] : 100;
 
 $client = new Client(['base_url' => Server::$url]);
 
@@ -29,10 +31,10 @@
 }
 $totalTime = microtime(true) - $t;
 $perRequest = ($totalTime / $total) * 1000;
-printf("Serial:   %f (%f ms / request) %d total\n",
+printf("Serial: %f (%f ms / request) %d total\n",
     $totalTime, $perRequest, $total);
 
-// Create a generator used to yield batches of requests to sendAll
+// Create a generator used to yield batches of requests
 $reqs = function () use ($client, $total) {
     for ($i = 0; $i < $total; $i++) {
         yield $client->createRequest('GET', '/guzzle-server/perf');
@@ -40,8 +42,20 @@
 };
 
 $t = microtime(true);
-$client->sendAll($reqs(), ['parallel' => $parallel]);
+Pool::send($client, $reqs(), ['parallel' => $parallel]);
 $totalTime = microtime(true) - $t;
 $perRequest = ($totalTime / $total) * 1000;
-printf("Parallel: %f (%f ms / request) %d total with %d in parallel\n",
+printf("Batch:  %f (%f ms / request) %d total with %d in parallel\n",
     $totalTime, $perRequest, $total, $parallel);
+
+$handler = new CurlMultiHandler(['max_handles' => $parallel]);
+$client = new Client(['handler' => $handler, 'base_url' => Server::$url]);
+$t = microtime(true);
+for ($i = 0; $i < $total; $i++) {
+    $client->get('/guzzle-server/perf');
+}
+unset($client);
+$totalTime = microtime(true) - $t;
+$perRequest = ($totalTime / $total) * 1000;
+printf("Future: %f (%f ms / request) %d total\n",
+    $totalTime, $perRequest, $total);
diff --git a/core/vendor/guzzlehttp/guzzle/tests/server.js b/core/vendor/guzzlehttp/guzzle/tests/server.js
deleted file mode 100644
index d11d28a50c34d71afd3d15e6c5bb80ba8fe04d3f..0000000000000000000000000000000000000000
--- a/core/vendor/guzzlehttp/guzzle/tests/server.js
+++ /dev/null
@@ -1,146 +0,0 @@
-/**
- * Guzzle node.js test server to return queued responses to HTTP requests and
- * expose a RESTful API for enqueueing responses and retrieving the requests
- * that have been received.
- *
- * - Delete all requests that have been received:
- *      DELETE /guzzle-server/requests
- *      Host: 127.0.0.1:8125
- *
- *  - Enqueue responses
- *      PUT /guzzle-server/responses
- *      Host: 127.0.0.1:8125
- *
- *      [{ "statusCode": 200, "reasonPhrase": "OK", "headers": {}, "body": "" }]
- *
- *  - Get the received requests
- *      GET /guzzle-server/requests
- *      Host: 127.0.0.1:8125
- *
- *  - Shutdown the server
- *      DELETE /guzzle-server
- *      Host: 127.0.0.1:8125
- *
- * @package Guzzle PHP <http://www.guzzlephp.org>
- * @license See the LICENSE file that was distributed with this source code.
- */
-
-var http = require("http");
-
-/**
- * Guzzle node.js server
- * @class
- */
-var GuzzleServer = function(port, log) {
-
-    this.port = port;
-    this.log = log;
-    this.responses = [];
-    this.requests = [];
-    var that = this;
-
-    var controlRequest = function(request, req, res) {
-        if (req.url == '/guzzle-server/perf') {
-            res.writeHead(200, "OK", {"Content-Length": 16});
-            res.end("Body of response");
-        } else if (req.method == "DELETE") {
-            if (req.url == "/guzzle-server/requests") {
-                // Clear the received requests
-                that.requests = [];
-                res.writeHead(200, "OK", { "Content-Length": 0 });
-                res.end();
-                if (this.log) {
-                    console.log("Flushing requests");
-                }
-            } else if (req.url == "/guzzle-server") {
-                // Shutdown the server
-                res.writeHead(200, "OK", { "Content-Length": 0, "Connection": "close" });
-                res.end();
-                if (this.log) {
-                    console.log("Shutting down");
-                }
-                that.server.close();
-            }
-        } else if (req.method == "GET") {
-            if (req.url === "/guzzle-server/requests") {
-                // Get received requests
-                var data = that.requests.join("\n----[request]\n");
-                res.writeHead(200, "OK", { "Content-Length": data.length });
-                res.end(data);
-                if (that.log) {
-                    console.log("Sending receiving requests");
-                }
-            }
-        } else if (req.method == "PUT") {
-            if (req.url == "/guzzle-server/responses") {
-                if (that.log) {
-                    console.log("Adding responses...");
-                }
-                // Received response to queue
-                var data = request.split("\r\n\r\n")[1];
-                if (!data) {
-                    if (that.log) {
-                        console.log("No response data was provided");
-                    }
-                    res.writeHead(400, "NO RESPONSES IN REQUEST", { "Content-Length": 0 });
-                } else {
-                    that.responses = eval("(" + data + ")");
-                    if (that.log) {
-                        console.log(that.responses);
-                    }
-                    res.writeHead(200, "OK", { "Content-Length": 0 });
-                }
-                res.end();
-            }
-        }
-    };
-
-    var receivedRequest = function(request, req, res) {
-        if (req.url.indexOf("/guzzle-server") === 0) {
-            controlRequest(request, req, res);
-        } else if (req.url.indexOf("/guzzle-server") == -1 && !that.responses.length) {
-            res.writeHead(500);
-            res.end("No responses in queue");
-        } else {
-            var response = that.responses.shift();
-            res.writeHead(response.statusCode, response.reasonPhrase, response.headers);
-            res.end(response.body);
-            that.requests.push(request);
-        }
-    };
-
-    this.start = function() {
-
-        that.server = http.createServer(function(req, res) {
-
-            var request = req.method + " " + req.url + " HTTP/" + req.httpVersion + "\r\n";
-            for (var i in req.headers) {
-                request += i + ": " + req.headers[i] + "\r\n";
-            }
-            request += "\r\n";
-
-            // Receive each chunk of the request body
-            req.addListener("data", function(chunk) {
-                request += chunk;
-            });
-
-            // Called when the request completes
-            req.addListener("end", function() {
-                receivedRequest(request, req, res);
-            });
-        });
-        that.server.listen(port, "127.0.0.1");
-
-        if (this.log) {
-            console.log("Server running at http://127.0.0.1:8125/");
-        }
-    };
-};
-
-// Get the port from the arguments
-port = process.argv.length >= 3 ? process.argv[2] : 8125;
-log = process.argv.length >= 4 ? process.argv[3] : false;
-
-// Start the server
-server = new GuzzleServer(port, log);
-server.start();
diff --git a/core/vendor/guzzlehttp/ringphp/.gitignore b/core/vendor/guzzlehttp/ringphp/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..290a94524176188548ce464e057987fbcdb919e6
--- /dev/null
+++ b/core/vendor/guzzlehttp/ringphp/.gitignore
@@ -0,0 +1,4 @@
+vendor
+build/artifacts/
+composer.lock
+docs/_build/
diff --git a/core/vendor/guzzlehttp/ringphp/.travis.yml b/core/vendor/guzzlehttp/ringphp/.travis.yml
new file mode 100644
index 0000000000000000000000000000000000000000..0befb178ecc837f521d317685f0f2f2f4b208696
--- /dev/null
+++ b/core/vendor/guzzlehttp/ringphp/.travis.yml
@@ -0,0 +1,21 @@
+language: php
+
+php:
+  - 5.4
+  - 5.5
+  - 5.6
+  - hhvm
+
+before_script:
+  - composer self-update
+  - composer install --no-interaction --prefer-source --dev
+  - ~/.nvm/nvm.sh install v0.6.14
+  - ~/.nvm/nvm.sh run v0.6.14
+
+script:
+  - make test
+
+matrix:
+  allow_failures:
+    - php: hhvm
+  fast_finish: true
diff --git a/core/vendor/guzzlehttp/ringphp/LICENSE b/core/vendor/guzzlehttp/ringphp/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..71d3b783cb5b82e732f4555c5b7839036334607b
--- /dev/null
+++ b/core/vendor/guzzlehttp/ringphp/LICENSE
@@ -0,0 +1,19 @@
+Copyright (c) 2014 Michael Dowling, https://github.com/mtdowling <mtdowling@gmail.com>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/core/vendor/guzzlehttp/ringphp/Makefile b/core/vendor/guzzlehttp/ringphp/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..21c812e381309d1db478db1e505b6a84ddbbbdeb
--- /dev/null
+++ b/core/vendor/guzzlehttp/ringphp/Makefile
@@ -0,0 +1,46 @@
+all: clean coverage docs
+
+docs:
+	cd docs && make html
+
+view-docs:
+	open docs/_build/html/index.html
+
+start-server: stop-server
+	node tests/Client/server.js &> /dev/null &
+
+stop-server:
+	@PID=$(shell ps axo pid,command \
+	  | grep 'tests/Client/server.js' \
+	  | grep -v grep \
+	  | cut -f 1 -d " "\
+	) && [ -n "$$PID" ] && kill $$PID || true
+
+test: start-server
+	vendor/bin/phpunit $(TEST)
+	$(MAKE) stop-server
+
+coverage: start-server
+	vendor/bin/phpunit --coverage-html=build/artifacts/coverage $(TEST)
+	$(MAKE) stop-server
+
+view-coverage:
+	open build/artifacts/coverage/index.html
+
+clean:
+	rm -rf build/artifacts/*
+	cd docs && make clean
+
+tag:
+	$(if $(TAG),,$(error TAG is not defined. Pass via "make tag TAG=4.2.1"))
+	@echo Tagging $(TAG)
+	chag update -m '$(TAG) ()'
+	git add -A
+	git commit -m '$(TAG) release'
+	chag tag
+
+perf: start-server
+	php tests/perf.php
+	$(MAKE) stop-server
+
+.PHONY: docs
diff --git a/core/vendor/guzzlehttp/ringphp/README.rst b/core/vendor/guzzlehttp/ringphp/README.rst
new file mode 100644
index 0000000000000000000000000000000000000000..1f7a0bc314d213176e64c32833f58f377b288871
--- /dev/null
+++ b/core/vendor/guzzlehttp/ringphp/README.rst
@@ -0,0 +1,14 @@
+=======
+RingPHP
+=======
+
+Provides low level APIs used to power HTTP clients and servers through a
+simple, PHP ``callable`` that accepts a request hash and returns a future
+response hash. RingPHP supports both synchronous and asynchronous
+workflows by utilizing both futures and `promises <https://github.com/reactphp/promise>`_.
+
+RingPHP is inspired by Clojure's `Ring <https://github.com/ring-clojure/ring>`_,
+but has been modified to accommodate clients and servers for both blocking
+and non-blocking requests.
+
+See http://guzzle-ring.readthedocs.org/ for the full online documentation.
diff --git a/core/vendor/guzzlehttp/ringphp/composer.json b/core/vendor/guzzlehttp/ringphp/composer.json
new file mode 100644
index 0000000000000000000000000000000000000000..2d8849f5aa8defccfaa4565384ae341ba0883765
--- /dev/null
+++ b/core/vendor/guzzlehttp/ringphp/composer.json
@@ -0,0 +1,38 @@
+{
+    "name": "guzzlehttp/ringphp",
+    "license": "MIT",
+    "authors": [
+        {
+            "name": "Michael Dowling",
+            "email": "mtdowling@gmail.com",
+            "homepage": "https://github.com/mtdowling"
+        }
+    ],
+    "require": {
+        "php": ">=5.4.0",
+        "guzzlehttp/streams": "~3.0",
+        "react/promise": "~2.0"
+    },
+    "require-dev": {
+        "ext-curl": "*",
+        "phpunit/phpunit": "~4.0"
+    },
+    "suggest": {
+        "ext-curl": "Guzzle will use specific adapters if cURL is present"
+    },
+    "autoload": {
+        "psr-4": {
+            "GuzzleHttp\\Ring\\": "src/"
+        }
+    },
+    "autoload-dev": {
+        "psr-4": {
+            "GuzzleHttp\\Tests\\Ring\\": "tests/"
+        }
+    },
+    "extra": {
+        "branch-alias": {
+            "dev-master": "1.0-dev"
+        }
+    }
+}
diff --git a/core/vendor/guzzlehttp/ringphp/docs/Makefile b/core/vendor/guzzlehttp/ringphp/docs/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..51270aa5d39fb03f562a2acb09df88f082741b01
--- /dev/null
+++ b/core/vendor/guzzlehttp/ringphp/docs/Makefile
@@ -0,0 +1,153 @@
+# Makefile for Sphinx documentation
+#
+
+# You can set these variables from the command line.
+SPHINXOPTS    =
+SPHINXBUILD   = sphinx-build
+PAPER         =
+BUILDDIR      = _build
+
+# Internal variables.
+PAPEROPT_a4     = -D latex_paper_size=a4
+PAPEROPT_letter = -D latex_paper_size=letter
+ALLSPHINXOPTS   = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
+# the i18n builder cannot share the environment and doctrees with the others
+I18NSPHINXOPTS  = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
+
+.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext
+
+help:
+	@echo "Please use \`make <target>' where <target> is one of"
+	@echo "  html       to make standalone HTML files"
+	@echo "  dirhtml    to make HTML files named index.html in directories"
+	@echo "  singlehtml to make a single large HTML file"
+	@echo "  pickle     to make pickle files"
+	@echo "  json       to make JSON files"
+	@echo "  htmlhelp   to make HTML files and a HTML help project"
+	@echo "  qthelp     to make HTML files and a qthelp project"
+	@echo "  devhelp    to make HTML files and a Devhelp project"
+	@echo "  epub       to make an epub"
+	@echo "  latex      to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
+	@echo "  latexpdf   to make LaTeX files and run them through pdflatex"
+	@echo "  text       to make text files"
+	@echo "  man        to make manual pages"
+	@echo "  texinfo    to make Texinfo files"
+	@echo "  info       to make Texinfo files and run them through makeinfo"
+	@echo "  gettext    to make PO message catalogs"
+	@echo "  changes    to make an overview of all changed/added/deprecated items"
+	@echo "  linkcheck  to check all external links for integrity"
+	@echo "  doctest    to run all doctests embedded in the documentation (if enabled)"
+
+clean:
+	-rm -rf $(BUILDDIR)/*
+
+html:
+	$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
+	@echo
+	@echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
+
+dirhtml:
+	$(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
+	@echo
+	@echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
+
+singlehtml:
+	$(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
+	@echo
+	@echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."
+
+pickle:
+	$(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
+	@echo
+	@echo "Build finished; now you can process the pickle files."
+
+json:
+	$(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
+	@echo
+	@echo "Build finished; now you can process the JSON files."
+
+htmlhelp:
+	$(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
+	@echo
+	@echo "Build finished; now you can run HTML Help Workshop with the" \
+	      ".hhp project file in $(BUILDDIR)/htmlhelp."
+
+qthelp:
+	$(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
+	@echo
+	@echo "Build finished; now you can run "qcollectiongenerator" with the" \
+	      ".qhcp project file in $(BUILDDIR)/qthelp, like this:"
+	@echo "# qcollectiongenerator $(BUILDDIR)/qthelp/GuzzleRing.qhcp"
+	@echo "To view the help file:"
+	@echo "# assistant -collectionFile $(BUILDDIR)/qthelp/GuzzleRing.qhc"
+
+devhelp:
+	$(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
+	@echo
+	@echo "Build finished."
+	@echo "To view the help file:"
+	@echo "# mkdir -p $$HOME/.local/share/devhelp/GuzzleRing"
+	@echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/GuzzleRing"
+	@echo "# devhelp"
+
+epub:
+	$(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
+	@echo
+	@echo "Build finished. The epub file is in $(BUILDDIR)/epub."
+
+latex:
+	$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
+	@echo
+	@echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
+	@echo "Run \`make' in that directory to run these through (pdf)latex" \
+	      "(use \`make latexpdf' here to do that automatically)."
+
+latexpdf:
+	$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
+	@echo "Running LaTeX files through pdflatex..."
+	$(MAKE) -C $(BUILDDIR)/latex all-pdf
+	@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
+
+text:
+	$(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text
+	@echo
+	@echo "Build finished. The text files are in $(BUILDDIR)/text."
+
+man:
+	$(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man
+	@echo
+	@echo "Build finished. The manual pages are in $(BUILDDIR)/man."
+
+texinfo:
+	$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
+	@echo
+	@echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo."
+	@echo "Run \`make' in that directory to run these through makeinfo" \
+	      "(use \`make info' here to do that automatically)."
+
+info:
+	$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
+	@echo "Running Texinfo files through makeinfo..."
+	make -C $(BUILDDIR)/texinfo info
+	@echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo."
+
+gettext:
+	$(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale
+	@echo
+	@echo "Build finished. The message catalogs are in $(BUILDDIR)/locale."
+
+changes:
+	$(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
+	@echo
+	@echo "The overview file is in $(BUILDDIR)/changes."
+
+linkcheck:
+	$(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
+	@echo
+	@echo "Link check complete; look for any errors in the above output " \
+	      "or in $(BUILDDIR)/linkcheck/output.txt."
+
+doctest:
+	$(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
+	@echo "Testing of doctests in the sources finished, look at the " \
+	      "results in $(BUILDDIR)/doctest/output.txt."
diff --git a/core/vendor/guzzlehttp/ringphp/docs/client_handlers.rst b/core/vendor/guzzlehttp/ringphp/docs/client_handlers.rst
new file mode 100644
index 0000000000000000000000000000000000000000..3151f00216ce0afdd31d2fb0a936c07f61b045de
--- /dev/null
+++ b/core/vendor/guzzlehttp/ringphp/docs/client_handlers.rst
@@ -0,0 +1,173 @@
+===============
+Client Handlers
+===============
+
+Client handlers accept a request array and return a future response array that
+can be used synchronously as an array or asynchronously using a promise.
+
+Built-In Handlers
+-----------------
+
+RingPHP comes with three built-in client handlers.
+
+Stream Handler
+~~~~~~~~~~~~~~
+
+The ``GuzzleHttp\Ring\Client\StreamHandler`` uses PHP's
+`http stream wrapper <http://php.net/manual/en/wrappers.http.php>`_ to send
+requests.
+
+.. note::
+
+    This handler cannot send requests concurrently.
+
+You can provide an associative array of custom stream context options to the
+StreamHandler using the ``stream_context`` key of the ``client`` request
+option.
+
+.. code-block:: php
+
+    use GuzzleHttp\Ring\Client\StreamHandler;
+
+    $response = $handler([
+        'http_method' => 'GET',
+        'uri' => '/',
+        'headers' => ['host' => ['httpbin.org']],
+        'client' => [
+            'stream_context' => [
+                'http' => [
+                    'request_fulluri' => true,
+                    'method' => 'HEAD'
+                ],
+                'socket' => [
+                    'bindto' => '127.0.0.1:0'
+                ],
+                'ssl' => [
+                    'verify_peer' => false
+                ]
+            ]
+        ]
+    ]);
+
+    // Even though it's already completed, you can still use a promise
+    $response->then(function ($response) {
+        echo $response['status']; // 200
+    });
+
+    // Or access the response using the future interface
+    echo $response['status']; // 200
+
+cURL Handler
+~~~~~~~~~~~~
+
+The ``GuzzleHttp\Ring\Client\CurlHandler`` can be used with PHP 5.5+ to send
+requests using cURL easy handles. This handler is great for sending requests
+one at a time because the execute and select loop is implemented in C code
+which executes faster and consumes less memory than using PHP's
+``curl_multi_*`` interface.
+
+.. note::
+
+    This handler cannot send requests concurrently.
+
+When using the CurlHandler, custom curl options can be specified as an
+associative array of `cURL option constants <http://php.net/manual/en/curl.constants.php>`_
+mapping to values in the ``client`` option of a requst using the **curl** key.
+
+.. code-block:: php
+
+    use GuzzleHttp\Ring\Client\CurlHandler;
+
+    $handler = new CurlHandler();
+
+    $request = [
+        'http_method' => 'GET',
+        'headers'     => ['host' => [Server::$host]],
+        'client'      => ['curl' => [CURLOPT_LOW_SPEED_LIMIT => 10]]
+    ];
+
+    $response = $handler($request);
+
+    // The response can be used directly as an array.
+    echo $response['status']; // 200
+
+    // Or, it can be used as a promise (that has already fulfilled).
+    $response->then(function ($response) {
+        echo $response['status']; // 200
+    });
+
+cURL Multi Handler
+~~~~~~~~~~~~~~~~~~
+
+The ``GuzzleHttp\Ring\Client\CurlMultiHandler`` transfers requests using
+cURL's `multi API <http://curl.haxx.se/libcurl/c/libcurl-multi.html>`_. The
+``CurlMultiHandler`` is great for sending requests concurrently.
+
+.. code-block:: php
+
+    use GuzzleHttp\Ring\Client\CurlMultiHandler;
+
+    $handler = new CurlMultiHandler();
+
+    $request = [
+        'http_method' => 'GET',
+        'headers'     => ['host' => [Server::$host]]
+    ];
+
+    // this call returns a future array immediately.
+    $response = $handler($request);
+
+    // Ideally, you should use the promise API to not block.
+    $response
+        ->then(function ($response) {
+            // Got the response at some point in the future
+            echo $response['status']; // 200
+            // Don't break the chain
+            return $response;
+        })->then(function ($response) {
+            // ...
+        });
+
+    // If you really need to block, then you can use the response as an
+    // associative array. This will block until it has completed.
+    echo $response['status']; // 200
+
+Just like the ``CurlHandler``, the ``CurlMultiHandler`` accepts custom curl
+option in the ``curl`` key of the ``client`` request option.
+
+Mock Handler
+~~~~~~~~~~~~
+
+The ``GuzzleHttp\Ring\Client\MockHandler`` is used to return mock responses.
+When constructed, the handler can be configured to return the same response
+array over and over, a future response, or a the evaluation of a callback
+function.
+
+.. code-block:: php
+
+    use GuzzleHttp\Ring\Client\MockHandler;
+
+    // Return a canned response.
+    $mock = new MockHandler(['status' => 200]);
+    $response = $mock([]);
+    assert(200 == $response['status']);
+    assert([] == $response['headers']);
+
+Implementing Handlers
+---------------------
+
+Client handlers are just PHP callables (functions or classes that have the
+``__invoke`` magic method). The callable accepts a request array and MUST
+return an instance of ``GuzzleHttp\Ring\Future\FutureArrayInterface`` so that
+the response can be used by both blocking and non-blocking consumers.
+
+Handlers need to follow a few simple rules:
+
+1. Do not throw exceptions. If an error is encountered, return an array that
+   contains the ``error`` key that maps to an ``\Exception`` value.
+2. If the request has a ``delay`` client option, then the handler should only
+   send the request after the specified delay time in seconds. Blocking
+   handlers may find it convenient to just let the
+   ``GuzzleHttp\Ring\Core::doSleep($request)`` function handle this for them.
+3. Always return an instance of ``GuzzleHttp\Ring\Future\FutureArrayInterface``.
+4. Complete any outstanding requests when the handler is destructed.
diff --git a/core/vendor/guzzlehttp/ringphp/docs/client_middleware.rst b/core/vendor/guzzlehttp/ringphp/docs/client_middleware.rst
new file mode 100644
index 0000000000000000000000000000000000000000..7c52c8a695093f5fdcf9453cf3951a0c0477875d
--- /dev/null
+++ b/core/vendor/guzzlehttp/ringphp/docs/client_middleware.rst
@@ -0,0 +1,165 @@
+=================
+Client Middleware
+=================
+
+Middleware intercepts requests before they are sent over the wire and can be
+used to add functionality to handlers.
+
+Modifying Requests
+------------------
+
+Let's say you wanted to modify requests before they are sent over the wire
+so that they always add specific headers. This can be accomplished by creating
+a function that accepts a handler and returns a new function that adds the
+composed behavior.
+
+.. code-block:: php
+
+    use GuzzleHttp\Ring\Client\CurlHandler;
+
+    $handler = new CurlHandler();
+
+    $addHeaderHandler = function (callable $handler, array $headers = []) {
+        return function (array $request) use ($handler, $headers) {
+            // Add our custom headers
+            foreach ($headers as $key => $value) {
+                $request['headers'][$key] = $value;
+            }
+
+            // Send the request using the handler and return the response.
+            return $handler($request);
+        }
+    };
+
+    // Create a new handler that adds headers to each request.
+    $handler = $addHeaderHandler($handler, [
+        'X-AddMe'       => 'hello',
+        'Authorization' => 'Basic xyz'
+    ]);
+
+    $response = $handler([
+        'http_method' => 'GET',
+        'headers'     => ['Host' => ['httpbin.org']
+    ]);
+
+Modifying Responses
+-------------------
+
+You can change a response as it's returned from a middleware. Remember that
+responses returned from an handler (including middleware) must implement
+``GuzzleHttp\Ring\Future\FutureArrayInterface``. In order to be a good citizen,
+you should not expect that the responses returned through your middleware will
+be completed synchronously. Instead, you should use the
+``GuzzleHttp\Ring\Core::proxy()`` function to modify the response when the
+underlying promise is resolved. This function is a helper function that makes it
+easy to create a new instance of ``FutureArrayInterface`` that wraps an existing
+``FutureArrayInterface`` object.
+
+Let's say you wanted to add headers to a response as they are returned from
+your middleware, but you want to make sure you aren't causing future
+responses to be dereferenced right away. You can achieve this by modifying the
+incoming request and using the ``Core::proxy`` function.
+
+.. code-block:: php
+
+    use GuzzleHttp\Ring\Core;
+    use GuzzleHttp\Ring\Client\CurlHandler;
+
+    $handler = new CurlHandler();
+
+    $responseHeaderHandler = function (callable $handler, array $headers) {
+        return function (array $request) use ($handler, $headers) {
+            // Send the request using the wrapped handler.
+            return Core::proxy($handler($request), function ($response) use ($headers) {
+                // Add the headers to the response when it is available.
+                foreach ($headers as $key => $value) {
+                    $response['headers'][$key] = (array) $value;
+                }
+                // Note that you can return a regular response array when using
+                // the proxy method.
+                return $response;
+            });
+        }
+    };
+
+    // Create a new handler that adds headers to each response.
+    $handler = $responseHeaderHandler($handler, ['X-Header' => 'hello!']);
+
+    $response = $handler([
+        'http_method' => 'GET',
+        'headers'     => ['Host' => ['httpbin.org']
+    ]);
+
+    assert($response['headers']['X-Header'] == 'hello!');
+
+Built-In Middleware
+-------------------
+
+RingPHP comes with a few basic client middlewares that modify requests
+and responses.
+
+Streaming Middleware
+~~~~~~~~~~~~~~~~~~~~
+
+If you want to send all requests with the ``streaming`` option to a specific
+handler but other requests to a different handler, then use the streaming
+middleware.
+
+.. code-block:: php
+
+    use GuzzleHttp\Ring\Client\CurlHandler;
+    use GuzzleHttp\Ring\Client\StreamHandler;
+    use GuzzleHttp\Ring\Client\Middleware;
+
+    $defaultHandler = new CurlHandler();
+    $streamingHandler = new StreamHandler();
+    $streamingHandler = Middleware::wrapStreaming(
+        $defaultHandler,
+        $streamingHandler
+    );
+
+    // Send the request using the streaming handler.
+    $response = $streamingHandler([
+        'http_method' => 'GET',
+        'headers'     => ['Host' => ['www.google.com'],
+        'stream'      => true
+    ]);
+
+    // Send the request using the default handler.
+    $response = $streamingHandler([
+        'http_method' => 'GET',
+        'headers'     => ['Host' => ['www.google.com']
+    ]);
+
+Future Middleware
+~~~~~~~~~~~~~~~~~
+
+If you want to send all requests with the ``future`` option to a specific
+handler but other requests to a different handler, then use the future
+middleware.
+
+.. code-block:: php
+
+    use GuzzleHttp\Ring\Client\CurlHandler;
+    use GuzzleHttp\Ring\Client\CurlMultiHandler;
+    use GuzzleHttp\Ring\Client\Middleware;
+
+    $defaultHandler = new CurlHandler();
+    $futureHandler = new CurlMultiHandler();
+    $futureHandler = Middleware::wrapFuture(
+        $defaultHandler,
+        $futureHandler
+    );
+
+    // Send the request using the blocking CurlHandler.
+    $response = $futureHandler([
+        'http_method' => 'GET',
+        'headers'     => ['Host' => ['www.google.com']
+    ]);
+
+    // Send the request using the non-blocking CurlMultiHandler.
+    $response = $futureHandler([
+        'http_method' => 'GET',
+        'headers'     => ['Host' => ['www.google.com'],
+        'future'      => true
+    ]);
diff --git a/core/vendor/guzzlehttp/ringphp/docs/conf.py b/core/vendor/guzzlehttp/ringphp/docs/conf.py
new file mode 100644
index 0000000000000000000000000000000000000000..c6404aa1e1453a433bb4667500aa2cb7edff4d79
--- /dev/null
+++ b/core/vendor/guzzlehttp/ringphp/docs/conf.py
@@ -0,0 +1,23 @@
+import sys, os
+import sphinx_rtd_theme
+from sphinx.highlighting import lexers
+from pygments.lexers.web import PhpLexer
+
+
+lexers['php'] = PhpLexer(startinline=True, linenos=1)
+lexers['php-annotations'] = PhpLexer(startinline=True, linenos=1)
+primary_domain = 'php'
+
+extensions = []
+templates_path = ['_templates']
+source_suffix = '.rst'
+master_doc = 'index'
+project = u'RingPHP'
+copyright = u'2014, Michael Dowling'
+version = '1.0.0-alpha'
+exclude_patterns = ['_build']
+
+html_title = "RingPHP"
+html_short_title = "RingPHP"
+html_theme = "sphinx_rtd_theme"
+html_theme_path = [sphinx_rtd_theme.get_html_theme_path()]
diff --git a/core/vendor/guzzlehttp/ringphp/docs/futures.rst b/core/vendor/guzzlehttp/ringphp/docs/futures.rst
new file mode 100644
index 0000000000000000000000000000000000000000..af29cb3780cddffef0534c9c53cbf47d2472e178
--- /dev/null
+++ b/core/vendor/guzzlehttp/ringphp/docs/futures.rst
@@ -0,0 +1,164 @@
+=======
+Futures
+=======
+
+Futures represent a computation that may have not yet completed. RingPHP
+uses hybrid of futures and promises to provide a consistent API that can be
+used for both blocking and non-blocking consumers.
+
+Promises
+--------
+
+You can get the result of a future when it is ready using the promise interface
+of a future. Futures expose a promise API via a ``then()`` method that utilizes
+`React's promise library <https://github.com/reactphp/promise>`_. You should
+use this API when you do not wish to block.
+
+.. code-block:: php
+
+    use GuzzleHttp\Ring\Client\CurlMultiHandler;
+
+    $request = [
+        'http_method' => 'GET',
+        'uri'         => '/',
+        'headers'     => ['host' => ['httpbin.org']]
+    ];
+
+    $response = $handler($request);
+
+    // Use the then() method to use the promise API of the future.
+    $response->then(function ($response) {
+        echo $response['status'];
+    });
+
+You can get the promise used by a future, an instance of
+``React\Promise\PromiseInterface``, by calling the ``promise()`` method.
+
+.. code-block:: php
+
+    $response = $handler($request);
+    $promise = $response->promise();
+    $promise->then(function ($response) {
+        echo $response['status'];
+    });
+
+This promise value can be used with React's
+`aggregate promise functions <https://github.com/reactphp/promise#functions>`_.
+
+Waiting
+-------
+
+You can wait on a future to complete and retrieve the value, or *dereference*
+the future, using the ``wait()`` method. Calling the ``wait()`` method of a
+future will block until the result is available. The result is then returned or
+an exception is thrown if and exception was encountered while waiting on the
+the result. Subsequent calls to dereference a future will return the previously
+completed result or throw the previously encountered exception. Futures can be
+cancelled, which stops the computation if possible.
+
+.. code-block:: php
+
+    use GuzzleHttp\Ring\Client\CurlMultiHandler;
+
+    $response = $handler([
+        'http_method' => 'GET',
+        'uri'         => '/',
+        'headers'     => ['host' => ['httpbin.org']]
+    ]);
+
+    // You can explicitly call block to wait on a result.
+    $realizedResponse = $response->wait();
+
+    // Future responses can be used like a regular PHP array.
+    echo $response['status'];
+
+In addition to explicitly calling the ``wait()`` function, using a future like
+a normal value will implicitly trigger the ``wait()`` function.
+
+Future Responses
+----------------
+
+RingPHP uses futures to return asynchronous responses immediately. Client
+handlers always return future responses that implement
+``GuzzleHttp\Ring\Future\ArrayFutureInterface``. These future responses act
+just like normal PHP associative arrays for blocking access and provide a
+promise interface for non-blocking access.
+
+.. code-block:: php
+
+    use GuzzleHttp\Ring\Client\CurlMultiHandler;
+
+    $handler = new CurlMultiHandler();
+
+    $request = [
+        'http_method'  => 'GET',
+        'uri'          => '/',
+        'headers'      => ['Host' => ['www.google.com']]
+    ];
+
+    $response = $handler($request);
+
+    // Use the promise API for non-blocking access to the response. The actual
+    // response value will be delivered to the promise.
+    $response->then(function ($response) {
+        echo $response['status'];
+    });
+
+    // You can wait (block) until the future is completed.
+    $response->wait();
+
+    // This will implicitly call wait(), and will block too!
+    $response['status'];
+
+.. important::
+
+    Futures that are not completed by the time the underlying handler is
+    destructed will be completed when the handler is shutting down.
+
+Cancelling
+----------
+
+Futures can be cancelled if they have not already been dereferenced.
+
+RingPHP futures are typically implemented with the
+``GuzzleHttp\Ring\Future\BaseFutureTrait``. This trait provides the cancellation
+functionality that should be common to most implementations. Cancelling a
+future response will try to prevent the request from sending over the wire.
+
+When a future is cancelled, the cancellation function is invoked and performs
+the actual work needed to cancel the request from sending if possible
+(e.g., telling an event loop to stop sending a request or to close a socket).
+If no cancellation function is provided, then a request cannot be cancelled. If
+a cancel function is provided, then it should accept the future as an argument
+and return true if the future was successfully cancelled or false if it could
+not be cancelled.
+
+Wrapping an existing Promise
+----------------------------
+
+You can easily create a future from any existing promise using the
+``GuzzleHttp\Ring\Future\FutureValue`` class. This class's constructor
+accepts a promise as the first argument, a wait function as the second
+argument, and a cancellation function as the third argument. The dereference
+function is used to force the promise to resolve (for example, manually ticking
+an event loop). The cancel function is optional and is used to tell the thing
+that created the promise that it can stop computing the result (for example,
+telling an event loop to stop transferring a request).
+
+.. code-block:: php
+
+    use GuzzleHttp\Ring\Future\FutureValue;
+    use React\Promise\Deferred;
+
+    $deferred = new Deferred();
+    $promise = $deferred->promise();
+
+    $f = new FutureValue(
+        $promise,
+        function () use ($deferred) {
+            // This function is responsible for blocking and resolving the
+            // promise. Here we pass in a reference to the deferred so that
+            // it can be resolved or rejected.
+            $deferred->resolve('foo');
+        }
+    );
diff --git a/core/vendor/guzzlehttp/ringphp/docs/index.rst b/core/vendor/guzzlehttp/ringphp/docs/index.rst
new file mode 100644
index 0000000000000000000000000000000000000000..892a50e2209acdf2106b125cb40bba09a4e56426
--- /dev/null
+++ b/core/vendor/guzzlehttp/ringphp/docs/index.rst
@@ -0,0 +1,24 @@
+=======
+RingPHP
+=======
+
+Provides low level APIs used to power HTTP clients and servers through a
+simple, PHP ``callable`` that accepts a request hash and returns a future
+response hash. RingPHP supports both synchronous and asynchronous
+workflows by utilizing both futures and `promises <https://github.com/reactphp/promise>`_.
+
+RingPHP is inspired by Clojure's `Ring <https://github.com/ring-clojure/ring>`_,
+but has been modified to accommodate clients and servers for both blocking
+and non-blocking requests.
+
+RingPHP is utilized as the handler layer in
+`Guzzle <http://guzzlephp.org>`_ 5.0+ to send HTTP requests.
+
+.. toctree::
+   :maxdepth: 1
+
+   spec
+   futures
+   client_middleware
+   client_handlers
+   testing
diff --git a/core/vendor/guzzlehttp/ringphp/docs/requirements.txt b/core/vendor/guzzlehttp/ringphp/docs/requirements.txt
new file mode 100644
index 0000000000000000000000000000000000000000..483a4e9600bd7a794750dd52ca24503fdf220133
--- /dev/null
+++ b/core/vendor/guzzlehttp/ringphp/docs/requirements.txt
@@ -0,0 +1 @@
+sphinx_rtd_theme
diff --git a/core/vendor/guzzlehttp/ringphp/docs/spec.rst b/core/vendor/guzzlehttp/ringphp/docs/spec.rst
new file mode 100644
index 0000000000000000000000000000000000000000..a8cdffad3eeb1e69267150d2a8ac6673980327d8
--- /dev/null
+++ b/core/vendor/guzzlehttp/ringphp/docs/spec.rst
@@ -0,0 +1,311 @@
+=============
+Specification
+=============
+
+RingPHP applications consist of handlers, requests, responses, and
+middleware.
+
+Handlers
+--------
+
+Handlers are implemented as a PHP ``callable`` that accept a request array and
+and return a response array (``GuzzleHttp\Ring\Future\FutureArrayInterface``).
+
+For example:
+
+.. code-block:: php
+
+    use GuzzleHttp\Ring\Future\CompletedFutureArray;
+
+    $mockHandler = function (array $request) {
+        return new CompletedFutureArray([
+            'status'  => 200,
+            'headers' => ['X-Foo' => ['Bar']],
+            'body'    => 'Hello!'
+         ]);
+    };
+
+This handler returns the same response each time it is invoked. All RingPHP
+handlers must return a ``GuzzleHttp\Ring\Future\FutureArrayInterface``. Use
+``GuzzleHttp\Ring\Future\CompletedFutureArray`` when returning a response that
+has already completed.
+
+Requests
+--------
+
+A request array is a PHP associative array that contains the configuration
+settings need to send a request.
+
+.. code-block:: php
+
+    $request = [
+        'http_method' => 'GET',
+        'scheme'      => 'http',
+        'uri'         => '/',
+        'body'        => 'hello!',
+        'client'      => ['timeout' => 1.0],
+        'headers'     => [
+            'host'  => ['httpbin.org'],
+            'X-Foo' => ['baz', 'bar']
+        ]
+    ];
+
+The request array contains the following key value pairs:
+
+request_method
+    (string, required) The HTTP request method, must be all caps corresponding
+    to a HTTP request method, such as ``GET`` or ``POST``.
+
+scheme
+    (string) The transport protocol, must be one of ``http`` or ``https``.
+    Defaults to ``http``.
+
+uri
+    (string, required) The request URI excluding the query string. Must
+    start with "/".
+
+query_string
+    (string) The query string, if present (e.g., ``foo=bar``).
+
+version
+    (string) HTTP protocol version. Defaults to ``1.1``.
+
+headers
+    (required, array) Associative array of headers. Each key represents the
+    header name. Each value contains an array of strings where each entry of
+    the array SHOULD be sent over the wire on a separate header line.
+
+body
+    (string, fopen resource, ``Iterator``, ``GuzzleHttp\Stream\StreamInterface``)
+    The body of the request, if present. Can be a string, resource returned
+    from fopen, an ``Iterator`` that yields chunks of data, an object that
+    implemented ``__toString``, or a ``GuzzleHttp\Stream\StreamInterface``.
+
+future
+    (bool, string) Controls the asynchronous behavior of a response.
+
+    Set to ``true`` or omit the ``future`` option to *request* that a request
+    will be completed asynchronously. Keep in mind that your request might not
+    necessarily be completed asynchronously based on the handler you are using.
+    Set the ``future`` option to ``false`` to request that a synchronous
+    response be provided.
+
+    You can provide a string value to specify fine-tuned future behaviors that
+    may be specific to the underlying handlers you are using. There are,
+    however, some common future options that handlers should implement if
+    possible.
+
+    lazy
+        Requests that the handler does not open and send the request
+        immediately, but rather only opens and sends the request once the
+        future is dereferenced. This option is often useful for sending a large
+        number of requests concurrently to allow handlers to take better
+        advantage of non-blocking transfers by first building up a pool of
+        requests.
+
+    If an handler does not implement or understand a provided string value,
+    then the request MUST be treated as if the user provided ``true`` rather
+    than the string value.
+
+    Future responses created by asynchronous handlers MUST attempt to complete
+    any outstanding future responses when they are destructed. Asynchronous
+    handlers MAY choose to automatically complete responses when the number
+    of outstanding requests reaches an handler-specific threshold.
+
+Client Specific Options
+~~~~~~~~~~~~~~~~~~~~~~~
+
+The following options are only used in ring client handlers.
+
+.. _client-options:
+
+client
+    (array) Associative array of client specific transfer options. The
+    ``client`` request key value pair can contain the following keys:
+
+    cert
+        (string, array) Set to a string to specify the path to a file
+        containing a PEM formatted SSL client side certificate. If a password
+        is required, then set ``cert`` to an array containing the path to the
+        PEM file in the first array element followed by the certificate
+        password in the second array element.
+
+    connect_timeout
+        (float) Float describing the number of seconds to wait while trying to
+        connect to a server. Use ``0`` to wait indefinitely (the default
+        behavior).
+
+    debug
+        (bool, fopen() resource) Set to true or set to a PHP stream returned by
+        fopen() to enable debug output with the handler used to send a request.
+        If set to ``true``, the output is written to PHP's STDOUT. If a PHP
+        ``fopen`` resource handle is provided, the output is written to the
+        stream.
+
+        "Debug output" is handler specific: different handlers will yield
+        different output and various various level of detail. For example, when
+        using cURL to transfer requests, cURL's `CURLOPT_VERBOSE <http://curl.haxx.se/libcurl/c/CURLOPT_VERBOSE.html>`_
+        will be used. When using the PHP stream wrapper, `stream notifications <http://php.net/manual/en/function.stream-notification-callback.php>`_
+        will be emitted.
+
+    decode_content
+        (bool) Specify whether or not ``Content-Encoding`` responses
+        (gzip, deflate, etc.) are automatically decoded. Set to ``true`` to
+        automatically decode encoded responses. Set to ``false`` to not decode
+        responses. By default, content is *not* decoded automatically.
+
+    delay
+        (int) The number of milliseconds to delay before sending the request.
+        This is often used for delaying before retrying a request. Handlers
+        SHOULD implement this if possible, but it is not a strict requirement.
+
+    progress
+        (function) Defines a function to invoke when transfer progress is made.
+        The function accepts the following arguments:
+
+        1. The total number of bytes expected to be downloaded
+        2. The number of bytes downloaded so far
+        3. The number of bytes expected to be uploaded
+        4. The number of bytes uploaded so far
+
+    proxy
+        (string, array) Pass a string to specify an HTTP proxy, or an
+        associative array to specify different proxies for different protocols
+        where the scheme is the key and the value is the proxy address.
+
+        .. code-block:: php
+
+            $request = [
+                'http_method' => 'GET',
+                'headers'     => ['host' => ['httpbin.org']],
+                'client'      => [
+                    // Use different proxies for different URI schemes.
+                    'proxy' => [
+                        'http'  => 'http://proxy.example.com:5100',
+                        'https' => 'https://proxy.example.com:6100'
+                    ]
+                ]
+            ];
+
+    ssl_key
+        (string, array) Specify the path to a file containing a private SSL key
+        in PEM format. If a password is required, then set to an array
+        containing the path to the SSL key in the first array element followed
+        by the password required for the certificate in the second element.
+
+    save_to
+        (string, fopen resource, ``GuzzleHttp\Stream\StreamInterface``)
+        Specifies where the body of the response is downloaded. Pass a string to
+        open a local file on disk and save the output to the file. Pass an fopen
+        resource to save the output to a PHP stream resource. Pass a
+        ``GuzzleHttp\Stream\StreamInterface`` to save the output to a Guzzle
+        StreamInterface. Omitting this option will typically save the body of a
+        response to a PHP temp stream.
+
+    stream
+        (bool) Set to true to stream a response rather than download it all
+        up-front. This option will only be utilized when the corresponding
+        handler supports it.
+
+    timeout
+        (float) Float describing the timeout of the request in seconds. Use 0 to
+        wait indefinitely (the default behavior).
+
+    verify
+        (bool, string) Describes the SSL certificate verification behavior of a
+        request. Set to true to enable SSL certificate verification using the
+        system CA bundle when available (the default). Set to false to disable
+        certificate verification (this is insecure!). Set to a string to provide
+        the path to a CA bundle on disk to enable verification using a custom
+        certificate.
+
+    version
+        (string) HTTP protocol version to use with the request.
+
+Server Specific Options
+~~~~~~~~~~~~~~~~~~~~~~~
+
+The following options are only used in ring server handlers.
+
+server_port
+    (integer) The port on which the request is being handled. This is only
+    used with ring servers, and is required.
+
+server_name
+    (string) The resolved server name, or the server IP address. Required when
+    using a Ring server.
+
+remote_addr
+    (string) The IP address of the client or the last proxy that sent the
+    request. Required when using a Ring server.
+
+Responses
+---------
+
+A response is an array-like object that implements
+``GuzzleHttp\Ring\Future\FutureArrayInterface``. Responses contain the
+following key value pairs:
+
+body
+    (string, fopen resource, ``Iterator``, ``GuzzleHttp\Stream\StreamInterface``)
+    The body of the response, if present. Can be a string, resource returned
+    from fopen, an ``Iterator`` that yields chunks of data, an object that
+    implemented ``__toString``, or a ``GuzzleHttp\Stream\StreamInterface``.
+
+effective_url
+    (string) The URL that returned the resulting response.
+
+error
+    (``\Exception``) Contains an exception describing any errors that were
+    encountered during the transfer.
+
+headers
+    (Required, array) Associative array of headers. Each key represents the
+    header name. Each value contains an array of strings where each entry of
+    the array is a header line. The headers array MAY be an empty array in the
+    event an error occurred before a response was received.
+
+reason
+    (string) Optional reason phrase. This option should be provided when the
+    reason phrase does not match the typical reason phrase associated with the
+    ``status`` code. See `RFC 7231 <http://tools.ietf.org/html/rfc7231#section-6.1>`_
+    for a list of HTTP reason phrases mapped to status codes.
+
+status
+    (Required, integer) The HTTP status code. The status code MAY be set to
+    ``null`` in the event an error occurred before a response was received
+    (e.g., a networking error).
+
+transfer_stats
+    (array) Provides an associative array of arbitrary transfer statistics if
+    provided by the underlying handler.
+
+version
+    (string) HTTP protocol version. Defaults to ``1.1``.
+
+Middleware
+----------
+
+Ring middleware augments the functionality of handlers by invoking them in the
+process of generating responses. Middleware is typically implemented as a
+higher-order function that takes one or more handlers as arguments followed by
+an optional associative array of options as the last argument, returning a new
+handler with the desired compound behavior.
+
+Here's an example of a middleware that adds a Content-Type header to each
+request.
+
+.. code-block:: php
+
+    use GuzzleHttp\Ring\Client\CurlHandler;
+    use GuzzleHttp\Ring\Core;
+
+    $contentTypeHandler = function(callable $handler, $contentType) {
+        return function (array $request) use ($handler, $contentType) {
+            return $handler(Core::setHeader('Content-Type', $contentType));
+        };
+    };
+
+    $baseHandler = new CurlHandler();
+    $wrappedHandler = $contentTypeHandler($baseHandler, 'text/html');
+    $response = $wrappedHandler([/** request hash **/]);
diff --git a/core/vendor/guzzlehttp/ringphp/docs/testing.rst b/core/vendor/guzzlehttp/ringphp/docs/testing.rst
new file mode 100644
index 0000000000000000000000000000000000000000..9df2562ed42817f4972d6ae57ba2dd86f27587e5
--- /dev/null
+++ b/core/vendor/guzzlehttp/ringphp/docs/testing.rst
@@ -0,0 +1,74 @@
+=======
+Testing
+=======
+
+RingPHP tests client handlers using `PHPUnit <https://phpunit.de/>`_ and a
+built-in node.js web server.
+
+Running Tests
+-------------
+
+First, install the dependencies using `Composer <https://getcomposer.org>`_.
+
+    composer.phar install
+
+Next, run the unit tests using ``Make``.
+
+    make test
+
+The tests are also run on Travis-CI on each commit: https://travis-ci.org/guzzle/guzzle-ring
+
+Test Server
+-----------
+
+Testing client handlers usually involves actually sending HTTP requests.
+RingPHP provides a node.js web server that returns canned responses and
+keep a list of the requests that have been received. The server can then
+be queried to get a list of the requests that were sent by the client so that
+you can ensure that the client serialized and transferred requests as intended.
+
+The server keeps a list of queued responses and returns responses that are
+popped off of the queue as HTTP requests are received. When there are not
+more responses to serve, the server returns a 500 error response.
+
+The test server uses the ``GuzzleHttp\Tests\Ring\Client\Server`` class to
+control the server.
+
+.. code-block:: php
+
+    use GuzzleHttp\Ring\Client\StreamHandler;
+    use GuzzleHttp\Tests\Ring\Client\Server;
+
+    // First return a 200 followed by a 404 response.
+    Server::enqueue([
+        ['status' => 200],
+        ['status' => 404]
+    ]);
+
+    $handler = new StreamHandler();
+
+    $response = $handler([
+        'http_method' => 'GET',
+        'headers'     => ['host' => [Server::$host]],
+        'uri'         => '/'
+    ]);
+
+    assert(200 == $response['status']);
+
+    $response = $handler([
+        'http_method' => 'HEAD',
+        'headers'     => ['host' => [Server::$host]],
+        'uri'         => '/'
+    ]);
+
+    assert(404 == $response['status']);
+
+After requests have been sent, you can get a list of the requests as they
+were sent over the wire to ensure they were sent correctly.
+
+.. code-block:: php
+
+    $received = Server::received();
+
+    assert('GET' == $received[0]['http_method']);
+    assert('HEAD' == $received[1]['http_method']);
diff --git a/core/vendor/guzzlehttp/ringphp/phpunit.xml.dist b/core/vendor/guzzlehttp/ringphp/phpunit.xml.dist
new file mode 100644
index 0000000000000000000000000000000000000000..1d192902507b9f1c21f28fbdebdf3ddcbea0167c
--- /dev/null
+++ b/core/vendor/guzzlehttp/ringphp/phpunit.xml.dist
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<phpunit bootstrap="./tests/bootstrap.php"
+         colors="true">
+    <testsuites>
+        <testsuite>
+            <directory>tests</directory>
+        </testsuite>
+    </testsuites>
+    <filter>
+        <whitelist>
+            <directory suffix=".php">src</directory>
+        </whitelist>
+    </filter>
+</phpunit>
diff --git a/core/vendor/guzzlehttp/ringphp/src/Client/ClientUtils.php b/core/vendor/guzzlehttp/ringphp/src/Client/ClientUtils.php
new file mode 100644
index 0000000000000000000000000000000000000000..2acf92eba0d04ecb9c7a1021513039931f47d9b6
--- /dev/null
+++ b/core/vendor/guzzlehttp/ringphp/src/Client/ClientUtils.php
@@ -0,0 +1,74 @@
+<?php
+namespace GuzzleHttp\Ring\Client;
+
+/**
+ * Client specific utility functions.
+ */
+class ClientUtils
+{
+    /**
+     * Returns the default cacert bundle for the current system.
+     *
+     * First, the openssl.cafile and curl.cainfo php.ini settings are checked.
+     * If those settings are not configured, then the common locations for
+     * bundles found on Red Hat, CentOS, Fedora, Ubuntu, Debian, FreeBSD, OS X
+     * and Windows are checked. If any of these file locations are found on
+     * disk, they will be utilized.
+     *
+     * Note: the result of this function is cached for subsequent calls.
+     *
+     * @return string
+     * @throws \RuntimeException if no bundle can be found.
+     */
+    public static function getDefaultCaBundle()
+    {
+        static $cached = null;
+        static $cafiles = [
+            // Red Hat, CentOS, Fedora (provided by the ca-certificates package)
+            '/etc/pki/tls/certs/ca-bundle.crt',
+            // Ubuntu, Debian (provided by the ca-certificates package)
+            '/etc/ssl/certs/ca-certificates.crt',
+            // FreeBSD (provided by the ca_root_nss package)
+            '/usr/local/share/certs/ca-root-nss.crt',
+            // OS X provided by homebrew (using the default path)
+            '/usr/local/etc/openssl/cert.pem',
+            // Windows?
+            'C:\\windows\\system32\\curl-ca-bundle.crt',
+            'C:\\windows\\curl-ca-bundle.crt',
+        ];
+
+        if ($cached) {
+            return $cached;
+        }
+
+        if ($ca = ini_get('openssl.cafile')) {
+            return $cached = $ca;
+        }
+
+        if ($ca = ini_get('curl.cainfo')) {
+            return $cached = $ca;
+        }
+
+        foreach ($cafiles as $filename) {
+            if (file_exists($filename)) {
+                return $cached = $filename;
+            }
+        }
+
+        throw new \RuntimeException(self::CA_ERR);
+    }
+
+    const CA_ERR = "
+No system CA bundle could be found in any of the the common system locations.
+PHP versions earlier than 5.6 are not properly configured to use the system's
+CA bundle by default. In order to verify peer certificates, you will need to
+supply the path on disk to a certificate bundle to the 'verify' request
+option: http://docs.guzzlephp.org/en/latest/clients.html#verify. If you do not
+need a specific certificate bundle, then Mozilla provides a commonly used CA
+bundle which can be downloaded here (provided by the maintainer of cURL):
+https://raw.githubusercontent.com/bagder/ca-bundle/master/ca-bundle.crt. Once
+you have a CA bundle available on disk, you can set the 'openssl.cafile' PHP
+ini setting to point to the path to the file, allowing you to omit the 'verify'
+request option. See http://curl.haxx.se/docs/sslcerts.html for more
+information.";
+}
diff --git a/core/vendor/guzzlehttp/ringphp/src/Client/CurlFactory.php b/core/vendor/guzzlehttp/ringphp/src/Client/CurlFactory.php
new file mode 100644
index 0000000000000000000000000000000000000000..22d9f5cccaececcc5e54990e702024f61882ddf8
--- /dev/null
+++ b/core/vendor/guzzlehttp/ringphp/src/Client/CurlFactory.php
@@ -0,0 +1,531 @@
+<?php
+namespace GuzzleHttp\Ring\Client;
+
+use GuzzleHttp\Ring\Core;
+use GuzzleHttp\Ring\Exception\ConnectException;
+use GuzzleHttp\Ring\Exception\RingException;
+use GuzzleHttp\Stream\LazyOpenStream;
+use GuzzleHttp\Stream\StreamInterface;
+
+/**
+ * Creates curl resources from a request
+ */
+class CurlFactory
+{
+    /**
+     * Creates a cURL handle, header resource, and body resource based on a
+     * transaction.
+     *
+     * @param array         $request Request hash
+     * @param null|resource $handle  Optionally provide a curl handle to modify
+     *
+     * @return array Returns an array of the curl handle, headers array, and
+     *               response body handle.
+     * @throws \RuntimeException when an option cannot be applied
+     */
+    public function __invoke(array $request, $handle = null)
+    {
+        $headers = [];
+        $options = $this->getDefaultOptions($request, $headers);
+        $this->applyMethod($request, $options);
+
+        if (isset($request['client'])) {
+            $this->applyHandlerOptions($request, $options);
+        }
+
+        $this->applyHeaders($request, $options);
+        unset($options['_headers']);
+
+        // Add handler options from the request's configuration options
+        if (isset($request['client']['curl'])) {
+            $options = $this->applyCustomCurlOptions(
+                $request['client']['curl'],
+                $options
+            );
+        }
+
+        if (!$handle) {
+            $handle = curl_init();
+        }
+
+        $body = $this->getOutputBody($request, $options);
+        curl_setopt_array($handle, $options);
+
+        return [$handle, &$headers, $body];
+    }
+
+    /**
+     * Creates a response hash from a cURL result.
+     *
+     * @param callable $handler  Handler that was used.
+     * @param array    $request  Request that sent.
+     * @param array    $response Response hash to update.
+     * @param array    $headers  Headers received during transfer.
+     * @param resource $body     Body fopen response.
+     *
+     * @return array
+     */
+    public static function createResponse(
+        callable $handler,
+        array $request,
+        array $response,
+        array $headers,
+        $body
+    ) {
+        if (isset($response['transfer_stats']['url'])) {
+            $response['effective_url'] = $response['transfer_stats']['url'];
+        }
+
+        if (isset($headers[0])) {
+            $startLine = explode(' ', array_shift($headers), 3);
+            // Trim out 100-Continue start-lines
+            if ($startLine[1] == '100') {
+                $startLine = explode(' ', array_shift($headers), 3);
+            }
+            $response['headers'] = Core::headersFromLines($headers);
+            $response['status'] = isset($startLine[1]) ? (int) $startLine[1] : null;
+            $response['reason'] = isset($startLine[2]) ? $startLine[2] : null;
+            $response['body'] = $body;
+            Core::rewindBody($response);
+        }
+
+        return !empty($response['curl']['errno']) || !isset($startLine[1])
+            ? self::createErrorResponse($handler, $request, $response)
+            : $response;
+    }
+
+    private static function createErrorResponse(
+        callable $handler,
+        array $request,
+        array $response
+    ) {
+        static $connectionErrors = [
+            CURLE_OPERATION_TIMEOUTED  => true,
+            CURLE_COULDNT_RESOLVE_HOST => true,
+            CURLE_COULDNT_CONNECT      => true,
+            CURLE_SSL_CONNECT_ERROR    => true,
+            CURLE_GOT_NOTHING          => true,
+        ];
+
+        // Retry when nothing is present or when curl failed to rewind.
+        if (!isset($response['err_message'])
+            && (empty($response['curl']['errno'])
+                || $response['curl']['errno'] == 65)
+        ) {
+            return self::retryFailedRewind($handler, $request, $response);
+        }
+
+        $message = isset($response['err_message'])
+            ? $response['err_message']
+            : sprintf('cURL error %s: %s',
+                $response['curl']['errno'],
+                isset($response['curl']['error'])
+                    ? $response['curl']['error']
+                    : 'See http://curl.haxx.se/libcurl/c/libcurl-errors.html');
+
+        $error = isset($response['curl']['errno'])
+            && isset($connectionErrors[$response['curl']['errno']])
+            ? new ConnectException($message)
+            : new RingException($message);
+
+        return $response + [
+            'status'  => null,
+            'reason'  => null,
+            'body'    => null,
+            'headers' => [],
+            'error'   => $error,
+        ];
+    }
+
+    private function getOutputBody(array $request, array &$options)
+    {
+        // Determine where the body of the response (if any) will be streamed.
+        if (isset($options[CURLOPT_WRITEFUNCTION])) {
+            return $request['client']['save_to'];
+        }
+
+        if (isset($options[CURLOPT_FILE])) {
+            return $options[CURLOPT_FILE];
+        }
+
+        if ($request['http_method'] != 'HEAD') {
+            // Create a default body if one was not provided
+            return $options[CURLOPT_FILE] = fopen('php://temp', 'w+');
+        }
+
+        return null;
+    }
+
+    private function getDefaultOptions(array $request, array &$headers)
+    {
+        $url = Core::url($request);
+
+        $options = [
+            '_headers'             => $request['headers'],
+            CURLOPT_CUSTOMREQUEST  => $request['http_method'],
+            CURLOPT_URL            => $url,
+            CURLOPT_RETURNTRANSFER => false,
+            CURLOPT_HEADER         => false,
+            CURLOPT_CONNECTTIMEOUT => 150,
+            CURLOPT_HEADERFUNCTION => function ($ch, $h) use (&$headers) {
+                $length = strlen($h);
+                if ($value = trim($h)) {
+                    $headers[] = trim($h);
+                }
+                return $length;
+            },
+        ];
+
+        if (defined('CURLOPT_PROTOCOLS')) {
+            $options[CURLOPT_PROTOCOLS] = CURLPROTO_HTTP | CURLPROTO_HTTPS;
+        }
+
+        return $options;
+    }
+
+    private function applyMethod(array $request, array &$options)
+    {
+        if (isset($request['body'])) {
+            $this->applyBody($request, $options);
+            return;
+        }
+
+        switch ($request['http_method']) {
+            case 'PUT':
+            case 'POST':
+                // See http://tools.ietf.org/html/rfc7230#section-3.3.2
+                if (!Core::hasHeader($request, 'Content-Length')) {
+                    $options[CURLOPT_HTTPHEADER][] = 'Content-Length: 0';
+                }
+                break;
+            case 'HEAD':
+                $options[CURLOPT_NOBODY] = true;
+                unset(
+                    $options[CURLOPT_WRITEFUNCTION],
+                    $options[CURLOPT_READFUNCTION],
+                    $options[CURLOPT_FILE],
+                    $options[CURLOPT_INFILE]
+                );
+        }
+    }
+
+    private function applyBody(array $request, array &$options)
+    {
+        $contentLength = Core::firstHeader($request, 'Content-Length');
+        $size = $contentLength !== null ? (int) $contentLength : null;
+
+        // Send the body as a string if the size is less than 1MB OR if the
+        // [client][curl][body_as_string] request value is set.
+        if (($size !== null && $size < 1000000) ||
+            isset($request['client']['curl']['body_as_string']) ||
+            is_string($request['body'])
+        ) {
+            $options[CURLOPT_POSTFIELDS] = Core::body($request);
+            // Don't duplicate the Content-Length header
+            $this->removeHeader('Content-Length', $options);
+            $this->removeHeader('Transfer-Encoding', $options);
+        } else {
+            $options[CURLOPT_UPLOAD] = true;
+            if ($size !== null) {
+                // Let cURL handle setting the Content-Length header
+                $options[CURLOPT_INFILESIZE] = $size;
+                $this->removeHeader('Content-Length', $options);
+            }
+            $this->addStreamingBody($request, $options);
+        }
+
+        // If the Expect header is not present, prevent curl from adding it
+        if (!Core::hasHeader($request, 'Expect')) {
+            $options[CURLOPT_HTTPHEADER][] = 'Expect:';
+        }
+
+        // cURL sometimes adds a content-type by default. Prevent this.
+        if (!Core::hasHeader($request, 'Content-Type')) {
+            $options[CURLOPT_HTTPHEADER][] = 'Content-Type:';
+        }
+    }
+
+    private function addStreamingBody(array $request, array &$options)
+    {
+        $body = $request['body'];
+
+        if ($body instanceof StreamInterface) {
+            $options[CURLOPT_READFUNCTION] = function ($ch, $fd, $length) use ($body) {
+                return (string) $body->read($length);
+            };
+            if (!isset($options[CURLOPT_INFILESIZE])) {
+                if ($size = $body->getSize()) {
+                    $options[CURLOPT_INFILESIZE] = $size;
+                }
+            }
+        } elseif (is_resource($body)) {
+            $options[CURLOPT_INFILE] = $body;
+        } elseif ($body instanceof \Iterator) {
+            $buf = '';
+            $options[CURLOPT_READFUNCTION] = function ($ch, $fd, $length) use ($body, &$buf) {
+                if ($body->valid()) {
+                    $buf .= $body->current();
+                    $body->next();
+                }
+                $result = (string) substr($buf, 0, $length);
+                $buf = substr($buf, $length);
+                return $result;
+            };
+        } else {
+            throw new \InvalidArgumentException('Invalid request body provided');
+        }
+    }
+
+    private function applyHeaders(array $request, array &$options)
+    {
+        foreach ($options['_headers'] as $name => $values) {
+            foreach ($values as $value) {
+                $options[CURLOPT_HTTPHEADER][] = "$name: $value";
+            }
+        }
+
+        // Remove the Accept header if one was not set
+        if (!Core::hasHeader($request, 'Accept')) {
+            $options[CURLOPT_HTTPHEADER][] = 'Accept:';
+        }
+    }
+
+    /**
+     * Takes an array of curl options specified in the 'curl' option of a
+     * request's configuration array and maps them to CURLOPT_* options.
+     *
+     * This method is only called when a  request has a 'curl' config setting.
+     *
+     * @param array $config  Configuration array of custom curl option
+     * @param array $options Array of existing curl options
+     *
+     * @return array Returns a new array of curl options
+     */
+    private function applyCustomCurlOptions(array $config, array $options)
+    {
+        $curlOptions = [];
+        foreach ($config as $key => $value) {
+            if (is_int($key)) {
+                $curlOptions[$key] = $value;
+            }
+        }
+
+        return $curlOptions + $options;
+    }
+
+    /**
+     * Remove a header from the options array.
+     *
+     * @param string $name    Case-insensitive header to remove
+     * @param array  $options Array of options to modify
+     */
+    private function removeHeader($name, array &$options)
+    {
+        foreach (array_keys($options['_headers']) as $key) {
+            if (!strcasecmp($key, $name)) {
+                unset($options['_headers'][$key]);
+                return;
+            }
+        }
+    }
+
+    /**
+     * Applies an array of request client options to a the options array.
+     *
+     * This method uses a large switch rather than double-dispatch to save on
+     * high overhead of calling functions in PHP.
+     */
+    private function applyHandlerOptions(array $request, array &$options)
+    {
+        foreach ($request['client'] as $key => $value) {
+            switch ($key) {
+            // Violating PSR-4 to provide more room.
+            case 'verify':
+
+                if ($value === false) {
+                    unset($options[CURLOPT_CAINFO]);
+                    $options[CURLOPT_SSL_VERIFYHOST] = 0;
+                    $options[CURLOPT_SSL_VERIFYPEER] = false;
+                    continue;
+                }
+
+                $options[CURLOPT_SSL_VERIFYHOST] = 2;
+                $options[CURLOPT_SSL_VERIFYPEER] = true;
+
+                if (is_string($value)) {
+                    $options[CURLOPT_CAINFO] = $value;
+                    if (!file_exists($value)) {
+                        throw new \InvalidArgumentException(
+                            "SSL CA bundle not found: $value"
+                        );
+                    }
+                }
+                break;
+
+            case 'decode_content':
+
+                if ($value === false) {
+                    continue;
+                }
+
+                $accept = Core::firstHeader($request, 'Accept-Encoding');
+                if ($accept) {
+                    $options[CURLOPT_ENCODING] = $accept;
+                } else {
+                    $options[CURLOPT_ENCODING] = '';
+                    // Don't let curl send the header over the wire
+                    $options[CURLOPT_HTTPHEADER][] = 'Accept-Encoding:';
+                }
+                break;
+
+            case 'save_to':
+
+                if (is_string($value)) {
+                    $value = new LazyOpenStream($value, 'w+');
+                }
+
+                if ($value instanceof StreamInterface) {
+                    $options[CURLOPT_WRITEFUNCTION] =
+                        function ($ch, $write) use ($value) {
+                            return $value->write($write);
+                        };
+                } elseif (is_resource($value)) {
+                    $options[CURLOPT_FILE] = $value;
+                } else {
+                    throw new \InvalidArgumentException('save_to must be a '
+                        . 'GuzzleHttp\Stream\StreamInterface or resource');
+                }
+                break;
+
+            case 'timeout':
+
+                $options[CURLOPT_TIMEOUT_MS] = $value * 1000;
+                break;
+
+            case 'connect_timeout':
+
+                $options[CURLOPT_CONNECTTIMEOUT_MS] = $value * 1000;
+                break;
+
+            case 'proxy':
+
+                if (!is_array($value)) {
+                    $options[CURLOPT_PROXY] = $value;
+                } elseif (isset($request['scheme'])) {
+                    $scheme = $request['scheme'];
+                    if (isset($value[$scheme])) {
+                        $options[CURLOPT_PROXY] = $value[$scheme];
+                    }
+                }
+                break;
+
+            case 'cert':
+
+                if (is_array($value)) {
+                    $options[CURLOPT_SSLCERTPASSWD] = $value[1];
+                    $value = $value[0];
+                }
+
+                if (!file_exists($value)) {
+                    throw new \InvalidArgumentException(
+                        "SSL certificate not found: {$value}"
+                    );
+                }
+
+                $options[CURLOPT_SSLCERT] = $value;
+                break;
+
+            case 'ssl_key':
+
+                if (is_array($value)) {
+                    $options[CURLOPT_SSLKEYPASSWD] = $value[1];
+                    $value = $value[0];
+                }
+
+                if (!file_exists($value)) {
+                    throw new \InvalidArgumentException(
+                        "SSL private key not found: {$value}"
+                    );
+                }
+
+                $options[CURLOPT_SSLKEY] = $value;
+                break;
+
+            case 'progress':
+
+                if (!is_callable($value)) {
+                    throw new \InvalidArgumentException(
+                        'progress client option must be callable'
+                    );
+                }
+
+                $options[CURLOPT_NOPROGRESS] = false;
+                $options[CURLOPT_PROGRESSFUNCTION] =
+                    function () use ($value) {
+                        $args = func_get_args();
+                        // PHP 5.5 pushed the handle onto the start of the args
+                        if (is_resource($args[0])) {
+                            array_shift($args);
+                        }
+                        call_user_func_array($value, $args);
+                    };
+                break;
+
+            case 'debug':
+
+                if ($value) {
+                    $options[CURLOPT_STDERR] = Core::getDebugResource($value);
+                    $options[CURLOPT_VERBOSE] = true;
+                }
+                break;
+            }
+        }
+    }
+
+    /**
+     * This function ensures that a response was set on a transaction. If one
+     * was not set, then the request is retried if possible. This error
+     * typically means you are sending a payload, curl encountered a
+     * "Connection died, retrying a fresh connect" error, tried to rewind the
+     * stream, and then encountered a "necessary data rewind wasn't possible"
+     * error, causing the request to be sent through curl_multi_info_read()
+     * without an error status.
+     */
+    private static function retryFailedRewind(
+        callable $handler,
+        array $request,
+        array $response
+    ) {
+        // If there is no body, then there is some other kind of issue. This
+        // is weird and should probably never happen.
+        if (!isset($request['body'])) {
+            $response['err_message'] = 'No response was received for a request '
+                . 'with no body. This could mean that you are saturating your '
+                . 'network.';
+            return self::createErrorResponse($handler, $request, $response);
+        }
+
+        if (!Core::rewindBody($request)) {
+            $response['err_message'] = 'The connection unexpectedly failed '
+                . 'without providing an error. The request would have been '
+                . 'retried, but attempting to rewind the request body failed.';
+            return self::createErrorResponse($handler, $request, $response);
+        }
+
+        // Retry no more than 3 times before giving up.
+        if (!isset($request['curl']['retries'])) {
+            $request['curl']['retries'] = 1;
+        } elseif ($request['curl']['retries'] == 2) {
+            $response['err_message'] = 'The cURL request was retried 3 times '
+                . 'and did no succeed. cURL was unable to rewind the body of '
+                . 'the request and subsequent retries resulted in the same '
+                . 'error. Turn on the debug option to see what went wrong. '
+                . 'See https://bugs.php.net/bug.php?id=47204 for more information.';
+            return self::createErrorResponse($handler, $request, $response);
+        } else {
+            $request['curl']['retries']++;
+        }
+
+        return $handler($request);
+    }
+}
diff --git a/core/vendor/guzzlehttp/ringphp/src/Client/CurlHandler.php b/core/vendor/guzzlehttp/ringphp/src/Client/CurlHandler.php
new file mode 100644
index 0000000000000000000000000000000000000000..d0323d88a9cbe1beb2c4c83f95f831ff1186d5ef
--- /dev/null
+++ b/core/vendor/guzzlehttp/ringphp/src/Client/CurlHandler.php
@@ -0,0 +1,117 @@
+<?php
+namespace GuzzleHttp\Ring\Client;
+
+use GuzzleHttp\Ring\Future\CompletedFutureArray;
+use GuzzleHttp\Ring\Core;
+
+/**
+ * HTTP handler that uses cURL easy handles as a transport layer.
+ *
+ * Requires PHP 5.5+
+ *
+ * When using the CurlHandler, custom curl options can be specified as an
+ * associative array of curl option constants mapping to values in the
+ * **curl** key of the "client" key of the request.
+ */
+class CurlHandler
+{
+    /** @var callable */
+    private $factory;
+
+    /** @var array Array of curl easy handles */
+    private $handles = [];
+
+    /** @var array Array of owned curl easy handles */
+    private $ownedHandles = [];
+
+    /** @var int Total number of idle handles to keep in cache */
+    private $maxHandles;
+
+    /**
+     * Accepts an associative array of options:
+     *
+     * - factory: Optional callable factory used to create cURL handles.
+     *   The callable is passed a request hash when invoked, and returns an
+     *   array of the curl handle, headers resource, and body resource.
+     * - max_handles: Maximum number of idle handles (defaults to 5).
+     *
+     * @param array $options Array of options to use with the handler
+     */
+    public function __construct(array $options = [])
+    {
+        $this->handles = $this->ownedHandles = [];
+        $this->factory = isset($options['handle_factory'])
+            ? $options['handle_factory']
+            : new CurlFactory();
+        $this->maxHandles = isset($options['max_handles'])
+            ? $options['max_handles']
+            : 5;
+    }
+
+    public function __destruct()
+    {
+        foreach ($this->handles as $handle) {
+            if (is_resource($handle)) {
+                curl_close($handle);
+            }
+        }
+    }
+
+    public function __invoke(array $request)
+    {
+        $factory = $this->factory;
+
+        // Ensure headers are by reference. They're updated elsewhere.
+        $result = $factory($request, $this->checkoutEasyHandle());
+        $h = $result[0];
+        $hd =& $result[1];
+        $bd = $result[2];
+        Core::doSleep($request);
+        curl_exec($h);
+        $response = ['transfer_stats' => curl_getinfo($h)];
+        $response['curl']['error'] = curl_error($h);
+        $response['curl']['errno'] = curl_errno($h);
+        $this->releaseEasyHandle($h);
+
+        return new CompletedFutureArray(
+            CurlFactory::createResponse($this, $request, $response, $hd, $bd)
+        );
+    }
+
+    private function checkoutEasyHandle()
+    {
+        // Find an unused handle in the cache
+        if (false !== ($key = array_search(false, $this->ownedHandles, true))) {
+            $this->ownedHandles[$key] = true;
+            return $this->handles[$key];
+        }
+
+        // Add a new handle
+        $handle = curl_init();
+        $id = (int) $handle;
+        $this->handles[$id] = $handle;
+        $this->ownedHandles[$id] = true;
+
+        return $handle;
+    }
+
+    private function releaseEasyHandle($handle)
+    {
+        $id = (int) $handle;
+        if (count($this->ownedHandles) > $this->maxHandles) {
+            curl_close($this->handles[$id]);
+            unset($this->handles[$id], $this->ownedHandles[$id]);
+        } else {
+            // curl_reset doesn't clear these out for some reason
+            static $unsetValues = [
+                CURLOPT_HEADERFUNCTION   => null,
+                CURLOPT_WRITEFUNCTION    => null,
+                CURLOPT_READFUNCTION     => null,
+                CURLOPT_PROGRESSFUNCTION => null,
+            ];
+            curl_setopt_array($handle, $unsetValues);
+            curl_reset($handle);
+            $this->ownedHandles[$id] = false;
+        }
+    }
+}
diff --git a/core/vendor/guzzlehttp/ringphp/src/Client/CurlMultiHandler.php b/core/vendor/guzzlehttp/ringphp/src/Client/CurlMultiHandler.php
new file mode 100644
index 0000000000000000000000000000000000000000..8335aac1d21798aba8efbb8fa6359727f2750d46
--- /dev/null
+++ b/core/vendor/guzzlehttp/ringphp/src/Client/CurlMultiHandler.php
@@ -0,0 +1,239 @@
+<?php
+namespace GuzzleHttp\Ring\Client;
+
+use GuzzleHttp\Ring\Future\FutureArray;
+use React\Promise\Deferred;
+
+/**
+ * Returns an asynchronous response using curl_multi_* functions.
+ *
+ * This handler supports future responses and the "delay" request client
+ * option that can be used to delay before sending a request.
+ *
+ * When using the CurlMultiHandler, custom curl options can be specified as an
+ * associative array of curl option constants mapping to values in the
+ * **curl** key of the "client" key of the request.
+ */
+class CurlMultiHandler
+{
+    /** @var callable */
+    private $factory;
+    private $selectTimeout;
+    private $mh;
+    private $active;
+    private $handles = [];
+    private $delays = [];
+    private $maxHandles;
+
+    /**
+     * This handler accepts the following options:
+     *
+     * - mh: An optional curl_multi resource
+     * - handle_factory: An optional callable used to generate curl handle
+     *   resources. the callable accepts a request hash and returns an array
+     *   of the handle, headers file resource, and the body resource.
+     * - select_timeout: Optional timeout (in seconds) to block before timing
+     *   out while selecting curl handles. Defaults to 1 second.
+     * - max_handles: Optional integer representing the maximum number of
+     *   open requests. When this number is reached, the queued futures are
+     *   flushed.
+     *
+     * @param array $options
+     */
+    public function __construct(array $options = [])
+    {
+        $this->mh = isset($options['mh'])
+            ? $options['mh'] : curl_multi_init();
+        $this->factory = isset($options['handle_factory'])
+            ? $options['handle_factory'] : new CurlFactory();
+        $this->selectTimeout = isset($options['select_timeout'])
+            ? $options['select_timeout'] : 1;
+        $this->maxHandles = isset($options['max_handles'])
+            ? $options['max_handles'] : 100;
+    }
+
+    public function __destruct()
+    {
+        // Finish any open connections before terminating the script.
+        if ($this->handles) {
+            $this->execute();
+        }
+
+        if ($this->mh) {
+            curl_multi_close($this->mh);
+            $this->mh = null;
+        }
+    }
+
+    public function __invoke(array $request)
+    {
+        $factory = $this->factory;
+        $result = $factory($request);
+        $entry = [
+            'request'  => $request,
+            'response' => [],
+            'handle'   => $result[0],
+            'headers'  => &$result[1],
+            'body'     => $result[2],
+            'deferred' => new Deferred(),
+        ];
+
+        $id = (int) $result[0];
+
+        $future = new FutureArray(
+            $entry['deferred']->promise(),
+            [$this, 'execute'],
+            function () use ($id) {
+                return $this->cancel($id);
+            }
+        );
+
+        $this->addRequest($entry);
+
+        // Transfer outstanding requests if there are too many open handles.
+        if (count($this->handles) >= $this->maxHandles) {
+            $this->execute();
+        }
+
+        return $future;
+    }
+
+    /**
+     * Runs until all outstanding connections have completed.
+     */
+    public function execute()
+    {
+        do {
+
+            if ($this->active &&
+                curl_multi_select($this->mh, $this->selectTimeout) === -1
+            ) {
+                // Perform a usleep if a select returns -1.
+                // See: https://bugs.php.net/bug.php?id=61141
+                usleep(250);
+            }
+
+            // Add any delayed futures if needed.
+            if ($this->delays) {
+                $this->addDelays();
+            }
+
+            do {
+                $mrc = curl_multi_exec($this->mh, $this->active);
+            } while ($mrc === CURLM_CALL_MULTI_PERFORM);
+
+            $this->processMessages();
+
+            // If there are delays but no transfers, then sleep for a bit.
+            if (!$this->active && $this->delays) {
+                usleep(500);
+            }
+
+        } while ($this->active || $this->handles);
+    }
+
+    private function addRequest(array &$entry)
+    {
+        $id = (int) $entry['handle'];
+        $this->handles[$id] = $entry;
+
+        // If the request is a delay, then add the reques to the curl multi
+        // pool only after the specified delay.
+        if (isset($entry['request']['client']['delay'])) {
+            $this->delays[$id] = microtime(true) + ($entry['request']['client']['delay'] / 1000);
+        } elseif (empty($entry['request']['future'])) {
+            curl_multi_add_handle($this->mh, $entry['handle']);
+        } else {
+            curl_multi_add_handle($this->mh, $entry['handle']);
+            // "lazy" futures are only sent once the pool has many requests.
+            if ($entry['request']['future'] !== 'lazy') {
+                do {
+                    $mrc = curl_multi_exec($this->mh, $this->active);
+                } while ($mrc === CURLM_CALL_MULTI_PERFORM);
+                $this->processMessages();
+            }
+        }
+    }
+
+    private function removeProcessed($id)
+    {
+        if (isset($this->handles[$id])) {
+            curl_multi_remove_handle(
+                $this->mh,
+                $this->handles[$id]['handle']
+            );
+            curl_close($this->handles[$id]['handle']);
+            unset($this->handles[$id], $this->delays[$id]);
+        }
+    }
+
+    /**
+     * Cancels a handle from sending and removes references to it.
+     *
+     * @param int $id Handle ID to cancel and remove.
+     *
+     * @return bool True on success, false on failure.
+     */
+    private function cancel($id)
+    {
+        // Cannot cancel if it has been processed.
+        if (!isset($this->handles[$id])) {
+            return false;
+        }
+
+        $handle = $this->handles[$id]['handle'];
+        unset($this->delays[$id], $this->handles[$id]);
+        curl_multi_remove_handle($this->mh, $handle);
+        curl_close($handle);
+
+        return true;
+    }
+
+    private function addDelays()
+    {
+        $currentTime = microtime(true);
+
+        foreach ($this->delays as $id => $delay) {
+            if ($currentTime >= $delay) {
+                unset($this->delays[$id]);
+                curl_multi_add_handle(
+                    $this->mh,
+                    $this->handles[$id]['handle']
+                );
+            }
+        }
+    }
+
+    private function processMessages()
+    {
+        while ($done = curl_multi_info_read($this->mh)) {
+            $id = (int) $done['handle'];
+
+            if (!isset($this->handles[$id])) {
+                // Probably was cancelled.
+                continue;
+            }
+
+            $entry = $this->handles[$id];
+            $entry['response']['transfer_stats'] = curl_getinfo($done['handle']);
+
+            if ($done['result'] !== CURLM_OK) {
+                $entry['response']['curl']['errno'] = $done['result'];
+                if (function_exists('curl_strerror')) {
+                    $entry['response']['curl']['error'] = curl_strerror($done['result']);
+                }
+            }
+
+            $result = CurlFactory::createResponse(
+                $this,
+                $entry['request'],
+                $entry['response'],
+                $entry['headers'],
+                $entry['body']
+            );
+
+            $this->removeProcessed($id);
+            $entry['deferred']->resolve($result);
+        }
+    }
+}
diff --git a/core/vendor/guzzlehttp/ringphp/src/Client/Middleware.php b/core/vendor/guzzlehttp/ringphp/src/Client/Middleware.php
new file mode 100644
index 0000000000000000000000000000000000000000..6fa7318abae26d673d91626243f9ff0e43c443b7
--- /dev/null
+++ b/core/vendor/guzzlehttp/ringphp/src/Client/Middleware.php
@@ -0,0 +1,58 @@
+<?php
+namespace GuzzleHttp\Ring\Client;
+
+/**
+ * Provides basic middleware wrappers.
+ *
+ * If a middleware is more complex than a few lines of code, then it should
+ * be implemented in a class rather than a static method.
+ */
+class Middleware
+{
+    /**
+     * Sends future requests to a future compatible handler while sending all
+     * other requests to a default handler.
+     *
+     * When the "future" option is not provided on a request, any future responses
+     * are automatically converted to synchronous responses and block.
+     *
+     * @param callable $default Handler used for non-streaming responses
+     * @param callable $future  Handler used for future responses
+     *
+     * @return callable Returns the composed handler.
+     */
+    public static function wrapFuture(
+        callable $default,
+        callable $future
+    ) {
+        return function (array $request) use ($default, $future) {
+            return empty($request['client']['future'])
+                ? $default($request)
+                : $future($request);
+        };
+    }
+
+    /**
+     * Sends streaming requests to a streaming compatible handler while sendin
+     * all other requests to a default handler.
+     *
+     * This, for example, could be useful for taking advantage of the
+     * performance benefits of curl while still supporting true streaming
+     * through the StreamHandler.
+     *
+     * @param callable $default   Handler used for non-streaming responses
+     * @param callable $streaming Handler used for streaming responses
+     *
+     * @return callable Returns the composed handler.
+     */
+    public static function wrapStreaming(
+        callable $default,
+        callable $streaming
+    ) {
+        return function (array $request) use ($default, $streaming) {
+            return empty($request['client']['stream'])
+                ? $default($request)
+                : $streaming($request);
+        };
+    }
+}
diff --git a/core/vendor/guzzlehttp/ringphp/src/Client/MockHandler.php b/core/vendor/guzzlehttp/ringphp/src/Client/MockHandler.php
new file mode 100644
index 0000000000000000000000000000000000000000..56cc32da77f4b7fca6dc433709355b3d112aa38e
--- /dev/null
+++ b/core/vendor/guzzlehttp/ringphp/src/Client/MockHandler.php
@@ -0,0 +1,52 @@
+<?php
+namespace GuzzleHttp\Ring\Client;
+
+use GuzzleHttp\Ring\Core;
+use GuzzleHttp\Ring\Future\CompletedFutureArray;
+use GuzzleHttp\Ring\Future\FutureArrayInterface;
+
+/**
+ * Ring handler that returns a canned response or evaluated function result.
+ */
+class MockHandler
+{
+    /** @var callable|array|FutureArrayInterface */
+    private $result;
+
+    /**
+     * Provide an array or future to always return the same value. Provide a
+     * callable that accepts a request object and returns an array or future
+     * to dynamically create a response.
+     *
+     * @param array|FutureArrayInterface|callable $result Mock return value.
+     */
+    public function __construct($result)
+    {
+        $this->result = $result;
+    }
+
+    public function __invoke(array $request)
+    {
+        Core::doSleep($request);
+        $response = is_callable($this->result)
+            ? call_user_func($this->result, $request)
+            : $this->result;
+
+        if (is_array($response)) {
+            $response = new CompletedFutureArray($response + [
+                'status'        => null,
+                'body'          => null,
+                'headers'       => [],
+                'reason'        => null,
+                'effective_url' => null,
+            ]);
+        } elseif (!$response instanceof FutureArrayInterface) {
+            throw new \InvalidArgumentException(
+                'Response must be an array or FutureArrayInterface. Found '
+                . Core::describeType($request)
+            );
+        }
+
+        return $response;
+    }
+}
diff --git a/core/vendor/guzzlehttp/ringphp/src/Client/StreamHandler.php b/core/vendor/guzzlehttp/ringphp/src/Client/StreamHandler.php
new file mode 100644
index 0000000000000000000000000000000000000000..905b2b6d6664cde65413c243e69bcf2ff3b16843
--- /dev/null
+++ b/core/vendor/guzzlehttp/ringphp/src/Client/StreamHandler.php
@@ -0,0 +1,398 @@
+<?php
+namespace GuzzleHttp\Ring\Client;
+
+use GuzzleHttp\Ring\Core;
+use GuzzleHttp\Ring\Exception\ConnectException;
+use GuzzleHttp\Ring\Exception\RingException;
+use GuzzleHttp\Ring\Future\CompletedFutureArray;
+use GuzzleHttp\Stream\InflateStream;
+use GuzzleHttp\Stream\StreamInterface;
+use GuzzleHttp\Stream\Stream;
+use GuzzleHttp\Stream\Utils;
+
+/**
+ * RingPHP client handler that uses PHP's HTTP stream wrapper.
+ */
+class StreamHandler
+{
+    private $options;
+
+    public function __construct(array $options = [])
+    {
+        $this->options = $options;
+    }
+
+    public function __invoke(array $request)
+    {
+        $url = Core::url($request);
+        Core::doSleep($request);
+
+        try {
+            // Does not support the expect header.
+            $request = Core::removeHeader($request, 'Expect');
+            $stream = $this->createStream($url, $request, $headers);
+            return $this->createResponse($request, $url, $headers, $stream);
+        } catch (RingException $e) {
+            return $this->createErrorResponse($url, $e);
+        }
+    }
+
+    private function createResponse(array $request, $url, array $hdrs, $stream)
+    {
+        $parts = explode(' ', array_shift($hdrs), 3);
+        $response = [
+            'status'         => $parts[1],
+            'reason'         => isset($parts[2]) ? $parts[2] : null,
+            'headers'        => Core::headersFromLines($hdrs),
+            'effective_url'  => $url,
+        ];
+
+        $stream = $this->checkDecode($request, $response, $stream);
+
+        // If not streaming, then drain the response into a stream.
+        if (empty($request['client']['stream'])) {
+            $dest = isset($request['client']['save_to'])
+                ? $request['client']['save_to']
+                : fopen('php://temp', 'r+');
+            $stream = $this->drain($stream, $dest);
+        }
+
+        $response['body'] = $stream;
+
+        return new CompletedFutureArray($response);
+    }
+
+    private function checkDecode(array $request, array $response, $stream)
+    {
+        // Automatically decode responses when instructed.
+        if (!empty($request['client']['decode_content'])) {
+            switch (Core::firstHeader($response, 'Content-Encoding', true)) {
+                case 'gzip':
+                case 'deflate':
+                    $stream = new InflateStream(Stream::factory($stream));
+                    break;
+            }
+        }
+
+        return $stream;
+    }
+
+    /**
+     * Drains the stream into the "save_to" client option.
+     *
+     * @param resource                        $stream
+     * @param string|resource|StreamInterface $dest
+     *
+     * @return Stream
+     * @throws \RuntimeException when the save_to option is invalid.
+     */
+    private function drain($stream, $dest)
+    {
+        if (is_resource($stream)) {
+            if (!is_resource($dest)) {
+                $stream = Stream::factory($stream);
+            } else {
+                stream_copy_to_stream($stream, $dest);
+                fclose($stream);
+                rewind($dest);
+                return $dest;
+            }
+        }
+
+        // Stream the response into the destination stream
+        $dest = is_string($dest)
+            ? new Stream(Utils::open($dest, 'r+'))
+            : Stream::factory($dest);
+
+        Utils::copyToStream($stream, $dest);
+        $dest->seek(0);
+        $stream->close();
+
+        return $dest;
+    }
+
+    /**
+     * Creates an error response for the given stream.
+     *
+     * @param string        $url
+     * @param RingException $e
+     *
+     * @return array
+     */
+    private function createErrorResponse($url, RingException $e)
+    {
+        // Determine if the error was a networking error.
+        $message = $e->getMessage();
+
+        // This list can probably get more comprehensive.
+        if (strpos($message, 'getaddrinfo') // DNS lookup failed
+            || strpos($message, 'Connection refused')
+        ) {
+            $e = new ConnectException($e->getMessage(), 0, $e);
+        }
+
+        return [
+            'status'        => null,
+            'body'          => null,
+            'headers'       => [],
+            'effective_url' => $url,
+            'error'         => $e
+        ];
+    }
+
+    /**
+     * Create a resource and check to ensure it was created successfully
+     *
+     * @param callable $callback Callable that returns stream resource
+     *
+     * @return resource
+     * @throws \RuntimeException on error
+     */
+    private function createResource(callable $callback)
+    {
+        // Turn off error reporting while we try to initiate the request
+        $level = error_reporting(0);
+        $resource = call_user_func($callback);
+        error_reporting($level);
+
+        // If the resource could not be created, then grab the last error and
+        // throw an exception.
+        if (!is_resource($resource)) {
+            $message = 'Error creating resource: ';
+            foreach ((array) error_get_last() as $key => $value) {
+                $message .= "[{$key}] {$value} ";
+            }
+            throw new RingException(trim($message));
+        }
+
+        return $resource;
+    }
+
+    private function createStream(
+        $url,
+        array $request,
+        &$http_response_header
+    ) {
+        static $methods;
+        if (!$methods) {
+            $methods = array_flip(get_class_methods(__CLASS__));
+        }
+
+        // HTTP/1.1 streams using the PHP stream wrapper require a
+        // Connection: close header
+        if ((!isset($request['version']) || $request['version'] == '1.1')
+            && !Core::hasHeader($request, 'Connection')
+        ) {
+            $request['headers']['Connection'] = ['close'];
+        }
+
+        // Ensure SSL is verified by default
+        if (!isset($request['client']['verify'])) {
+            $request['client']['verify'] = true;
+        }
+
+        $params = [];
+        $options = $this->getDefaultOptions($request);
+
+        if (isset($request['client'])) {
+            foreach ($request['client'] as $key => $value) {
+                $method = "add_{$key}";
+                if (isset($methods[$method])) {
+                    $this->{$method}($request, $options, $value, $params);
+                }
+            }
+        }
+
+        return $this->createStreamResource(
+            $url,
+            $request,
+            $options,
+            $this->createContext($request, $options, $params),
+            $http_response_header
+        );
+    }
+
+    private function getDefaultOptions(array $request)
+    {
+        $headers = [];
+        foreach ($request['headers'] as $name => $value) {
+            foreach ((array) $value as $val) {
+                $headers[] = "$name: $val";
+            }
+        }
+
+        $context = [
+            'http' => [
+                'method'           => $request['http_method'],
+                'header'           => $headers,
+                'protocol_version' => '1.1',
+                'ignore_errors'    => true,
+                'follow_location'  => 0,
+            ],
+        ];
+
+        $body = Core::body($request);
+        if (isset($body)) {
+            $context['http']['content'] = $body;
+            // Prevent the HTTP handler from adding a Content-Type header.
+            if (!Core::hasHeader($request, 'Content-Type')) {
+                $context['http']['header'][] .= "Content-Type:";
+            }
+        }
+
+        return $context;
+    }
+
+    private function add_proxy(array $request, &$options, $value, &$params)
+    {
+        if (!is_array($value)) {
+            $options['http']['proxy'] = $value;
+        } else {
+            $scheme = isset($request['scheme']) ? $request['scheme'] : 'http';
+            if (isset($value[$scheme])) {
+                $options['http']['proxy'] = $value[$scheme];
+            }
+        }
+    }
+
+    private function add_timeout(array $request, &$options, $value, &$params)
+    {
+        $options['http']['timeout'] = $value;
+    }
+
+    private function add_verify(array $request, &$options, $value, &$params)
+    {
+        if ($value === true) {
+            // PHP 5.6 or greater will find the system cert by default. When
+            // < 5.6, use the Guzzle bundled cacert.
+            if (PHP_VERSION_ID < 50600) {
+                $options['ssl']['cafile'] = ClientUtils::getDefaultCaBundle();
+            }
+        } elseif (is_string($value)) {
+            $options['ssl']['cafile'] = $value;
+            if (!file_exists($value)) {
+                throw new RingException("SSL CA bundle not found: $value");
+            }
+        } elseif ($value === false) {
+            $options['ssl']['verify_peer'] = false;
+            return;
+        } else {
+            throw new RingException('Invalid verify request option');
+        }
+
+        $options['ssl']['verify_peer'] = true;
+        $options['ssl']['allow_self_signed'] = true;
+    }
+
+    private function add_cert(array $request, &$options, $value, &$params)
+    {
+        if (is_array($value)) {
+            $options['ssl']['passphrase'] = $value[1];
+            $value = $value[0];
+        }
+
+        if (!file_exists($value)) {
+            throw new RingException("SSL certificate not found: {$value}");
+        }
+
+        $options['ssl']['local_cert'] = $value;
+    }
+
+    private function add_progress(array $request, &$options, $value, &$params)
+    {
+        $fn = function ($code, $_, $_, $_, $transferred, $total) use ($value) {
+            if ($code == STREAM_NOTIFY_PROGRESS) {
+                $value($total, $transferred, null, null);
+            }
+        };
+
+        // Wrap the existing function if needed.
+        $params['notification'] = isset($params['notification'])
+            ? Core::callArray([$params['notification'], $fn])
+            : $fn;
+    }
+
+    private function add_debug(array $request, &$options, $value, &$params)
+    {
+        static $map = [
+            STREAM_NOTIFY_CONNECT       => 'CONNECT',
+            STREAM_NOTIFY_AUTH_REQUIRED => 'AUTH_REQUIRED',
+            STREAM_NOTIFY_AUTH_RESULT   => 'AUTH_RESULT',
+            STREAM_NOTIFY_MIME_TYPE_IS  => 'MIME_TYPE_IS',
+            STREAM_NOTIFY_FILE_SIZE_IS  => 'FILE_SIZE_IS',
+            STREAM_NOTIFY_REDIRECTED    => 'REDIRECTED',
+            STREAM_NOTIFY_PROGRESS      => 'PROGRESS',
+            STREAM_NOTIFY_FAILURE       => 'FAILURE',
+            STREAM_NOTIFY_COMPLETED     => 'COMPLETED',
+            STREAM_NOTIFY_RESOLVE       => 'RESOLVE',
+        ];
+
+        static $args = ['severity', 'message', 'message_code',
+            'bytes_transferred', 'bytes_max'];
+
+        $value = Core::getDebugResource($value);
+        $ident = $request['http_method'] . ' ' . Core::url($request);
+        $fn = function () use ($ident, $value, $map, $args) {
+            $passed = func_get_args();
+            $code = array_shift($passed);
+            fprintf($value, '<%s> [%s] ', $ident, $map[$code]);
+            foreach (array_filter($passed) as $i => $v) {
+                fwrite($value, $args[$i] . ': "' . $v . '" ');
+            }
+            fwrite($value, "\n");
+        };
+
+        // Wrap the existing function if needed.
+        $params['notification'] = isset($params['notification'])
+            ? Core::callArray([$params['notification'], $fn])
+            : $fn;
+    }
+
+    private function applyCustomOptions(array $request, array &$options)
+    {
+        if (!isset($request['client']['stream_context'])) {
+            return;
+        }
+
+        if (!is_array($request['client']['stream_context'])) {
+            throw new RingException('stream_context must be an array');
+        }
+
+        $options = array_replace_recursive(
+            $options,
+            $request['client']['stream_context']
+        );
+    }
+
+    private function createContext(array $request, array $options, array $params)
+    {
+        $this->applyCustomOptions($request, $options);
+        return $this->createResource(
+            function () use ($request, $options, $params) {
+                return stream_context_create($options, $params);
+            },
+            $request,
+            $options
+        );
+    }
+
+    private function createStreamResource(
+        $url,
+        array $request,
+        array $options,
+        $context,
+        &$http_response_header
+    ) {
+        return $this->createResource(
+            function () use ($url, &$http_response_header, $context) {
+                if (false === strpos($url, 'http')) {
+                    trigger_error("URL is invalid: {$url}", E_USER_WARNING);
+                    return null;
+                }
+                return fopen($url, 'r', null, $context);
+            },
+            $request,
+            $options
+        );
+    }
+}
diff --git a/core/vendor/guzzlehttp/ringphp/src/Core.php b/core/vendor/guzzlehttp/ringphp/src/Core.php
new file mode 100644
index 0000000000000000000000000000000000000000..112d755bd3fdd55df4ff2332dc04f7ecba510361
--- /dev/null
+++ b/core/vendor/guzzlehttp/ringphp/src/Core.php
@@ -0,0 +1,364 @@
+<?php
+namespace GuzzleHttp\Ring;
+
+use GuzzleHttp\Stream\StreamInterface;
+use GuzzleHttp\Ring\Future\FutureArrayInterface;
+use GuzzleHttp\Ring\Future\FutureArray;
+
+/**
+ * Provides core functionality of Ring handlers and middleware.
+ */
+class Core
+{
+    /**
+     * Returns a function that calls all of the provided functions, in order,
+     * passing the arguments provided to the composed function to each function.
+     *
+     * @param callable[] $functions Array of functions to proxy to.
+     *
+     * @return callable
+     */
+    public static function callArray(array $functions)
+    {
+        return function () use ($functions) {
+            $args = func_get_args();
+            foreach ($functions as $fn) {
+                call_user_func_array($fn, $args);
+            }
+        };
+    }
+
+    /**
+     * Gets an array of header line values from a message for a specific header
+     *
+     * This method searches through the "headers" key of a message for a header
+     * using a case-insensitive search.
+     *
+     * @param array  $message Request or response hash.
+     * @param string $header  Header to retrieve
+     *
+     * @return array
+     */
+    public static function headerLines($message, $header)
+    {
+        // Slight optimization for exact matches.
+        if (isset($message['headers'][$header])) {
+            return $message['headers'][$header];
+        }
+
+        // Check for message with no headers after the "fast" isset check.
+        if (!isset($message['headers'])) {
+            return [];
+        }
+
+        // Iterate and case-insensitively find the header by name.
+        foreach ($message['headers'] as $name => $value) {
+            if (!strcasecmp($name, $header)) {
+                return $value;
+            }
+        }
+
+        return [];
+    }
+
+    /**
+     * Gets a header value from a message as a string or null
+     *
+     * This method searches through the "headers" key of a message for a header
+     * using a case-insensitive search. The lines of the header are imploded
+     * using commas into a single string return value.
+     *
+     * @param array  $message Request or response hash.
+     * @param string $header  Header to retrieve
+     *
+     * @return string|null Returns the header string if found, or null if not.
+     */
+    public static function header($message, $header)
+    {
+        $match = self::headerLines($message, $header);
+        return $match ? implode(', ', $match) : null;
+    }
+
+    /**
+     * Returns the first header value from a message as a string or null. If
+     * a header line contains multiple values separated by a comma, then this
+     * function will return the first value in the list.
+     *
+     * @param array  $message Request or response hash.
+     * @param string $header  Header to retrieve
+     *
+     * @return string|null Returns the value as a string if found.
+     */
+    public static function firstHeader($message, $header)
+    {
+        $match = self::headerLines($message, $header);
+
+        if (!isset($match[0])) {
+            return null;
+        }
+
+        // Return the match itself if it is a single value.
+        if (!($pos = strpos($match[0], ','))) {
+            return $match[0];
+        }
+
+        return substr($match[0], 0, $pos);
+    }
+
+    /**
+     * Returns true if a message has the provided case-insensitive header.
+     *
+     * @param array  $message Request or response hash.
+     * @param string $header  Header to check
+     *
+     * @return bool
+     */
+    public static function hasHeader($message, $header)
+    {
+        return (bool) self::headerLines($message, $header);
+    }
+
+    /**
+     * Parses an array of header lines into an associative array of headers.
+     *
+     * @param array $lines Header lines array of strings in the following
+     *                     format: "Name: Value"
+     * @return array
+     */
+    public static function headersFromLines($lines)
+    {
+        $headers = [];
+
+        foreach ($lines as $line) {
+            $parts = explode(':', $line, 2);
+            $headers[trim($parts[0])][] = isset($parts[1])
+                ? trim($parts[1])
+                : null;
+        }
+
+        return $headers;
+    }
+
+    /**
+     * Removes a header from a message using a case-insensitive comparison.
+     *
+     * @param array  $message Message that contains 'headers'
+     * @param string $header  Header to remove
+     *
+     * @return array
+     */
+    public static function removeHeader(array $message, $header)
+    {
+        if (isset($message['headers'])) {
+            foreach (array_keys($message['headers']) as $key) {
+                if (!strcasecmp($header, $key)) {
+                    unset($message['headers'][$key]);
+                }
+            }
+        }
+
+        return $message;
+    }
+
+    /**
+     * Replaces any existing case insensitive headers with the given value.
+     *
+     * @param array  $message Message that contains 'headers'
+     * @param string $header  Header to set.
+     * @param array  $value   Value to set.
+     *
+     * @return array
+     */
+    public static function setHeader(array $message, $header, array $value)
+    {
+        $message = self::removeHeader($message, $header);
+        $message['headers'][$header] = $value;
+
+        return $message;
+    }
+
+    /**
+     * Creates a URL string from a request.
+     *
+     * If the "url" key is present on the request, it is returned, otherwise
+     * the url is built up based on the scheme, host, uri, and query_string
+     * request values.
+     *
+     * @param array $request Request to get the URL from
+     *
+     * @return string Returns the request URL as a string.
+     * @throws \InvalidArgumentException if no Host header is present.
+     */
+    public static function url(array $request)
+    {
+        if (isset($request['url'])) {
+            return $request['url'];
+        }
+
+        $uri = (isset($request['scheme'])
+                ? $request['scheme'] : 'http') . '://';
+
+        if ($host = self::header($request, 'host')) {
+            $uri .= $host;
+        } else {
+            throw new \InvalidArgumentException('No Host header was provided');
+        }
+
+        if (isset($request['uri'])) {
+            $uri .= $request['uri'];
+        }
+
+        if (isset($request['query_string'])) {
+            $uri .= '?' . $request['query_string'];
+        }
+
+        return $uri;
+    }
+
+    /**
+     * Reads the body of a message into a string.
+     *
+     * @param array|FutureArrayInterface $message Array containing a "body" key
+     *
+     * @return null|string Returns the body as a string or null if not set.
+     * @throws \InvalidArgumentException if a request body is invalid.
+     */
+    public static function body($message)
+    {
+        if (!isset($message['body'])) {
+            return null;
+        }
+
+        if ($message['body'] instanceof StreamInterface) {
+            return (string) $message['body'];
+        }
+
+        switch (gettype($message['body'])) {
+            case 'string':
+                return $message['body'];
+            case 'resource':
+                return stream_get_contents($message['body']);
+            case 'object':
+                if ($message['body'] instanceof \Iterator) {
+                    return implode('', iterator_to_array($message['body']));
+                } elseif (method_exists($message['body'], '__toString')) {
+                    return (string) $message['body'];
+                }
+            default:
+                throw new \InvalidArgumentException('Invalid request body: '
+                    . self::describeType($message['body']));
+        }
+    }
+
+    /**
+     * Rewind the body of the provided message if possible.
+     *
+     * @param array $message Message that contains a 'body' field.
+     *
+     * @return bool Returns true on success, false on failure
+     */
+    public static function rewindBody($message)
+    {
+        if ($message['body'] instanceof StreamInterface) {
+            return $message['body']->seek(0);
+        }
+
+        if ($message['body'] instanceof \Generator) {
+            return false;
+        }
+
+        if ($message['body'] instanceof \Iterator) {
+            $message['body']->rewind();
+            return true;
+        }
+
+        if (is_resource($message['body'])) {
+            return rewind($message['body']);
+        }
+
+        return is_string($message['body'])
+            || (is_object($message['body'])
+                && method_exists($message['body'], '__toString'));
+    }
+
+    /**
+     * Debug function used to describe the provided value type and class.
+     *
+     * @param mixed $input
+     *
+     * @return string Returns a string containing the type of the variable and
+     *                if a class is provided, the class name.
+     */
+    public static function describeType($input)
+    {
+        switch (gettype($input)) {
+            case 'object':
+                return 'object(' . get_class($input) . ')';
+            case 'array':
+                return 'array(' . count($input) . ')';
+            default:
+                ob_start();
+                var_dump($input);
+                // normalize float vs double
+                return str_replace('double(', 'float(', rtrim(ob_get_clean()));
+        }
+    }
+
+    /**
+     * Sleep for the specified amount of time specified in the request's
+     * ['client']['delay'] option if present.
+     *
+     * This function should only be used when a non-blocking sleep is not
+     * possible.
+     *
+     * @param array $request Request to sleep
+     */
+    public static function doSleep(array $request)
+    {
+        if (isset($request['client']['delay'])) {
+            usleep($request['client']['delay'] * 1000);
+        }
+    }
+
+    /**
+     * Returns a proxied future that modifies the dereferenced value of another
+     * future using a promise.
+     *
+     * @param FutureArrayInterface $future      Future to wrap with a new future
+     * @param callable    $onFulfilled Invoked when the future fulfilled
+     * @param callable    $onRejected  Invoked when the future rejected
+     * @param callable    $onProgress  Invoked when the future progresses
+     *
+     * @return FutureArray
+     */
+    public static function proxy(
+        FutureArrayInterface $future,
+        callable $onFulfilled = null,
+        callable $onRejected = null,
+        callable $onProgress = null
+    ) {
+        return new FutureArray(
+            $future->then($onFulfilled, $onRejected, $onProgress),
+            [$future, 'wait'],
+            [$future, 'cancel']
+        );
+    }
+
+    /**
+     * Returns a debug stream based on the provided variable.
+     *
+     * @param mixed $value Optional value
+     *
+     * @return resource
+     */
+    public static function getDebugResource($value = null)
+    {
+        if (is_resource($value)) {
+            return $value;
+        } elseif (defined('STDOUT')) {
+            return STDOUT;
+        } else {
+            return fopen('php://output', 'w');
+        }
+    }
+}
diff --git a/core/vendor/guzzlehttp/ringphp/src/Exception/CancelledException.php b/core/vendor/guzzlehttp/ringphp/src/Exception/CancelledException.php
new file mode 100644
index 0000000000000000000000000000000000000000..95b353acfde5f628daeb4ad3c50e48ebecc14a66
--- /dev/null
+++ b/core/vendor/guzzlehttp/ringphp/src/Exception/CancelledException.php
@@ -0,0 +1,7 @@
+<?php
+namespace GuzzleHttp\Ring\Exception;
+
+/**
+ * Marker interface for cancelled exceptions.
+ */
+interface CancelledException {}
diff --git a/core/vendor/guzzlehttp/ringphp/src/Exception/CancelledFutureAccessException.php b/core/vendor/guzzlehttp/ringphp/src/Exception/CancelledFutureAccessException.php
new file mode 100644
index 0000000000000000000000000000000000000000..4a14574df886c8937beb046709ae62f33e41542e
--- /dev/null
+++ b/core/vendor/guzzlehttp/ringphp/src/Exception/CancelledFutureAccessException.php
@@ -0,0 +1,4 @@
+<?php
+namespace GuzzleHttp\Ring\Exception;
+
+class CancelledFutureAccessException extends RingException implements CancelledException {}
diff --git a/core/vendor/guzzlehttp/ringphp/src/Exception/ConnectException.php b/core/vendor/guzzlehttp/ringphp/src/Exception/ConnectException.php
new file mode 100644
index 0000000000000000000000000000000000000000..925cd133c83936dda16351881afebafd03ba6ae3
--- /dev/null
+++ b/core/vendor/guzzlehttp/ringphp/src/Exception/ConnectException.php
@@ -0,0 +1,7 @@
+<?php
+namespace GuzzleHttp\Ring\Exception;
+
+/**
+ * Occurs when the connection failed.
+ */
+class ConnectException extends RingException {}
diff --git a/core/vendor/guzzlehttp/ringphp/src/Exception/RingException.php b/core/vendor/guzzlehttp/ringphp/src/Exception/RingException.php
new file mode 100644
index 0000000000000000000000000000000000000000..eed0daf7dd097bc3c5c7b517194fc08fbc2a1c50
--- /dev/null
+++ b/core/vendor/guzzlehttp/ringphp/src/Exception/RingException.php
@@ -0,0 +1,4 @@
+<?php
+namespace GuzzleHttp\Ring\Exception;
+
+class RingException extends \RuntimeException {};
diff --git a/core/vendor/guzzlehttp/ringphp/src/Future/BaseFutureTrait.php b/core/vendor/guzzlehttp/ringphp/src/Future/BaseFutureTrait.php
new file mode 100644
index 0000000000000000000000000000000000000000..0d15ed7c9550b93bb1a4e913daac2bd1e433e2f6
--- /dev/null
+++ b/core/vendor/guzzlehttp/ringphp/src/Future/BaseFutureTrait.php
@@ -0,0 +1,127 @@
+<?php
+namespace GuzzleHttp\Ring\Future;
+
+use GuzzleHttp\Ring\Exception\CancelledFutureAccessException;
+use GuzzleHttp\Ring\Exception\RingException;
+use React\Promise\PromiseInterface;
+
+/**
+ * Implements common future functionality built on top of promises.
+ */
+trait BaseFutureTrait
+{
+    /** @var callable */
+    private $waitfn;
+
+    /** @var callable */
+    private $cancelfn;
+
+    /** @var PromiseInterface */
+    private $wrappedPromise;
+
+    /** @var \Exception Error encountered. */
+    private $error;
+
+    /** @var mixed Result of the future */
+    private $result;
+
+    private $isRealized = false;
+
+    /**
+     * @param PromiseInterface $promise Promise to shadow with the future. Only
+     *                                  supply if the promise is not owned
+     *                                  by the deferred value.
+     * @param callable         $wait    Function that blocks until the deferred
+     *                                  computation has been resolved. This
+     *                                  function MUST resolve the deferred value
+     *                                  associated with the supplied promise.
+     * @param callable         $cancel  If possible and reasonable, provide a
+     *                                  function that can be used to cancel the
+     *                                  future from completing.
+     */
+    public function __construct(
+        PromiseInterface $promise,
+        callable $wait = null,
+        callable $cancel = null
+    ) {
+        $this->wrappedPromise = $promise;
+        $this->waitfn = $wait;
+        $this->cancelfn = $cancel;
+    }
+
+    public function wait()
+    {
+        if (!$this->isRealized) {
+            $this->addShadow();
+            if (!$this->isRealized && $this->waitfn) {
+                $this->invokeWait();
+            }
+            if (!$this->isRealized) {
+                $this->error = new RingException('Waiting did not resolve future');
+            }
+        }
+
+        if ($this->error) {
+            throw $this->error;
+        }
+
+        return $this->result;
+    }
+
+    public function promise()
+    {
+        return $this->wrappedPromise;
+    }
+
+    public function then(
+        callable $onFulfilled = null,
+        callable $onRejected = null,
+        callable $onProgress = null
+    ) {
+        return $this->wrappedPromise->then($onFulfilled, $onRejected, $onProgress);
+    }
+
+    public function cancel()
+    {
+        if (!$this->isRealized) {
+            $cancelfn = $this->cancelfn;
+            $this->waitfn = $this->cancelfn = null;
+            $this->isRealized = true;
+            $this->error = new CancelledFutureAccessException();
+            if ($cancelfn) {
+                $cancelfn($this);
+            }
+        }
+    }
+
+    private function addShadow()
+    {
+        // Get the result and error when the promise is resolved. Note that
+        // calling this function might trigger the resolution immediately.
+        $this->wrappedPromise->then(
+            function ($value) {
+                $this->isRealized = true;
+                $this->result = $value;
+                $this->waitfn = $this->cancelfn = null;
+            },
+            function ($error) {
+                $this->isRealized = true;
+                $this->error = $error;
+                $this->waitfn = $this->cancelfn = null;
+            }
+        );
+    }
+
+    private function invokeWait()
+    {
+        try {
+            $wait = $this->waitfn;
+            $this->waitfn = null;
+            $wait();
+        } catch (\Exception $e) {
+            // Defer can throw to reject.
+            $this->error = $e;
+            $this->isRealized = true;
+        }
+    }
+}
diff --git a/core/vendor/guzzlehttp/ringphp/src/Future/CompletedFutureArray.php b/core/vendor/guzzlehttp/ringphp/src/Future/CompletedFutureArray.php
new file mode 100644
index 0000000000000000000000000000000000000000..0a90c939f7b981155089dbc4e7fa437310ba5efd
--- /dev/null
+++ b/core/vendor/guzzlehttp/ringphp/src/Future/CompletedFutureArray.php
@@ -0,0 +1,43 @@
+<?php
+namespace GuzzleHttp\Ring\Future;
+
+/**
+ * Represents a future array that has been completed successfully.
+ */
+class CompletedFutureArray extends CompletedFutureValue implements FutureArrayInterface
+{
+    public function __construct(array $result)
+    {
+        parent::__construct($result);
+    }
+
+    public function offsetExists($offset)
+    {
+        return isset($this->result[$offset]);
+    }
+
+    public function offsetGet($offset)
+    {
+        return $this->result[$offset];
+    }
+
+    public function offsetSet($offset, $value)
+    {
+        $this->result[$offset] = $value;
+    }
+
+    public function offsetUnset($offset)
+    {
+        unset($this->result[$offset]);
+    }
+
+    public function count()
+    {
+        return count($this->result);
+    }
+
+    public function getIterator()
+    {
+        return new \ArrayIterator($this->result);
+    }
+}
diff --git a/core/vendor/guzzlehttp/ringphp/src/Future/CompletedFutureValue.php b/core/vendor/guzzlehttp/ringphp/src/Future/CompletedFutureValue.php
new file mode 100644
index 0000000000000000000000000000000000000000..0d25af72d4d8d37e119065a1da30b0d8132a5a91
--- /dev/null
+++ b/core/vendor/guzzlehttp/ringphp/src/Future/CompletedFutureValue.php
@@ -0,0 +1,57 @@
+<?php
+namespace GuzzleHttp\Ring\Future;
+
+use React\Promise\FulfilledPromise;
+use React\Promise\RejectedPromise;
+
+/**
+ * Represents a future value that has been resolved or rejected.
+ */
+class CompletedFutureValue implements FutureInterface
+{
+    protected $result;
+    protected $error;
+
+    private $cachedPromise;
+
+    /**
+     * @param mixed      $result Resolved result
+     * @param \Exception $e      Error. Pass a GuzzleHttp\Ring\Exception\CancelledFutureAccessException
+     *                           to mark the future as cancelled.
+     */
+    public function __construct($result, \Exception $e = null)
+    {
+        $this->result = $result;
+        $this->error = $e;
+    }
+
+    public function wait()
+    {
+        if ($this->error) {
+            throw $this->error;
+        }
+
+        return $this->result;
+    }
+
+    public function cancel() {}
+
+    public function promise()
+    {
+        if (!$this->cachedPromise) {
+            $this->cachedPromise = $this->error
+                ? new RejectedPromise($this->error)
+                : new FulfilledPromise($this->result);
+        }
+
+        return $this->cachedPromise;
+    }
+
+    public function then(
+        callable $onFulfilled = null,
+        callable $onRejected = null,
+        callable $onProgress = null
+    ) {
+        return $this->promise()->then($onFulfilled, $onRejected, $onProgress);
+    }
+}
diff --git a/core/vendor/guzzlehttp/ringphp/src/Future/FutureArray.php b/core/vendor/guzzlehttp/ringphp/src/Future/FutureArray.php
new file mode 100644
index 0000000000000000000000000000000000000000..3d64c9643ac154e25c0fedfac241f54e2e9148c2
--- /dev/null
+++ b/core/vendor/guzzlehttp/ringphp/src/Future/FutureArray.php
@@ -0,0 +1,40 @@
+<?php
+namespace GuzzleHttp\Ring\Future;
+
+/**
+ * Represents a future array value that when dereferenced returns an array.
+ */
+class FutureArray implements FutureArrayInterface
+{
+    use MagicFutureTrait;
+
+    public function offsetExists($offset)
+    {
+        return isset($this->_value[$offset]);
+    }
+
+    public function offsetGet($offset)
+    {
+        return $this->_value[$offset];
+    }
+
+    public function offsetSet($offset, $value)
+    {
+        $this->_value[$offset] = $value;
+    }
+
+    public function offsetUnset($offset)
+    {
+        unset($this->_value[$offset]);
+    }
+
+    public function count()
+    {
+        return count($this->_value);
+    }
+
+    public function getIterator()
+    {
+        return new \ArrayIterator($this->_value);
+    }
+}
diff --git a/core/vendor/guzzlehttp/ringphp/src/Future/FutureArrayInterface.php b/core/vendor/guzzlehttp/ringphp/src/Future/FutureArrayInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..58f5f7367069b10043a7e3661025ab788673b172
--- /dev/null
+++ b/core/vendor/guzzlehttp/ringphp/src/Future/FutureArrayInterface.php
@@ -0,0 +1,11 @@
+<?php
+namespace GuzzleHttp\Ring\Future;
+
+/**
+ * Future that provides array-like access.
+ */
+interface FutureArrayInterface extends
+    FutureInterface,
+    \ArrayAccess,
+    \Countable,
+    \IteratorAggregate {};
diff --git a/core/vendor/guzzlehttp/ringphp/src/Future/FutureInterface.php b/core/vendor/guzzlehttp/ringphp/src/Future/FutureInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..902e7768e0838f672dc4ed3c76027fd83c648334
--- /dev/null
+++ b/core/vendor/guzzlehttp/ringphp/src/Future/FutureInterface.php
@@ -0,0 +1,56 @@
+<?php
+namespace GuzzleHttp\Ring\Future;
+
+use React\Promise\PromiseInterface;
+use React\Promise\PromisorInterface;
+
+/**
+ * Represents the result of a computation that may not have completed yet.
+ *
+ * You can use the future in a blocking manner using the wait() function, or
+ * you can use a promise from the future to receive the result when the future
+ * has been resolved.
+ *
+ * When the future is dereferenced using wait(), the result of the computation
+ * is cached and returned for subsequent calls to wait(). If the result of the
+ * computation has not yet completed when wait() is called, the call to wait()
+ * will block until the future has completed.
+ */
+interface FutureInterface extends PromisorInterface
+{
+    /**
+     * Returns the result of the future either from cache or by blocking until
+     * it is complete.
+     *
+     * This method must block until the future has a result or is cancelled.
+     * Throwing an exception in the wait() method will mark the future as
+     * realized and will throw the exception each time wait() is called.
+     * Throwing an instance of GuzzleHttp\Ring\CancelledException will mark
+     * the future as realized, will not throw immediately, but will throw the
+     * exception if the future's wait() method is called again.
+     *
+     * @return mixed
+     */
+    public function wait();
+
+    /**
+     * Cancels the future, if possible.
+     */
+    public function cancel();
+
+    /**
+     * Create and return a promise that invokes the given methods when the
+     * future has a value, exception, or progress events.
+     *
+     * @param callable $onFulfilled Called when the promise is resolved.
+     * @param callable $onRejected  Called when the promise is rejected.
+     * @param callable $onProgress  Called on progress events.
+     *
+     * @return PromiseInterface
+     */
+    public function then(
+        callable $onFulfilled = null,
+        callable $onRejected = null,
+        callable $onProgress = null
+    );
+}
diff --git a/core/vendor/guzzlehttp/ringphp/src/Future/FutureValue.php b/core/vendor/guzzlehttp/ringphp/src/Future/FutureValue.php
new file mode 100644
index 0000000000000000000000000000000000000000..4cac9281b94cb3109f61d2ff045dd8a3dcb6fce1
--- /dev/null
+++ b/core/vendor/guzzlehttp/ringphp/src/Future/FutureValue.php
@@ -0,0 +1,12 @@
+<?php
+namespace GuzzleHttp\Ring\Future;
+
+/**
+ * Represents a future value that responds to wait() to retrieve the promised
+ * value, but can also return promises that are delivered the value when it is
+ * available.
+ */
+class FutureValue implements FutureInterface
+{
+    use BaseFutureTrait;
+}
diff --git a/core/vendor/guzzlehttp/ringphp/src/Future/MagicFutureTrait.php b/core/vendor/guzzlehttp/ringphp/src/Future/MagicFutureTrait.php
new file mode 100644
index 0000000000000000000000000000000000000000..58d779db49bf475fe06fc49ad831714f11054663
--- /dev/null
+++ b/core/vendor/guzzlehttp/ringphp/src/Future/MagicFutureTrait.php
@@ -0,0 +1,32 @@
+<?php
+namespace GuzzleHttp\Ring\Future;
+
+/**
+ * Implements common future functionality that is triggered when the result
+ * property is accessed via a magic __get method.
+ *
+ * @property mixed $_value Actual data used by the future. Accessing this
+ *     property will cause the future to block if needed.
+ */
+trait MagicFutureTrait
+{
+    use BaseFutureTrait;
+
+    /**
+     * This function handles retrieving the dereferenced result when requested.
+     *
+     * @param string $name Should always be "data" or an exception is thrown.
+     *
+     * @return mixed Returns the dereferenced data.
+     * @throws \RuntimeException
+     * @throws \GuzzleHttp\Ring\Exception\CancelledException
+     */
+    public function __get($name)
+    {
+        if ($name !== '_value') {
+            throw new \RuntimeException("Class has no {$name} property");
+        }
+
+        return $this->_value = $this->wait();
+    }
+}
diff --git a/core/vendor/guzzlehttp/ringphp/tests/Client/CurlFactoryTest.php b/core/vendor/guzzlehttp/ringphp/tests/Client/CurlFactoryTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..055e43a3a40ecc0e1e86660c777ed875b4c1cc8e
--- /dev/null
+++ b/core/vendor/guzzlehttp/ringphp/tests/Client/CurlFactoryTest.php
@@ -0,0 +1,714 @@
+<?php
+// Override curl_setopt_array() to get the last set curl options
+namespace GuzzleHttp\Ring\Client {
+    function curl_setopt_array($handle, array $options) {
+        if (!empty($_SERVER['curl_test'])) {
+            $_SERVER['_curl'] = $options;
+        } else {
+            unset($_SERVER['_curl']);
+        }
+        \curl_setopt_array($handle, $options);
+    }
+}
+
+namespace GuzzleHttp\Tests\Ring\Client {
+
+use GuzzleHttp\Ring\Client\CurlFactory;
+use GuzzleHttp\Ring\Client\CurlMultiHandler;
+use GuzzleHttp\Ring\Client\MockHandler;
+use GuzzleHttp\Ring\Core;
+use GuzzleHttp\Stream\FnStream;
+use GuzzleHttp\Stream\NoSeekStream;
+use GuzzleHttp\Stream\Stream;
+
+class CurlFactoryTest extends \PHPUnit_Framework_TestCase
+{
+    public static function setUpBeforeClass()
+    {
+        $_SERVER['curl_test'] = true;
+        unset($_SERVER['_curl']);
+    }
+
+    public static function tearDownAfterClass()
+    {
+        unset($_SERVER['_curl'], $_SERVER['curl_test']);
+    }
+
+    public function testCreatesCurlHandle()
+    {
+        Server::flush();
+        Server::enqueue([[
+            'status' => 200,
+            'headers' => [
+                'Foo' => ['Bar'],
+                'Baz' => ['bam'],
+                'Content-Length' => [2],
+            ],
+            'body' => 'hi',
+        ]]);
+
+        $stream = Stream::factory();
+
+        $request = [
+            'http_method' => 'PUT',
+            'headers' => [
+                'host' => [Server::$url],
+                'Hi'   => [' 123'],
+            ],
+            'body' => 'testing',
+            'client' => ['save_to' => $stream],
+        ];
+
+        $f = new CurlFactory();
+        $result = $f($request);
+        $this->assertInternalType('array', $result);
+        $this->assertCount(3, $result);
+        $this->assertInternalType('resource', $result[0]);
+        $this->assertInternalType('array', $result[1]);
+        $this->assertSame($stream, $result[2]);
+        curl_close($result[0]);
+
+        $this->assertEquals('PUT', $_SERVER['_curl'][CURLOPT_CUSTOMREQUEST]);
+        $this->assertEquals(
+            'http://http://127.0.0.1:8125/',
+            $_SERVER['_curl'][CURLOPT_URL]
+        );
+        // Sends via post fields when the request is small enough
+        $this->assertEquals('testing', $_SERVER['_curl'][CURLOPT_POSTFIELDS]);
+        $this->assertEquals(0, $_SERVER['_curl'][CURLOPT_RETURNTRANSFER]);
+        $this->assertEquals(0, $_SERVER['_curl'][CURLOPT_HEADER]);
+        $this->assertEquals(150, $_SERVER['_curl'][CURLOPT_CONNECTTIMEOUT]);
+        $this->assertInstanceOf('Closure', $_SERVER['_curl'][CURLOPT_HEADERFUNCTION]);
+
+        if (defined('CURLOPT_PROTOCOLS')) {
+            $this->assertEquals(
+                CURLPROTO_HTTP | CURLPROTO_HTTPS,
+                $_SERVER['_curl'][CURLOPT_PROTOCOLS]
+            );
+        }
+
+        $this->assertContains('Expect:', $_SERVER['_curl'][CURLOPT_HTTPHEADER]);
+        $this->assertContains('Accept:', $_SERVER['_curl'][CURLOPT_HTTPHEADER]);
+        $this->assertContains('Content-Type:', $_SERVER['_curl'][CURLOPT_HTTPHEADER]);
+        $this->assertContains('Hi:  123', $_SERVER['_curl'][CURLOPT_HTTPHEADER]);
+        $this->assertContains('host: http://127.0.0.1:8125/', $_SERVER['_curl'][CURLOPT_HTTPHEADER]);
+    }
+
+    public function testSendsHeadRequests()
+    {
+        Server::flush();
+        Server::enqueue([['status' => 200]]);
+        $a = new CurlMultiHandler();
+        $response = $a([
+            'http_method' => 'HEAD',
+            'headers' => ['host' => [Server::$host]],
+        ]);
+        $response->wait();
+        $this->assertEquals(true, $_SERVER['_curl'][CURLOPT_NOBODY]);
+        $checks = [CURLOPT_WRITEFUNCTION, CURLOPT_READFUNCTION, CURLOPT_FILE, CURLOPT_INFILE];
+        foreach ($checks as $check) {
+            $this->assertArrayNotHasKey($check, $_SERVER['_curl']);
+        }
+        $this->assertEquals('HEAD', Server::received()[0]['http_method']);
+    }
+
+    public function testCanAddCustomCurlOptions()
+    {
+        Server::flush();
+        Server::enqueue([['status' => 200]]);
+        $a = new CurlMultiHandler();
+        $a([
+            'http_method' => 'GET',
+            'headers'     => ['host' => [Server::$host]],
+            'client'      => ['curl' => [CURLOPT_LOW_SPEED_LIMIT => 10]],
+        ]);
+        $this->assertEquals(10, $_SERVER['_curl'][CURLOPT_LOW_SPEED_LIMIT]);
+    }
+
+    /**
+     * @expectedException \InvalidArgumentException
+     * @expectedExceptionMessage SSL CA bundle not found: /does/not/exist
+     */
+    public function testValidatesVerify()
+    {
+        $f = new CurlFactory();
+        $f([
+            'http_method' => 'GET',
+            'headers' => ['host' => ['foo.com']],
+            'client' => ['verify' => '/does/not/exist'],
+        ]);
+    }
+
+    public function testCanSetVerifyToFile()
+    {
+        $f = new CurlFactory();
+        $f([
+            'http_method' => 'GET',
+            'headers' => ['host' => ['foo.com']],
+            'client' => ['verify' => __FILE__],
+        ]);
+        $this->assertEquals(__FILE__, $_SERVER['_curl'][CURLOPT_CAINFO]);
+        $this->assertEquals(2, $_SERVER['_curl'][CURLOPT_SSL_VERIFYHOST]);
+        $this->assertEquals(true, $_SERVER['_curl'][CURLOPT_SSL_VERIFYPEER]);
+    }
+
+    public function testAddsVerifyAsTrue()
+    {
+        $f = new CurlFactory();
+        $f([
+            'http_method' => 'GET',
+            'headers' => ['host' => ['foo.com']],
+            'client' => ['verify' => true],
+        ]);
+        $this->assertEquals(2, $_SERVER['_curl'][CURLOPT_SSL_VERIFYHOST]);
+        $this->assertEquals(true, $_SERVER['_curl'][CURLOPT_SSL_VERIFYPEER]);
+        $this->assertArrayNotHasKey(CURLOPT_CAINFO, $_SERVER['_curl']);
+    }
+
+    public function testCanDisableVerify()
+    {
+        $f = new CurlFactory();
+        $f([
+            'http_method' => 'GET',
+            'headers' => ['host' => ['foo.com']],
+            'client' => ['verify' => false],
+        ]);
+        $this->assertEquals(0, $_SERVER['_curl'][CURLOPT_SSL_VERIFYHOST]);
+        $this->assertEquals(false, $_SERVER['_curl'][CURLOPT_SSL_VERIFYPEER]);
+    }
+
+    public function testAddsProxy()
+    {
+        $f = new CurlFactory();
+        $f([
+            'http_method' => 'GET',
+            'headers' => ['host' => ['foo.com']],
+            'client' => ['proxy' => 'http://bar.com'],
+        ]);
+        $this->assertEquals('http://bar.com', $_SERVER['_curl'][CURLOPT_PROXY]);
+    }
+
+    public function testAddsViaScheme()
+    {
+        $f = new CurlFactory();
+        $f([
+            'http_method' => 'GET',
+            'scheme' => 'http',
+            'headers' => ['host' => ['foo.com']],
+            'client' => [
+                'proxy' => ['http' => 'http://bar.com', 'https' => 'https://t'],
+            ],
+        ]);
+        $this->assertEquals('http://bar.com', $_SERVER['_curl'][CURLOPT_PROXY]);
+    }
+
+    /**
+     * @expectedException \InvalidArgumentException
+     * @expectedExceptionMessage SSL private key not found: /does/not/exist
+     */
+    public function testValidatesSslKey()
+    {
+        $f = new CurlFactory();
+        $f([
+            'http_method' => 'GET',
+            'headers' => ['host' => ['foo.com']],
+            'client' => ['ssl_key' => '/does/not/exist'],
+        ]);
+    }
+
+    public function testAddsSslKey()
+    {
+        $f = new CurlFactory();
+        $f([
+            'http_method' => 'GET',
+            'headers' => ['host' => ['foo.com']],
+            'client' => ['ssl_key' => __FILE__],
+        ]);
+        $this->assertEquals(__FILE__, $_SERVER['_curl'][CURLOPT_SSLKEY]);
+    }
+
+    public function testAddsSslKeyWithPassword()
+    {
+        $f = new CurlFactory();
+        $f([
+            'http_method' => 'GET',
+            'headers' => ['host' => ['foo.com']],
+            'client' => ['ssl_key' => [__FILE__, 'test']],
+        ]);
+        $this->assertEquals(__FILE__, $_SERVER['_curl'][CURLOPT_SSLKEY]);
+        $this->assertEquals('test', $_SERVER['_curl'][CURLOPT_SSLKEYPASSWD]);
+    }
+
+    /**
+     * @expectedException \InvalidArgumentException
+     * @expectedExceptionMessage SSL certificate not found: /does/not/exist
+     */
+    public function testValidatesCert()
+    {
+        $f = new CurlFactory();
+        $f([
+            'http_method' => 'GET',
+            'headers' => ['host' => ['foo.com']],
+            'client' => ['cert' => '/does/not/exist'],
+        ]);
+    }
+
+    public function testAddsCert()
+    {
+        $f = new CurlFactory();
+        $f([
+            'http_method' => 'GET',
+            'headers' => ['host' => ['foo.com']],
+            'client' => ['cert' => __FILE__],
+        ]);
+        $this->assertEquals(__FILE__, $_SERVER['_curl'][CURLOPT_SSLCERT]);
+    }
+
+    public function testAddsCertWithPassword()
+    {
+        $f = new CurlFactory();
+        $f([
+            'http_method' => 'GET',
+            'headers' => ['host' => ['foo.com']],
+            'client' => ['cert' => [__FILE__, 'test']],
+        ]);
+        $this->assertEquals(__FILE__, $_SERVER['_curl'][CURLOPT_SSLCERT]);
+        $this->assertEquals('test', $_SERVER['_curl'][CURLOPT_SSLCERTPASSWD]);
+    }
+
+    /**
+     * @expectedException \InvalidArgumentException
+     * @expectedExceptionMessage progress client option must be callable
+     */
+    public function testValidatesProgress()
+    {
+        $f = new CurlFactory();
+        $f([
+            'http_method' => 'GET',
+            'headers' => ['host' => ['foo.com']],
+            'client' => ['progress' => 'foo'],
+        ]);
+    }
+
+    public function testEmitsDebugInfoToStream()
+    {
+        $res = fopen('php://memory', 'r+');
+        Server::flush();
+        Server::enqueue([['status' => 200]]);
+        $a = new CurlMultiHandler();
+        $response = $a([
+            'http_method' => 'HEAD',
+            'headers'     => ['host' => [Server::$host]],
+            'client'      => ['debug' => $res],
+        ]);
+        $response->wait();
+        rewind($res);
+        $output = str_replace("\r", '', stream_get_contents($res));
+        $this->assertContains(
+            "> HEAD / HTTP/1.1\nhost: 127.0.0.1:8125\n\n",
+            $output
+        );
+        $this->assertContains("< HTTP/1.1 200", $output);
+        fclose($res);
+    }
+
+    public function testEmitsProgressToFunction()
+    {
+        Server::flush();
+        Server::enqueue([['status' => 200]]);
+        $a = new CurlMultiHandler();
+        $called = [];
+        $response = $a([
+            'http_method' => 'HEAD',
+            'headers'     => ['host' => [Server::$host]],
+            'client'      => [
+                'progress' => function () use (&$called) {
+                    $called[] = func_get_args();
+                },
+            ],
+        ]);
+        $response->wait();
+        $this->assertNotEmpty($called);
+        foreach ($called as $call) {
+            $this->assertCount(4, $call);
+        }
+    }
+
+    private function addDecodeResponse($withEncoding = true)
+    {
+        $content = gzencode('test');
+        $response  = [
+            'status'  => 200,
+            'reason'  => 'OK',
+            'headers' => ['Content-Length' => [strlen($content)]],
+            'body'    => $content,
+        ];
+
+        if ($withEncoding) {
+            $response['headers']['Content-Encoding'] = ['gzip'];
+        }
+
+        Server::flush();
+        Server::enqueue([$response]);
+
+        return $content;
+    }
+
+    public function testDecodesGzippedResponses()
+    {
+        $this->addDecodeResponse();
+        $handler = new CurlMultiHandler();
+        $response = $handler([
+            'http_method' => 'GET',
+            'headers'     => ['host' => [Server::$host]],
+            'client'      => ['decode_content' => true],
+        ]);
+        $response->wait();
+        $this->assertEquals('test', Core::body($response));
+        $this->assertEquals('', $_SERVER['_curl'][CURLOPT_ENCODING]);
+        $sent = Server::received()[0];
+        $this->assertNull(Core::header($sent, 'Accept-Encoding'));
+    }
+
+    public function testDecodesGzippedResponsesWithHeader()
+    {
+        $this->addDecodeResponse();
+        $handler = new CurlMultiHandler();
+        $response = $handler([
+            'http_method' => 'GET',
+            'headers'     => [
+                'host'            => [Server::$host],
+                'Accept-Encoding' => ['gzip'],
+            ],
+            'client' => ['decode_content' => true],
+        ]);
+        $response->wait();
+        $this->assertEquals('gzip', $_SERVER['_curl'][CURLOPT_ENCODING]);
+        $sent = Server::received()[0];
+        $this->assertEquals('gzip', Core::header($sent, 'Accept-Encoding'));
+        $this->assertEquals('test', Core::body($response));
+    }
+
+    public function testDoesNotForceDecode()
+    {
+        $content = $this->addDecodeResponse();
+        $handler = new CurlMultiHandler();
+        $response = $handler([
+            'http_method' => 'GET',
+            'headers'     => ['host' => [Server::$host]],
+            'client'      => ['decode_content' => false],
+        ]);
+        $response->wait();
+        $sent = Server::received()[0];
+        $this->assertNull(Core::header($sent, 'Accept-Encoding'));
+        $this->assertEquals($content, Core::body($response));
+    }
+
+    /**
+     * @expectedException \InvalidArgumentException
+     */
+    public function testValidatesSaveTo()
+    {
+        $handler = new CurlMultiHandler();
+        $handler([
+            'http_method' => 'GET',
+            'headers'     => ['host' => [Server::$host]],
+            'client'      => ['save_to' => true],
+        ]);
+    }
+
+    public function testSavesToStream()
+    {
+        $stream = fopen('php://memory', 'r+');
+        $this->addDecodeResponse();
+        $handler = new CurlMultiHandler();
+        $response = $handler([
+            'http_method' => 'GET',
+            'headers'     => ['host' => [Server::$host]],
+            'client' => [
+                'decode_content' => true,
+                'save_to' => $stream,
+            ],
+        ]);
+        $response->wait();
+        rewind($stream);
+        $this->assertEquals('test', stream_get_contents($stream));
+    }
+
+    public function testSavesToGuzzleStream()
+    {
+        $stream = Stream::factory();
+        $this->addDecodeResponse();
+        $handler = new CurlMultiHandler();
+        $response = $handler([
+            'http_method' => 'GET',
+            'headers'     => ['host' => [Server::$host]],
+            'client' => [
+                'decode_content' => true,
+                'save_to'        => $stream,
+            ],
+        ]);
+        $response->wait();
+        $this->assertEquals('test', (string) $stream);
+    }
+
+    public function testSavesToFileOnDisk()
+    {
+        $tmpfile = tempnam(sys_get_temp_dir(), 'testfile');
+        $this->addDecodeResponse();
+        $handler = new CurlMultiHandler();
+        $response = $handler([
+            'http_method' => 'GET',
+            'headers'     => ['host' => [Server::$host]],
+            'client' => [
+                'decode_content' => true,
+                'save_to'        => $tmpfile,
+            ],
+        ]);
+        $response->wait();
+        $this->assertEquals('test', file_get_contents($tmpfile));
+        unlink($tmpfile);
+    }
+
+    /**
+     * @expectedException \InvalidArgumentException
+     */
+    public function testValidatesBody()
+    {
+        $handler = new CurlMultiHandler();
+        $handler([
+            'http_method' => 'GET',
+            'headers'     => ['host' => [Server::$host]],
+            'body'        => false,
+        ]);
+    }
+
+    public function testAddsLargePayloadFromStreamWithNoSizeUsingChunked()
+    {
+        $stream = Stream::factory('foo');
+        $stream = FnStream::decorate($stream, [
+            'getSize' => function () {
+                return null;
+            }
+        ]);
+        $this->addDecodeResponse();
+        $handler = new CurlMultiHandler();
+        $response = $handler([
+            'http_method' => 'GET',
+            'headers'     => ['host' => [Server::$host]],
+            'body'        => $stream,
+        ]);
+        $response->wait();
+        $sent = Server::received()[0];
+        $this->assertEquals('chunked', Core::header($sent, 'Transfer-Encoding'));
+        $this->assertNull(Core::header($sent, 'Content-Length'));
+        $this->assertEquals('foo', $sent['body']);
+    }
+
+    public function testAddsPayloadFromIterator()
+    {
+        $iter = new \ArrayIterator(['f', 'o', 'o']);
+        $this->addDecodeResponse();
+        $handler = new CurlMultiHandler();
+        $response = $handler([
+            'http_method' => 'GET',
+            'headers'     => ['host' => [Server::$host]],
+            'body'        => $iter,
+        ]);
+        $response->wait();
+        $sent = Server::received()[0];
+        $this->assertEquals('chunked', Core::header($sent, 'Transfer-Encoding'));
+        $this->assertNull(Core::header($sent, 'Content-Length'));
+        $this->assertEquals('foo', $sent['body']);
+    }
+
+    public function testAddsPayloadFromResource()
+    {
+        $res = fopen('php://memory', 'r+');
+        $data = str_repeat('.', 1000000);
+        fwrite($res, $data);
+        rewind($res);
+        $this->addDecodeResponse();
+        $handler = new CurlMultiHandler();
+        $response = $handler([
+            'http_method' => 'GET',
+            'headers'     => [
+                'host'           => [Server::$host],
+                'content-length' => [1000000],
+            ],
+            'body'        => $res,
+        ]);
+        $response->wait();
+        $sent = Server::received()[0];
+        $this->assertNull(Core::header($sent, 'Transfer-Encoding'));
+        $this->assertEquals(1000000, Core::header($sent, 'Content-Length'));
+        $this->assertEquals($data, $sent['body']);
+    }
+
+    public function testAddsContentLengthFromStream()
+    {
+        $stream = Stream::factory('foo');
+        $this->addDecodeResponse();
+        $handler = new CurlMultiHandler();
+        $response = $handler([
+            'http_method' => 'GET',
+            'headers'     => ['host' => [Server::$host]],
+            'body'        => $stream,
+        ]);
+        $response->wait();
+        $sent = Server::received()[0];
+        $this->assertEquals(3, Core::header($sent, 'Content-Length'));
+        $this->assertNull(Core::header($sent, 'Transfer-Encoding'));
+        $this->assertEquals('foo', $sent['body']);
+    }
+
+    public function testDoesNotAddMultipleContentLengthHeaders()
+    {
+        $this->addDecodeResponse();
+        $handler = new CurlMultiHandler();
+        $response = $handler([
+            'http_method' => 'GET',
+            'headers'     => [
+                'host'           => [Server::$host],
+                'content-length' => 3,
+            ],
+            'body' => 'foo',
+        ]);
+        $response->wait();
+        $sent = Server::received()[0];
+        $this->assertEquals(3, Core::header($sent, 'Content-Length'));
+        $this->assertNull(Core::header($sent, 'Transfer-Encoding'));
+        $this->assertEquals('foo', $sent['body']);
+    }
+
+    public function testSendsPostWithNoBodyOrDefaultContentType()
+    {
+        Server::flush();
+        Server::enqueue([['status' => 200]]);
+        $handler = new CurlMultiHandler();
+        $response = $handler([
+            'http_method' => 'POST',
+            'uri'         => '/',
+            'headers'     => ['host' => [Server::$host]],
+        ]);
+        $response->wait();
+        $received = Server::received()[0];
+        $this->assertEquals('POST', $received['http_method']);
+        $this->assertNull(Core::header($received, 'content-type'));
+        $this->assertSame('0', Core::firstHeader($received, 'content-length'));
+    }
+
+    public function testFailsWhenNoResponseAndNoBody()
+    {
+        $res = CurlFactory::createResponse(function () {}, [], [], [], null);
+        $this->assertInstanceOf('GuzzleHttp\Ring\Exception\RingException', $res['error']);
+        $this->assertContains(
+            'No response was received for a request with no body',
+            $res['error']->getMessage()
+        );
+    }
+
+    public function testFailsWhenCannotRewindRetry()
+    {
+        $res = CurlFactory::createResponse(function () {}, [
+            'body' => new NoSeekStream(Stream::factory('foo'))
+        ], [], [], null);
+        $this->assertInstanceOf('GuzzleHttp\Ring\Exception\RingException', $res['error']);
+        $this->assertContains(
+            'rewind the request body failed',
+            $res['error']->getMessage()
+        );
+    }
+
+    public function testRetriesWhenBodyCanBeRewound()
+    {
+        $callHandler = $called = false;
+        $res = CurlFactory::createResponse(function () use (&$callHandler) {
+            $callHandler = true;
+            return ['status' => 200];
+        }, [
+            'body' => FnStream::decorate(Stream::factory('test'), [
+                'seek' => function () use (&$called) {
+                    $called = true;
+                    return true;
+                }
+            ])
+        ], [], [], null);
+
+        $this->assertTrue($callHandler);
+        $this->assertTrue($called);
+        $this->assertEquals('200', $res['status']);
+    }
+
+    public function testFailsWhenRetryMoreThanThreeTimes()
+    {
+        $call = 0;
+        $mock = new MockHandler(function (array $request) use (&$mock, &$call) {
+            $call++;
+            return CurlFactory::createResponse($mock, $request, [], [], null);
+        });
+        $response = $mock([
+            'http_method' => 'GET',
+            'body'        => 'test',
+        ]);
+        $this->assertEquals(3, $call);
+        $this->assertArrayHasKey('error', $response);
+        $this->assertContains(
+            'The cURL request was retried 3 times',
+            $response['error']->getMessage()
+        );
+    }
+
+    public function testHandles100Continue()
+    {
+        Server::flush();
+        Server::enqueue([
+            [
+                'status' => '200',
+                'reason' => 'OK',
+                'headers' => [
+                    'Test' => ['Hello'],
+                    'Content-Length' => ['4'],
+                ],
+                'body' => 'test',
+            ],
+        ]);
+
+        $request = [
+            'http_method' => 'PUT',
+            'headers'     => [
+                'Host'   => [Server::$host],
+                'Expect' => ['100-Continue'],
+            ],
+            'body'        => 'test',
+        ];
+
+        $handler = new CurlMultiHandler();
+        $response = $handler($request)->wait();
+        $this->assertEquals(200, $response['status']);
+        $this->assertEquals('OK', $response['reason']);
+        $this->assertEquals(['Hello'], $response['headers']['Test']);
+        $this->assertEquals(['4'], $response['headers']['Content-Length']);
+        $this->assertEquals('test', Core::body($response));
+    }
+
+    public function testCreatesConnectException()
+    {
+        $m = new \ReflectionMethod('GuzzleHttp\Ring\Client\CurlFactory', 'createErrorResponse');
+        $m->setAccessible(true);
+        $response = $m->invoke(
+            null,
+            function () {},
+            [],
+            [
+                'err_message' => 'foo',
+                'curl' => [
+                    'errno' => CURLE_COULDNT_CONNECT,
+                ]
+            ]
+        );
+        $this->assertInstanceOf('GuzzleHttp\Ring\Exception\ConnectException', $response['error']);
+    }
+}
+
+}
diff --git a/core/vendor/guzzlehttp/ringphp/tests/Client/CurlHandlerTest.php b/core/vendor/guzzlehttp/ringphp/tests/Client/CurlHandlerTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..ba03b8cd37b66e34be473072b1a862e9f2cca58e
--- /dev/null
+++ b/core/vendor/guzzlehttp/ringphp/tests/Client/CurlHandlerTest.php
@@ -0,0 +1,96 @@
+<?php
+namespace GuzzleHttp\Tests\Ring\Client;
+
+use GuzzleHttp\Ring\Client\CurlHandler;
+
+class CurlHandlerTest extends \PHPUnit_Framework_TestCase
+{
+    protected function setUp()
+    {
+        if (!function_exists('curl_reset')) {
+            $this->markTestSkipped('curl_reset() is not available');
+        }
+    }
+
+    protected function getHandler($factory = null, $options = [])
+    {
+        return new CurlHandler($options);
+    }
+
+    public function testCanSetMaxHandles()
+    {
+        $a = new CurlHandler(['max_handles' => 10]);
+        $this->assertEquals(10, $this->readAttribute($a, 'maxHandles'));
+    }
+
+    public function testCreatesCurlErrors()
+    {
+        $handler = new CurlHandler();
+        $response = $handler([
+            'http_method' => 'GET',
+            'uri' => '/',
+            'headers' => ['host' => ['localhost:123']],
+            'client' => ['timeout' => 0.001, 'connect_timeout' => 0.001],
+        ]);
+        $this->assertNull($response['status']);
+        $this->assertNull($response['reason']);
+        $this->assertEquals([], $response['headers']);
+        $this->assertInstanceOf(
+            'GuzzleHttp\Ring\Exception\RingException',
+            $response['error']
+        );
+
+        $this->assertEquals(
+            1,
+            preg_match('/^cURL error \d+: .*$/', $response['error']->getMessage())
+        );
+    }
+
+    public function testReleasesAdditionalEasyHandles()
+    {
+        Server::flush();
+        $response = [
+            'status'  => 200,
+            'headers' => ['Content-Length' => [4]],
+            'body'    => 'test',
+        ];
+
+        Server::enqueue([$response, $response, $response, $response]);
+        $a = new CurlHandler(['max_handles' => 2]);
+
+        $fn = function () use (&$calls, $a, &$fn) {
+            if (++$calls < 4) {
+                $a([
+                    'http_method' => 'GET',
+                    'headers'     => ['host' => [Server::$host]],
+                    'client'      => ['progress' => $fn],
+                ]);
+            }
+        };
+
+        $request = [
+            'http_method' => 'GET',
+            'headers'     => ['host' => [Server::$host]],
+            'client'      => [
+                'progress' => $fn,
+            ],
+        ];
+
+        $a($request);
+        $this->assertCount(2, $this->readAttribute($a, 'handles'));
+    }
+
+    public function testReusesHandles()
+    {
+        Server::flush();
+        $response = ['status' => 200];
+        Server::enqueue([$response, $response]);
+        $a = new CurlHandler();
+        $request = [
+            'http_method' => 'GET',
+            'headers'     => ['host' => [Server::$host]],
+        ];
+        $a($request);
+        $a($request);
+    }
+}
diff --git a/core/vendor/guzzlehttp/ringphp/tests/Client/CurlMultiHandlerTest.php b/core/vendor/guzzlehttp/ringphp/tests/Client/CurlMultiHandlerTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..9228f1ceac6ac273e68af635217213cb5146239c
--- /dev/null
+++ b/core/vendor/guzzlehttp/ringphp/tests/Client/CurlMultiHandlerTest.php
@@ -0,0 +1,165 @@
+<?php
+namespace GuzzleHttp\Tests\Ring\Client;
+
+use GuzzleHttp\Ring\Client\CurlMultiHandler;
+
+class CurlMultiHandlerTest extends \PHPUnit_Framework_TestCase
+{
+    public function testSendsRequest()
+    {
+        Server::enqueue([['status' => 200]]);
+        $a = new CurlMultiHandler();
+        $response = $a([
+            'http_method' => 'GET',
+            'headers'     => ['host' => [Server::$host]],
+        ]);
+        $this->assertInstanceOf('GuzzleHttp\Ring\Future\FutureArray', $response);
+        $this->assertEquals(200, $response['status']);
+        $this->assertArrayHasKey('transfer_stats', $response);
+        $realUrl = trim($response['transfer_stats']['url'], '/');
+        $this->assertEquals(trim(Server::$url, '/'), $realUrl);
+        $this->assertArrayHasKey('effective_url', $response);
+        $this->assertEquals(
+            trim(Server::$url, '/'),
+            trim($response['effective_url'], '/')
+        );
+    }
+
+    public function testCreatesErrorResponses()
+    {
+        $url = 'http://localhost:123/';
+        $a = new CurlMultiHandler();
+        $response = $a([
+            'http_method' => 'GET',
+            'headers'     => ['host' => ['localhost:123']],
+        ]);
+        $this->assertInstanceOf('GuzzleHttp\Ring\Future\FutureArray', $response);
+        $this->assertNull($response['status']);
+        $this->assertNull($response['reason']);
+        $this->assertEquals([], $response['headers']);
+        $this->assertArrayHasKey('error', $response);
+        $this->assertContains('cURL error ', $response['error']->getMessage());
+        $this->assertArrayHasKey('transfer_stats', $response);
+        $this->assertEquals(
+            trim($url, '/'),
+            trim($response['transfer_stats']['url'], '/')
+        );
+        $this->assertArrayHasKey('effective_url', $response);
+        $this->assertEquals(
+            trim($url, '/'),
+            trim($response['effective_url'], '/')
+        );
+    }
+
+    public function testSendsFuturesWhenDestructed()
+    {
+        Server::enqueue([['status' => 200]]);
+        $a = new CurlMultiHandler();
+        $response = $a([
+            'http_method' => 'GET',
+            'headers'     => ['host' => [Server::$host]],
+        ]);
+        $this->assertInstanceOf('GuzzleHttp\Ring\Future\FutureArray', $response);
+        $a->__destruct();
+        $this->assertEquals(200, $response['status']);
+    }
+
+    public function testCanSetMaxHandles()
+    {
+        $a = new CurlMultiHandler(['max_handles' => 2]);
+        $this->assertEquals(2, $this->readAttribute($a, 'maxHandles'));
+    }
+
+    public function testCanSetSelectTimeout()
+    {
+        $a = new CurlMultiHandler(['select_timeout' => 2]);
+        $this->assertEquals(2, $this->readAttribute($a, 'selectTimeout'));
+    }
+
+    public function testSendsFuturesWhenMaxHandlesIsReached()
+    {
+        $request = [
+            'http_method' => 'PUT',
+            'headers'     => ['host' => [Server::$host]],
+            'future'      => 'lazy', // passing this to control the test
+        ];
+        $response = ['status' => 200];
+        Server::flush();
+        Server::enqueue([$response, $response, $response]);
+        $a = new CurlMultiHandler(['max_handles' => 3]);
+        for ($i = 0; $i < 5; $i++) {
+            $responses[] = $a($request);
+        }
+        $this->assertCount(3, Server::received());
+        $responses[3]->cancel();
+        $responses[4]->cancel();
+    }
+
+    public function testCanCancel()
+    {
+        Server::flush();
+        $response = ['status' => 200];
+        Server::enqueue(array_fill_keys(range(0, 10), $response));
+        $a = new CurlMultiHandler();
+        $responses = [];
+
+        for ($i = 0; $i < 10; $i++) {
+            $response = $a([
+                'http_method' => 'GET',
+                'headers'     => ['host' => [Server::$host]],
+                'future'      => 'lazy',
+            ]);
+            $response->cancel();
+            $responses[] = $response;
+        }
+
+        $this->assertCount(0, Server::received());
+
+        foreach ($responses as $response) {
+            $this->assertTrue($this->readAttribute($response, 'isRealized'));
+        }
+    }
+
+    public function testCannotCancelFinished()
+    {
+        Server::flush();
+        Server::enqueue([['status' => 200]]);
+        $a = new CurlMultiHandler();
+        $response = $a([
+            'http_method' => 'GET',
+            'headers'     => ['host' => [Server::$host]],
+        ]);
+        $response->wait();
+        $response->cancel();
+    }
+
+    public function testDelaysInParallel()
+    {
+        Server::flush();
+        Server::enqueue([['status' => 200]]);
+        $a = new CurlMultiHandler();
+        $expected = microtime(true) + (100 / 1000);
+        $response = $a([
+            'http_method' => 'GET',
+            'headers'     => ['host' => [Server::$host]],
+            'client'      => ['delay' => 100],
+        ]);
+        $response->wait();
+        $this->assertGreaterThanOrEqual($expected, microtime(true));
+    }
+
+    public function testSendsNonLazyFutures()
+    {
+        $request = [
+            'http_method' => 'GET',
+            'headers'     => ['host' => [Server::$host]],
+            'future'      => true,
+        ];
+        Server::flush();
+        Server::enqueue([['status' => 202]]);
+        $a = new CurlMultiHandler();
+        $response = $a($request);
+        $this->assertInstanceOf('GuzzleHttp\Ring\Future\FutureArray', $response);
+        $this->assertEquals(202, $response['status']);
+    }
+}
diff --git a/core/vendor/guzzlehttp/ringphp/tests/Client/MiddlewareTest.php b/core/vendor/guzzlehttp/ringphp/tests/Client/MiddlewareTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..a47bb30bab4e9b3f88b3da1ebfa0e3f200bb431c
--- /dev/null
+++ b/core/vendor/guzzlehttp/ringphp/tests/Client/MiddlewareTest.php
@@ -0,0 +1,65 @@
+<?php
+namespace GuzzleHttp\Tests\Ring\Client;
+
+use GuzzleHttp\Ring\Client\Middleware;
+use GuzzleHttp\Ring\Future\CompletedFutureArray;
+
+class MiddlewareTest extends \PHPUnit_Framework_TestCase
+{
+    public function testFutureCallsDefaultHandler()
+    {
+        $future = new CompletedFutureArray(['status' => 200]);
+        $calledA = false;
+        $a = function (array $req) use (&$calledA, $future) {
+            $calledA = true;
+            return $future;
+        };
+        $calledB = false;
+        $b = function (array $req) use (&$calledB) { $calledB = true; };
+        $s = Middleware::wrapFuture($a, $b);
+        $s([]);
+        $this->assertTrue($calledA);
+        $this->assertFalse($calledB);
+    }
+
+    public function testFutureCallsStreamingHandler()
+    {
+        $future = new CompletedFutureArray(['status' => 200]);
+        $calledA = false;
+        $a = function (array $req) use (&$calledA) { $calledA = true; };
+        $calledB = false;
+        $b = function (array $req) use (&$calledB, $future) {
+            $calledB = true;
+            return $future;
+        };
+        $s = Middleware::wrapFuture($a, $b);
+        $result = $s(['client' => ['future' => true]]);
+        $this->assertFalse($calledA);
+        $this->assertTrue($calledB);
+        $this->assertSame($future, $result);
+    }
+
+    public function testStreamingCallsDefaultHandler()
+    {
+        $calledA = false;
+        $a = function (array $req) use (&$calledA) { $calledA = true; };
+        $calledB = false;
+        $b = function (array $req) use (&$calledB) { $calledB = true; };
+        $s = Middleware::wrapStreaming($a, $b);
+        $s([]);
+        $this->assertTrue($calledA);
+        $this->assertFalse($calledB);
+    }
+
+    public function testStreamingCallsStreamingHandler()
+    {
+        $calledA = false;
+        $a = function (array $req) use (&$calledA) { $calledA = true; };
+        $calledB = false;
+        $b = function (array $req) use (&$calledB) { $calledB = true; };
+        $s = Middleware::wrapStreaming($a, $b);
+        $s(['client' => ['stream' => true]]);
+        $this->assertFalse($calledA);
+        $this->assertTrue($calledB);
+    }
+}
diff --git a/core/vendor/guzzlehttp/ringphp/tests/Client/MockHandlerTest.php b/core/vendor/guzzlehttp/ringphp/tests/Client/MockHandlerTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..26bcd6cdc7ea86445f81f5389e963f4f9ab88f2d
--- /dev/null
+++ b/core/vendor/guzzlehttp/ringphp/tests/Client/MockHandlerTest.php
@@ -0,0 +1,86 @@
+<?php
+namespace GuzzleHttp\Tests\Ring\Client;
+
+use GuzzleHttp\Ring\Client\MockHandler;
+use GuzzleHttp\Ring\Future\FutureArray;
+use React\Promise\Deferred;
+
+class MockHandlerTest extends \PHPUnit_Framework_TestCase
+{
+    public function testReturnsArray()
+    {
+        $mock = new MockHandler(['status' => 200]);
+        $response = $mock([]);
+        $this->assertEquals(200, $response['status']);
+        $this->assertEquals([], $response['headers']);
+        $this->assertNull($response['body']);
+        $this->assertNull($response['reason']);
+        $this->assertNull($response['effective_url']);
+    }
+
+    public function testReturnsFutures()
+    {
+        $deferred = new Deferred();
+        $future = new FutureArray(
+            $deferred->promise(),
+            function () use ($deferred) {
+                $deferred->resolve(['status' => 200]);
+            }
+        );
+        $mock = new MockHandler($future);
+        $response = $mock([]);
+        $this->assertInstanceOf('GuzzleHttp\Ring\Future\FutureArray', $response);
+        $this->assertEquals(200, $response['status']);
+    }
+
+    public function testReturnsFuturesWithThenCall()
+    {
+        $deferred = new Deferred();
+        $future = new FutureArray(
+            $deferred->promise(),
+            function () use ($deferred) {
+                $deferred->resolve(['status' => 200]);
+            }
+        );
+        $mock = new MockHandler($future);
+        $response = $mock([]);
+        $this->assertInstanceOf('GuzzleHttp\Ring\Future\FutureArray', $response);
+        $this->assertEquals(200, $response['status']);
+        $req = null;
+        $promise = $response->then(function ($value) use (&$req) {
+            $req = $value;
+            $this->assertEquals(200, $req['status']);
+        });
+        $this->assertInstanceOf('React\Promise\PromiseInterface', $promise);
+        $this->assertEquals(200, $req['status']);
+    }
+
+    public function testReturnsFuturesAndProxiesCancel()
+    {
+        $c = null;
+        $deferred = new Deferred();
+        $future = new FutureArray(
+            $deferred->promise(),
+            function () {},
+            function () use (&$c) {
+                $c = true;
+                return true;
+            }
+        );
+        $mock = new MockHandler($future);
+        $response = $mock([]);
+        $this->assertInstanceOf('GuzzleHttp\Ring\Future\FutureArray', $response);
+        $response->cancel();
+        $this->assertTrue($c);
+    }
+
+    /**
+     * @expectedException \InvalidArgumentException
+     * @expectedExceptionMessage Response must be an array or FutureArrayInterface. Found
+     */
+    public function testEnsuresMockIsValid()
+    {
+        $mock = new MockHandler('foo');
+        $mock([]);
+    }
+}
diff --git a/core/vendor/guzzlehttp/ringphp/tests/Client/Server.php b/core/vendor/guzzlehttp/ringphp/tests/Client/Server.php
new file mode 100644
index 0000000000000000000000000000000000000000..14665a5565dfdadd93a146ea67bcfb14a31ea8c7
--- /dev/null
+++ b/core/vendor/guzzlehttp/ringphp/tests/Client/Server.php
@@ -0,0 +1,183 @@
+<?php
+namespace GuzzleHttp\Tests\Ring\Client;
+
+use GuzzleHttp\Ring\Client\StreamHandler;
+use GuzzleHttp\Ring\Core;
+
+/**
+ * Class uses to control the test webserver.
+ *
+ * Queued responses will be served to requests using a FIFO order.  All requests
+ * received by the server are stored on the node.js server and can be retrieved
+ * by calling {@see Server::received()}.
+ *
+ * Mock responses that don't require data to be transmitted over HTTP a great
+ * for testing.  Mock response, however, cannot test the actual sending of an
+ * HTTP request using cURL.  This test server allows the simulation of any
+ * number of HTTP request response transactions to test the actual sending of
+ * requests over the wire without having to leave an internal network.
+ */
+class Server
+{
+    public static $started;
+    public static $url = 'http://127.0.0.1:8125/';
+    public static $host = '127.0.0.1:8125';
+    public static $port = 8125;
+
+    /**
+     * Flush the received requests from the server
+     * @throws \RuntimeException
+     */
+    public static function flush()
+    {
+        self::send('DELETE', '/guzzle-server/requests');
+    }
+
+    /**
+     * Queue an array of responses or a single response on the server.
+     *
+     * Any currently queued responses will be overwritten. Subsequent requests
+     * on the server will return queued responses in FIFO order.
+     *
+     * @param array $responses An array of responses. The shape of a response
+     *                         is the shape described in the RingPHP spec.
+     * @throws \Exception
+     */
+    public static function enqueue(array $responses)
+    {
+        $data = [];
+
+        foreach ($responses as $response) {
+            if (!is_array($response)) {
+                throw new \Exception('Each response must be an array');
+            }
+
+            if (isset($response['body'])) {
+                $response['body'] = base64_encode($response['body']);
+            }
+
+            $response += ['headers' => [], 'reason' => '', 'body' => ''];
+            $data[] = $response;
+        }
+
+        self::send('PUT', '/guzzle-server/responses', json_encode($data));
+    }
+
+    /**
+     * Get all of the received requests as a RingPHP request structure.
+     *
+     * @return array
+     * @throws \RuntimeException
+     */
+    public static function received()
+    {
+        if (!self::$started) {
+            return [];
+        }
+
+        $response = self::send('GET', '/guzzle-server/requests');
+        $body = Core::body($response);
+        $result = json_decode($body, true);
+        if ($result === false) {
+            throw new \RuntimeException('Error decoding response: '
+                . json_last_error());
+        }
+
+        foreach ($result as &$res) {
+            if (isset($res['uri'])) {
+                $res['resource'] = $res['uri'];
+            }
+            if (isset($res['query_string'])) {
+                $res['resource'] .= '?' . $res['query_string'];
+            }
+            if (!isset($res['resource'])) {
+                $res['resource'] = '';
+            }
+            // Ensure that headers are all arrays
+            if (isset($res['headers'])) {
+                foreach ($res['headers'] as &$h) {
+                    $h = (array) $h;
+                }
+                unset($h);
+            }
+        }
+
+        unset($res);
+        return $result;
+    }
+
+    /**
+     * Stop running the node.js server
+     */
+    public static function stop()
+    {
+        if (self::$started) {
+            self::send('DELETE', '/guzzle-server');
+        }
+
+        self::$started = false;
+    }
+
+    public static function wait($maxTries = 20)
+    {
+        $tries = 0;
+        while (!self::isListening() && ++$tries < $maxTries) {
+            usleep(100000);
+        }
+
+        if (!self::isListening()) {
+            throw new \RuntimeException('Unable to contact node.js server');
+        }
+    }
+
+    public static function start()
+    {
+        if (self::$started) {
+            return;
+        }
+
+        try {
+            self::wait();
+        } catch (\Exception $e) {
+            exec('node ' . __DIR__ . \DIRECTORY_SEPARATOR . 'server.js '
+                . self::$port . ' >> /tmp/server.log 2>&1 &');
+            self::wait();
+        }
+
+        self::$started = true;
+    }
+
+    private static function isListening()
+    {
+        $response = self::send('GET', '/guzzle-server/perf', null, [
+            'connect_timeout' => 1,
+            'timeout'         => 1
+        ]);
+
+        return !isset($response['error']);
+    }
+
+    private static function send(
+        $method,
+        $path,
+        $body = null,
+        array $client = []
+    ) {
+        $handler = new StreamHandler();
+
+        $request = [
+            'http_method'  => $method,
+            'uri'          => $path,
+            'request_port' => 8125,
+            'headers'      => ['host' => ['127.0.0.1:8125']],
+            'body'         => $body,
+            'client'       => $client,
+        ];
+
+        if ($body) {
+            $request['headers']['content-length'] = [strlen($body)];
+        }
+
+        return $handler($request);
+    }
+}
diff --git a/core/vendor/guzzlehttp/ringphp/tests/Client/StreamHandlerTest.php b/core/vendor/guzzlehttp/ringphp/tests/Client/StreamHandlerTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..98ff7e7239aa0de4d1bc8bba39337db681bfc2b0
--- /dev/null
+++ b/core/vendor/guzzlehttp/ringphp/tests/Client/StreamHandlerTest.php
@@ -0,0 +1,462 @@
+<?php
+namespace GuzzleHttp\Tests\Ring\Client;
+
+use GuzzleHttp\Ring\Client\ClientUtils;
+use GuzzleHttp\Ring\Core;
+use GuzzleHttp\Ring\Client\StreamHandler;
+
+class StreamHandlerTest extends \PHPUnit_Framework_TestCase
+{
+    public function testReturnsResponseForSuccessfulRequest()
+    {
+        $this->queueRes();
+        $handler = new StreamHandler();
+        $response = $handler([
+            'http_method' => 'GET',
+            'uri'         => '/',
+            'headers'     => [
+                'host' => [Server::$host],
+                'Foo' => ['Bar'],
+            ],
+        ]);
+
+        $this->assertEquals(200, $response['status']);
+        $this->assertEquals('OK', $response['reason']);
+        $this->assertEquals(['Bar'], $response['headers']['Foo']);
+        $this->assertEquals(['8'], $response['headers']['Content-Length']);
+        $this->assertEquals('hi there', Core::body($response));
+
+        $sent = Server::received()[0];
+        $this->assertEquals('GET', $sent['http_method']);
+        $this->assertEquals('/', $sent['resource']);
+        $this->assertEquals(['127.0.0.1:8125'], $sent['headers']['host']);
+        $this->assertEquals('Bar', Core::header($sent, 'foo'));
+    }
+
+    public function testAddsErrorToResponse()
+    {
+        $handler = new StreamHandler();
+        $result = $handler([
+            'http_method' => 'GET',
+            'headers'     => ['host' => ['localhost:123']],
+            'client'      => ['timeout' => 0.01],
+        ]);
+
+        $this->assertNull($result['status']);
+        $this->assertNull($result['body']);
+        $this->assertEquals([], $result['headers']);
+        $this->assertInstanceOf(
+            'GuzzleHttp\Ring\Exception\RingException',
+            $result['error']
+        );
+    }
+
+    public function testEnsuresTheHttpProtocol()
+    {
+        $handler = new StreamHandler();
+        $result = $handler([
+            'http_method' => 'GET',
+            'url'         => 'ftp://localhost:123',
+        ]);
+        $this->assertArrayHasKey('error', $result);
+        $this->assertContains(
+            'URL is invalid: ftp://localhost:123',
+            $result['error']->getMessage()
+        );
+    }
+
+    public function testStreamAttributeKeepsStreamOpen()
+    {
+        $this->queueRes();
+        $handler = new StreamHandler();
+        $response = $handler([
+            'http_method'  => 'PUT',
+            'uri'          => '/foo',
+            'query_string' => 'baz=bar',
+            'headers'      => [
+                'host' => [Server::$host],
+                'Foo'  => ['Bar'],
+            ],
+            'body'         => 'test',
+            'client'       => ['stream' => true],
+        ]);
+
+        $this->assertEquals(200, $response['status']);
+        $this->assertEquals('OK', $response['reason']);
+        $this->assertEquals('8', Core::header($response, 'Content-Length'));
+        $body = $response['body'];
+        $this->assertTrue(is_resource($body));
+        $this->assertEquals('http', stream_get_meta_data($body)['wrapper_type']);
+        $this->assertEquals('hi there', stream_get_contents($body));
+        fclose($body);
+        $sent = Server::received()[0];
+        $this->assertEquals('PUT', $sent['http_method']);
+        $this->assertEquals('/foo', $sent['uri']);
+        $this->assertEquals('baz=bar', $sent['query_string']);
+        $this->assertEquals('/foo?baz=bar', $sent['resource']);
+        $this->assertEquals('127.0.0.1:8125', Core::header($sent, 'host'));
+        $this->assertEquals('Bar', Core::header($sent, 'foo'));
+    }
+
+    public function testDrainsResponseIntoTempStream()
+    {
+        $this->queueRes();
+        $handler = new StreamHandler();
+        $response = $handler([
+            'http_method' => 'GET',
+            'uri'         => '/',
+            'headers'     => ['host' => [Server::$host]],
+        ]);
+        $body = $response['body'];
+        $this->assertEquals('php://temp', stream_get_meta_data($body)['uri']);
+        $this->assertEquals('hi', fread($body, 2));
+        fclose($body);
+    }
+
+    public function testDrainsResponseIntoSaveToBody()
+    {
+        $r = fopen('php://temp', 'r+');
+        $this->queueRes();
+        $handler = new StreamHandler();
+        $response = $handler([
+            'http_method' => 'GET',
+            'uri' => '/',
+            'headers' => ['host' => [Server::$host]],
+            'client' => ['save_to' => $r],
+        ]);
+        $body = $response['body'];
+        $this->assertEquals('php://temp', stream_get_meta_data($body)['uri']);
+        $this->assertEquals('hi', fread($body, 2));
+        $this->assertEquals(' there', stream_get_contents($r));
+        fclose($r);
+    }
+
+    public function testDrainsResponseIntoSaveToBodyAtPath()
+    {
+        $tmpfname = tempnam('/tmp', 'save_to_path');
+        $this->queueRes();
+        $handler = new StreamHandler();
+        $response = $handler([
+            'http_method' => 'GET',
+            'uri' => '/',
+            'headers' => ['host' => [Server::$host]],
+            'client' => ['save_to' => $tmpfname],
+        ]);
+        $body = $response['body'];
+        $this->assertInstanceOf('GuzzleHttp\Stream\StreamInterface', $body);
+        $this->assertEquals($tmpfname, $body->getMetadata('uri'));
+        $this->assertEquals('hi', $body->read(2));
+        $body->close();
+        unlink($tmpfname);
+    }
+
+    public function testAutomaticallyDecompressGzip()
+    {
+        Server::flush();
+        $content = gzencode('test');
+        Server::enqueue([
+            [
+                'status' => 200,
+                'reason' => 'OK',
+                'headers' => [
+                    'Content-Encoding' => ['gzip'],
+                    'Content-Length' => [strlen($content)],
+                ],
+                'body' => $content,
+            ],
+        ]);
+
+        $handler = new StreamHandler();
+        $response = $handler([
+            'http_method' => 'GET',
+            'headers'     => ['host' => [Server::$host]],
+            'uri'         => '/',
+            'client'      => ['decode_content' => true],
+        ]);
+        $this->assertEquals('test', Core::body($response));
+    }
+
+    public function testDoesNotForceGzipDecode()
+    {
+        Server::flush();
+        $content = gzencode('test');
+        Server::enqueue([
+            [
+                'status' => 200,
+                'reason' => 'OK',
+                'headers' => [
+                    'Content-Encoding' => ['gzip'],
+                    'Content-Length'   => [strlen($content)],
+                ],
+                'body' => $content,
+            ],
+        ]);
+
+        $handler = new StreamHandler();
+        $response = $handler([
+            'http_method' => 'GET',
+            'headers'     => ['host' => [Server::$host]],
+            'uri'         => '/',
+            'client'      => ['stream' => true, 'decode_content' => false],
+        ]);
+        $this->assertSame($content, Core::body($response));
+    }
+
+    protected function getSendResult(array $opts)
+    {
+        $this->queueRes();
+        $handler = new StreamHandler();
+        $opts['stream'] = true;
+        return $handler([
+            'http_method' => 'GET',
+            'uri'         => '/',
+            'headers'     => ['host' => [Server::$host]],
+            'client'      => $opts,
+        ]);
+    }
+
+    public function testAddsProxy()
+    {
+        $res = $this->getSendResult(['stream' => true, 'proxy' => '127.0.0.1:8125']);
+        $opts = stream_context_get_options($res['body']);
+        $this->assertEquals('127.0.0.1:8125', $opts['http']['proxy']);
+    }
+
+    public function testAddsTimeout()
+    {
+        $res = $this->getSendResult(['stream' => true, 'timeout' => 200]);
+        $opts = stream_context_get_options($res['body']);
+        $this->assertEquals(200, $opts['http']['timeout']);
+    }
+
+    public function testVerifiesVerifyIsValidIfPath()
+    {
+        $res = $this->getSendResult(['verify' => '/does/not/exist']);
+        $this->assertContains(
+            'SSL CA bundle not found: /does/not/exist',
+            (string) $res['error']
+        );
+    }
+
+    public function testVerifyCanBeDisabled()
+    {
+        $res = $this->getSendResult(['verify' => false]);
+        $this->assertArrayNotHasKey('error', $res);
+    }
+
+    public function testVerifiesCertIfValidPath()
+    {
+        $res = $this->getSendResult(['cert' => '/does/not/exist']);
+        $this->assertContains(
+            'SSL certificate not found: /does/not/exist',
+            (string) $res['error']
+        );
+    }
+
+    public function testVerifyCanBeSetToPath()
+    {
+        $path = $path = ClientUtils::getDefaultCaBundle();
+        $res = $this->getSendResult(['verify' => $path]);
+        $this->assertArrayNotHasKey('error', $res);
+        $opts = stream_context_get_options($res['body']);
+        $this->assertEquals(true, $opts['ssl']['verify_peer']);
+        $this->assertEquals($path, $opts['ssl']['cafile']);
+        $this->assertTrue(file_exists($opts['ssl']['cafile']));
+    }
+
+    public function testUsesSystemDefaultBundle()
+    {
+        $path = $path = ClientUtils::getDefaultCaBundle();
+        $res = $this->getSendResult(['verify' => true]);
+        $this->assertArrayNotHasKey('error', $res);
+        $opts = stream_context_get_options($res['body']);
+        if (PHP_VERSION_ID < 50600) {
+            $this->assertEquals($path, $opts['ssl']['cafile']);
+        }
+    }
+
+    public function testEnsuresVerifyOptionIsValid()
+    {
+        $res = $this->getSendResult(['verify' => 10]);
+        $this->assertContains(
+            'Invalid verify request option',
+            (string) $res['error']
+        );
+    }
+
+    public function testCanSetPasswordWhenSettingCert()
+    {
+        $path = __FILE__;
+        $res = $this->getSendResult(['cert' => [$path, 'foo']]);
+        $opts = stream_context_get_options($res['body']);
+        $this->assertEquals($path, $opts['ssl']['local_cert']);
+        $this->assertEquals('foo', $opts['ssl']['passphrase']);
+    }
+
+    public function testDebugAttributeWritesToStream()
+    {
+        $this->queueRes();
+        $f = fopen('php://temp', 'w+');
+        $this->getSendResult(['debug' => $f]);
+        fseek($f, 0);
+        $contents = stream_get_contents($f);
+        $this->assertContains('<GET http://127.0.0.1:8125/> [CONNECT]', $contents);
+        $this->assertContains('<GET http://127.0.0.1:8125/> [FILE_SIZE_IS]', $contents);
+        $this->assertContains('<GET http://127.0.0.1:8125/> [PROGRESS]', $contents);
+    }
+
+    public function testDebugAttributeWritesStreamInfoToBuffer()
+    {
+        $called = false;
+        $this->queueRes();
+        $buffer = fopen('php://temp', 'r+');
+        $this->getSendResult([
+            'progress' => function () use (&$called) { $called = true; },
+            'debug' => $buffer,
+        ]);
+        fseek($buffer, 0);
+        $contents = stream_get_contents($buffer);
+        $this->assertContains('<GET http://127.0.0.1:8125/> [CONNECT]', $contents);
+        $this->assertContains('<GET http://127.0.0.1:8125/> [FILE_SIZE_IS] message: "Content-Length: 8"', $contents);
+        $this->assertContains('<GET http://127.0.0.1:8125/> [PROGRESS] bytes_max: "8"', $contents);
+        $this->assertTrue($called);
+    }
+
+    public function testEmitsProgressInformation()
+    {
+        $called = [];
+        $this->queueRes();
+        $this->getSendResult([
+            'progress' => function () use (&$called) {
+                $called[] = func_get_args();
+            },
+        ]);
+        $this->assertNotEmpty($called);
+        $this->assertEquals(8, $called[0][0]);
+        $this->assertEquals(0, $called[0][1]);
+    }
+
+    public function testEmitsProgressInformationAndDebugInformation()
+    {
+        $called = [];
+        $this->queueRes();
+        $buffer = fopen('php://memory', 'w+');
+        $this->getSendResult([
+            'debug'    => $buffer,
+            'progress' => function () use (&$called) {
+                $called[] = func_get_args();
+            },
+        ]);
+        $this->assertNotEmpty($called);
+        $this->assertEquals(8, $called[0][0]);
+        $this->assertEquals(0, $called[0][1]);
+        rewind($buffer);
+        $this->assertNotEmpty(stream_get_contents($buffer));
+        fclose($buffer);
+    }
+
+    public function testAddsProxyByProtocol()
+    {
+        $url = str_replace('http', 'tcp', Server::$url);
+        $res = $this->getSendResult(['proxy' => ['http' => $url]]);
+        $opts = stream_context_get_options($res['body']);
+        $this->assertEquals($url, $opts['http']['proxy']);
+    }
+
+    public function testPerformsShallowMergeOfCustomContextOptions()
+    {
+        $res = $this->getSendResult([
+            'stream_context' => [
+                'http' => [
+                    'request_fulluri' => true,
+                    'method' => 'HEAD',
+                ],
+                'socket' => [
+                    'bindto' => '127.0.0.1:0',
+                ],
+                'ssl' => [
+                    'verify_peer' => false,
+                ],
+            ],
+        ]);
+
+        $opts = stream_context_get_options($res['body']);
+        $this->assertEquals('HEAD', $opts['http']['method']);
+        $this->assertTrue($opts['http']['request_fulluri']);
+        $this->assertFalse($opts['ssl']['verify_peer']);
+        $this->assertEquals('127.0.0.1:0', $opts['socket']['bindto']);
+    }
+
+    public function testEnsuresThatStreamContextIsAnArray()
+    {
+        $res = $this->getSendResult(['stream_context' => 'foo']);
+        $this->assertContains(
+            'stream_context must be an array',
+            (string) $res['error']
+        );
+    }
+
+    public function testDoesNotAddContentTypeByDefault()
+    {
+        $this->queueRes();
+        $handler = new StreamHandler();
+        $handler([
+            'http_method' => 'PUT',
+            'uri' => '/',
+            'headers' => ['host' => [Server::$host], 'content-length' => [3]],
+            'body' => 'foo',
+        ]);
+        $req = Server::received()[0];
+        $this->assertEquals('', Core::header($req, 'Content-Type'));
+        $this->assertEquals(3, Core::header($req, 'Content-Length'));
+    }
+
+    private function queueRes()
+    {
+        Server::flush();
+        Server::enqueue([
+            [
+                'status' => 200,
+                'reason' => 'OK',
+                'headers' => [
+                    'Foo' => ['Bar'],
+                    'Content-Length' => [8],
+                ],
+                'body' => 'hi there',
+            ],
+        ]);
+    }
+
+    public function testSupports100Continue()
+    {
+        Server::flush();
+        Server::enqueue([
+            [
+                'status' => '200',
+                'reason' => 'OK',
+                'headers' => [
+                    'Test' => ['Hello'],
+                    'Content-Length' => ['4'],
+                ],
+                'body' => 'test',
+            ],
+        ]);
+
+        $request = [
+            'http_method' => 'PUT',
+            'headers'     => [
+                'Host'   => [Server::$host],
+                'Expect' => ['100-Continue'],
+            ],
+            'body'        => 'test',
+        ];
+
+        $handler = new StreamHandler();
+        $response = $handler($request);
+        $this->assertEquals(200, $response['status']);
+        $this->assertEquals('OK', $response['reason']);
+        $this->assertEquals(['Hello'], $response['headers']['Test']);
+        $this->assertEquals(['4'], $response['headers']['Content-Length']);
+        $this->assertEquals('test', Core::body($response));
+    }
+}
diff --git a/core/vendor/guzzlehttp/ringphp/tests/Client/server.js b/core/vendor/guzzlehttp/ringphp/tests/Client/server.js
new file mode 100644
index 0000000000000000000000000000000000000000..5642c0fca4086e0b1c80f41f22ff310e9f619edf
--- /dev/null
+++ b/core/vendor/guzzlehttp/ringphp/tests/Client/server.js
@@ -0,0 +1,161 @@
+/**
+ * Guzzle node.js test server to return queued responses to HTTP requests and
+ * expose a RESTful API for enqueueing responses and retrieving the requests
+ * that have been received.
+ *
+ * - Delete all requests that have been received:
+ *      > DELETE /guzzle-server/requests
+ *      > Host: 127.0.0.1:8125
+ *
+ *  - Enqueue responses
+ *      > PUT /guzzle-server/responses
+ *      > Host: 127.0.0.1:8125
+ *      >
+ *      > [{'status': 200, 'reason': 'OK', 'headers': {}, 'body': '' }]
+ *
+ *  - Get the received requests
+ *      > GET /guzzle-server/requests
+ *      > Host: 127.0.0.1:8125
+ *
+ *      < HTTP/1.1 200 OK
+ *      <
+ *      < [{'http_method': 'GET', 'uri': '/', 'headers': {}, 'body': 'string'}]
+ *
+ *  - Shutdown the server
+ *      > DELETE /guzzle-server
+ *      > Host: 127.0.0.1:8125
+ *
+ * @package Guzzle PHP <http://www.guzzlephp.org>
+ * @license See the LICENSE file that was distributed with this source code.
+ */
+
+var http = require('http');
+var url = require('url');
+
+/**
+ * Guzzle node.js server
+ * @class
+ */
+var GuzzleServer = function(port, log) {
+
+    this.port = port;
+    this.log = log;
+    this.responses = [];
+    this.requests = [];
+    var that = this;
+
+    var controlRequest = function(request, req, res) {
+        if (req.url == '/guzzle-server/perf') {
+            res.writeHead(200, 'OK', {'Content-Length': 16});
+            res.end('Body of response');
+        } else if (req.method == 'DELETE') {
+            if (req.url == '/guzzle-server/requests') {
+                // Clear the received requests
+                that.requests = [];
+                res.writeHead(200, 'OK', { 'Content-Length': 0 });
+                res.end();
+                if (that.log) {
+                    console.log('Flushing requests');
+                }
+            } else if (req.url == '/guzzle-server') {
+                // Shutdown the server
+                res.writeHead(200, 'OK', { 'Content-Length': 0, 'Connection': 'close' });
+                res.end();
+                if (that.log) {
+                    console.log('Shutting down');
+                }
+                that.server.close();
+            }
+        } else if (req.method == 'GET') {
+            if (req.url === '/guzzle-server/requests') {
+                if (that.log) {
+                    console.log('Sending received requests');
+                }
+                // Get received requests
+                var body = JSON.stringify(that.requests);
+                res.writeHead(200, 'OK', { 'Content-Length': body.length });
+                res.end(body);
+            }
+        } else if (req.method == 'PUT' && req.url == '/guzzle-server/responses') {
+            if (that.log) {
+                console.log('Adding responses...');
+            }
+            if (!request.body) {
+                if (that.log) {
+                    console.log('No response data was provided');
+                }
+                res.writeHead(400, 'NO RESPONSES IN REQUEST', { 'Content-Length': 0 });
+            } else {
+                that.responses = eval('(' + request.body + ')');
+                for (var i = 0; i < that.responses.length; i++) {
+                    if (that.responses[i].body) {
+                        that.responses[i].body = new Buffer(that.responses[i].body, 'base64');
+                    }
+                }
+                if (that.log) {
+                    console.log(that.responses);
+                }
+                res.writeHead(200, 'OK', { 'Content-Length': 0 });
+            }
+            res.end();
+        }
+    };
+
+    var receivedRequest = function(request, req, res) {
+        if (req.url.indexOf('/guzzle-server') === 0) {
+            controlRequest(request, req, res);
+        } else if (req.url.indexOf('/guzzle-server') == -1 && !that.responses.length) {
+            res.writeHead(500);
+            res.end('No responses in queue');
+        } else {
+            if (that.log) {
+                console.log('Returning response from queue and adding request');
+            }
+            that.requests.push(request);
+            var response = that.responses.shift();
+            res.writeHead(response.status, response.reason, response.headers);
+            res.end(response.body);
+        }
+    };
+
+    this.start = function() {
+
+        that.server = http.createServer(function(req, res) {
+
+            var parts = url.parse(req.url, false);
+            var request = {
+                http_method: req.method,
+                scheme: parts.scheme,
+                uri: parts.pathname,
+                query_string: parts.query,
+                headers: req.headers,
+                version: req.httpVersion,
+                body: ''
+            };
+
+            // Receive each chunk of the request body
+            req.addListener('data', function(chunk) {
+                request.body += chunk;
+            });
+
+            // Called when the request completes
+            req.addListener('end', function() {
+                receivedRequest(request, req, res);
+            });
+        });
+
+        that.server.listen(this.port, '127.0.0.1');
+
+        if (this.log) {
+            console.log('Server running at http://127.0.0.1:8125/');
+        }
+    };
+};
+
+// Get the port from the arguments
+port = process.argv.length >= 3 ? process.argv[2] : 8125;
+log = process.argv.length >= 4 ? process.argv[3] : false;
+
+// Start the server
+server = new GuzzleServer(port, log);
+server.start();
diff --git a/core/vendor/guzzlehttp/ringphp/tests/CoreTest.php b/core/vendor/guzzlehttp/ringphp/tests/CoreTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..240fb69f3e8499270794b320bba1668f339ecc59
--- /dev/null
+++ b/core/vendor/guzzlehttp/ringphp/tests/CoreTest.php
@@ -0,0 +1,307 @@
+<?php
+namespace GuzzleHttp\Tests\Ring;
+
+use GuzzleHttp\Ring\Core;
+use GuzzleHttp\Ring\Future\CompletedFutureArray;
+use GuzzleHttp\Ring\Future\FutureArray;
+use GuzzleHttp\Stream\Stream;
+use React\Promise\Deferred;
+
+class CoreTest extends \PHPUnit_Framework_TestCase
+{
+    public function testReturnsNullNoHeadersAreSet()
+    {
+        $this->assertNull(Core::header([], 'Foo'));
+        $this->assertNull(Core::firstHeader([], 'Foo'));
+    }
+
+    public function testReturnsFirstHeaderWhenSimple()
+    {
+        $this->assertEquals('Bar', Core::firstHeader([
+            'headers' => ['Foo' => ['Bar', 'Baz']],
+        ], 'Foo'));
+    }
+
+    public function testReturnsFirstHeaderWhenMultiplePerLine()
+    {
+        $this->assertEquals('Bar', Core::firstHeader([
+            'headers' => ['Foo' => ['Bar, Baz']],
+        ], 'Foo'));
+    }
+
+    public function testExtractsCaseInsensitiveHeader()
+    {
+        $this->assertEquals(
+            'hello',
+            Core::header(['headers' => ['foo' => ['hello']]], 'FoO')
+        );
+    }
+
+    public function testExtractsHeaderLines()
+    {
+        $this->assertEquals(
+            ['bar', 'baz'],
+            Core::headerLines([
+                'headers' => [
+                    'Foo' => ['bar', 'baz'],
+                ],
+            ], 'Foo')
+        );
+    }
+
+    public function testExtractsHeaderAsString()
+    {
+        $this->assertEquals(
+            'bar, baz',
+            Core::header([
+                'headers' => [
+                    'Foo' => ['bar', 'baz'],
+                ],
+            ], 'Foo', true)
+        );
+    }
+
+    public function testReturnsNullWhenHeaderNotFound()
+    {
+        $this->assertNull(Core::header(['headers' => []], 'Foo'));
+    }
+
+    public function testRemovesHeaders()
+    {
+        $message = [
+            'headers' => [
+                'foo' => ['bar'],
+                'Foo' => ['bam'],
+                'baz' => ['123'],
+            ],
+        ];
+
+        $this->assertSame($message, Core::removeHeader($message, 'bam'));
+        $this->assertEquals([
+            'headers' => ['baz' => ['123']],
+        ], Core::removeHeader($message, 'foo'));
+    }
+
+    public function testCreatesUrl()
+    {
+        $req = [
+            'scheme'  => 'http',
+            'headers' => ['host' => ['foo.com']],
+            'uri'     => '/',
+        ];
+
+        $this->assertEquals('http://foo.com/', Core::url($req));
+    }
+
+    /**
+     * @expectedException \InvalidArgumentException
+     * @expectedExceptionMessage No Host header was provided
+     */
+    public function testEnsuresHostIsAvailableWhenCreatingUrls()
+    {
+        Core::url([]);
+    }
+
+    public function testCreatesUrlWithQueryString()
+    {
+        $req = [
+            'scheme'       => 'http',
+            'headers'      => ['host' => ['foo.com']],
+            'uri'          => '/',
+            'query_string' => 'foo=baz',
+        ];
+
+        $this->assertEquals('http://foo.com/?foo=baz', Core::url($req));
+    }
+
+    public function testUsesUrlIfSet()
+    {
+        $req = ['url' => 'http://foo.com'];
+        $this->assertEquals('http://foo.com', Core::url($req));
+    }
+
+    public function testReturnsNullWhenNoBody()
+    {
+        $this->assertNull(Core::body([]));
+    }
+
+    public function testReturnsStreamAsString()
+    {
+        $this->assertEquals(
+            'foo',
+            Core::body(['body' => Stream::factory('foo')])
+        );
+    }
+
+    public function testReturnsString()
+    {
+        $this->assertEquals('foo', Core::body(['body' => 'foo']));
+    }
+
+    public function testReturnsResourceContent()
+    {
+        $r = fopen('php://memory', 'w+');
+        fwrite($r, 'foo');
+        rewind($r);
+        $this->assertEquals('foo', Core::body(['body' => $r]));
+        fclose($r);
+    }
+
+    public function testReturnsIteratorContent()
+    {
+        $a = new \ArrayIterator(['a', 'b', 'cd', '']);
+        $this->assertEquals('abcd', Core::body(['body' => $a]));
+    }
+
+    public function testReturnsObjectToString()
+    {
+        $this->assertEquals('foo', Core::body(['body' => new StrClass]));
+    }
+
+    /**
+     * @expectedException \InvalidArgumentException
+     */
+    public function testEnsuresBodyIsValid()
+    {
+        Core::body(['body' => false]);
+    }
+
+    public function testParsesHeadersFromLines()
+    {
+        $lines = ['Foo: bar', 'Foo: baz', 'Abc: 123', 'Def: a, b'];
+        $this->assertEquals([
+            'Foo' => ['bar', 'baz'],
+            'Abc' => ['123'],
+            'Def' => ['a, b'],
+        ], Core::headersFromLines($lines));
+    }
+
+    public function testParsesHeadersFromLinesWithMultipleLines()
+    {
+        $lines = ['Foo: bar', 'Foo: baz', 'Foo: 123'];
+        $this->assertEquals([
+            'Foo' => ['bar', 'baz', '123'],
+        ], Core::headersFromLines($lines));
+    }
+
+    public function testCreatesArrayCallFunctions()
+    {
+        $called = [];
+        $a = function ($a, $b) use (&$called) {
+            $called['a'] = func_get_args();
+        };
+        $b = function ($a, $b) use (&$called) {
+            $called['b'] = func_get_args();
+        };
+        $c = Core::callArray([$a, $b]);
+        $c(1, 2);
+        $this->assertEquals([1, 2], $called['a']);
+        $this->assertEquals([1, 2], $called['b']);
+    }
+
+    public function testRewindsGuzzleStreams()
+    {
+        $str = Stream::factory('foo');
+        $this->assertTrue(Core::rewindBody(['body' => $str]));
+    }
+
+    public function testRewindsStreams()
+    {
+        $str = Stream::factory('foo')->detach();
+        $this->assertTrue(Core::rewindBody(['body' => $str]));
+    }
+
+    public function testRewindsIterators()
+    {
+        $iter = new \ArrayIterator(['foo']);
+        $this->assertTrue(Core::rewindBody(['body' => $iter]));
+    }
+
+    public function testRewindsStrings()
+    {
+        $this->assertTrue(Core::rewindBody(['body' => 'hi']));
+    }
+
+    public function testRewindsToStrings()
+    {
+        $this->assertTrue(Core::rewindBody(['body' => new StrClass()]));
+    }
+
+    public function typeProvider()
+    {
+        return [
+            ['foo', 'string(3) "foo"'],
+            [true, 'bool(true)'],
+            [false, 'bool(false)'],
+            [10, 'int(10)'],
+            [1.0, 'float(1)'],
+            [new StrClass(), 'object(GuzzleHttp\Tests\Ring\StrClass)'],
+            [['foo'], 'array(1)']
+        ];
+    }
+
+    /**
+     * @dataProvider typeProvider
+     */
+    public function testDescribesType($input, $output)
+    {
+        $this->assertEquals($output, Core::describeType($input));
+    }
+
+    public function testDoesSleep()
+    {
+        $t = microtime(true);
+        $expected = $t + (100 / 1000);
+        Core::doSleep(['client' => ['delay' => 100]]);
+        $this->assertGreaterThanOrEqual($expected, microtime(true));
+    }
+
+    public function testProxiesFuture()
+    {
+        $f = new CompletedFutureArray(['status' => 200]);
+        $res = null;
+        $proxied = Core::proxy($f, function ($value) use (&$res) {
+            $value['foo'] = 'bar';
+            $res = $value;
+            return $value;
+        });
+        $this->assertNotSame($f, $proxied);
+        $this->assertEquals(200, $f->wait()['status']);
+        $this->assertArrayNotHasKey('foo', $f->wait());
+        $this->assertEquals('bar', $proxied->wait()['foo']);
+        $this->assertEquals(200, $proxied->wait()['status']);
+    }
+
+    public function testProxiesDeferredFuture()
+    {
+        $d = new Deferred();
+        $f = new FutureArray($d->promise());
+        $f2 = Core::proxy($f);
+        $d->resolve(['foo' => 'bar']);
+        $this->assertEquals('bar', $f['foo']);
+        $this->assertEquals('bar', $f2['foo']);
+    }
+
+    public function testProxiesDeferredFutureFailure()
+    {
+        $d = new Deferred();
+        $f = new FutureArray($d->promise());
+        $f2 = Core::proxy($f);
+        $d->reject(new \Exception('foo'));
+        try {
+            $f2['hello?'];
+            $this->fail('did not throw');
+        } catch (\Exception $e) {
+            $this->assertEquals('foo', $e->getMessage());
+        }
+
+    }
+}
+
+final class StrClass
+{
+    public function __toString()
+    {
+        return 'foo';
+    }
+}
diff --git a/core/vendor/guzzlehttp/ringphp/tests/Future/CompletedFutureArrayTest.php b/core/vendor/guzzlehttp/ringphp/tests/Future/CompletedFutureArrayTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..82d7efbf5caa958a54c786efc9a0fa572e4b3f21
--- /dev/null
+++ b/core/vendor/guzzlehttp/ringphp/tests/Future/CompletedFutureArrayTest.php
@@ -0,0 +1,21 @@
+<?php
+namespace GuzzleHttp\Tests\Ring\Future;
+
+use GuzzleHttp\Ring\Future\CompletedFutureArray;
+
+class CompletedFutureArrayTest extends \PHPUnit_Framework_TestCase
+{
+    public function testReturnsAsArray()
+    {
+        $f = new CompletedFutureArray(['foo' => 'bar']);
+        $this->assertEquals('bar', $f['foo']);
+        $this->assertFalse(isset($f['baz']));
+        $f['abc'] = '123';
+        $this->assertTrue(isset($f['abc']));
+        $this->assertEquals(['foo' => 'bar', 'abc' => '123'], iterator_to_array($f));
+        $this->assertEquals(2, count($f));
+        unset($f['abc']);
+        $this->assertEquals(1, count($f));
+        $this->assertEquals(['foo' => 'bar'], iterator_to_array($f));
+    }
+}
diff --git a/core/vendor/guzzlehttp/ringphp/tests/Future/CompletedFutureValueTest.php b/core/vendor/guzzlehttp/ringphp/tests/Future/CompletedFutureValueTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..6ded40dfba63f90c7cfb08f70b32c991a64db9ac
--- /dev/null
+++ b/core/vendor/guzzlehttp/ringphp/tests/Future/CompletedFutureValueTest.php
@@ -0,0 +1,46 @@
+<?php
+namespace GuzzleHttp\Tests\Ring\Future;
+
+use GuzzleHttp\Ring\Exception\CancelledFutureAccessException;
+use GuzzleHttp\Ring\Future\CompletedFutureValue;
+
+class CompletedFutureValueTest extends \PHPUnit_Framework_TestCase
+{
+    public function testReturnsValue()
+    {
+        $f = new CompletedFutureValue('hi');
+        $this->assertEquals('hi', $f->wait());
+        $f->cancel();
+
+        $a = null;
+        $f->then(function ($v) use (&$a) {
+            $a = $v;
+        });
+        $this->assertSame('hi', $a);
+    }
+
+    public function testThrows()
+    {
+        $ex = new \Exception('foo');
+        $f = new CompletedFutureValue(null, $ex);
+        $f->cancel();
+        try {
+            $f->wait();
+            $this->fail('did not throw');
+        } catch (\Exception $e) {
+            $this->assertSame($e, $ex);
+        }
+    }
+
+    public function testMarksAsCancelled()
+    {
+        $ex = new CancelledFutureAccessException();
+        $f = new CompletedFutureValue(null, $ex);
+        try {
+            $f->wait();
+            $this->fail('did not throw');
+        } catch (\Exception $e) {
+            $this->assertSame($e, $ex);
+        }
+    }
+}
diff --git a/core/vendor/guzzlehttp/ringphp/tests/Future/FutureArrayTest.php b/core/vendor/guzzlehttp/ringphp/tests/Future/FutureArrayTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..0e09f5afa837c54815ca3931a3bd7aa9bf737fa8
--- /dev/null
+++ b/core/vendor/guzzlehttp/ringphp/tests/Future/FutureArrayTest.php
@@ -0,0 +1,56 @@
+<?php
+namespace GuzzleHttp\Tests\Ring\Future;
+
+use GuzzleHttp\Ring\Future\FutureArray;
+use React\Promise\Deferred;
+
+class FutureArrayTest extends \PHPUnit_Framework_TestCase
+{
+    public function testLazilyCallsDeref()
+    {
+        $c = false;
+        $deferred = new Deferred();
+        $f = new FutureArray(
+            $deferred->promise(),
+            function () use (&$c, $deferred) {
+                $c = true;
+                $deferred->resolve(['status' => 200]);
+            }
+        );
+        $this->assertFalse($c);
+        $this->assertFalse($this->readAttribute($f, 'isRealized'));
+        $this->assertEquals(200, $f['status']);
+        $this->assertTrue($c);
+    }
+
+    public function testActsLikeArray()
+    {
+        $deferred = new Deferred();
+        $f = new FutureArray(
+            $deferred->promise(),
+            function () use (&$c, $deferred) {
+                $deferred->resolve(['status' => 200]);
+            }
+        );
+
+        $this->assertTrue(isset($f['status']));
+        $this->assertEquals(200, $f['status']);
+        $this->assertEquals(['status' => 200], $f->wait());
+        $this->assertEquals(1, count($f));
+        $f['baz'] = 10;
+        $this->assertEquals(10, $f['baz']);
+        unset($f['baz']);
+        $this->assertFalse(isset($f['baz']));
+        $this->assertEquals(['status' => 200], iterator_to_array($f));
+    }
+
+    /**
+     * @expectedException \RuntimeException
+     */
+    public function testThrowsWhenAccessingInvalidProperty()
+    {
+        $deferred = new Deferred();
+        $f = new FutureArray($deferred->promise(), function () {});
+        $f->foo;
+    }
+}
diff --git a/core/vendor/guzzlehttp/ringphp/tests/Future/FutureValueTest.php b/core/vendor/guzzlehttp/ringphp/tests/Future/FutureValueTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..d59c543d0ff28af2ede0c720c059f96e87409704
--- /dev/null
+++ b/core/vendor/guzzlehttp/ringphp/tests/Future/FutureValueTest.php
@@ -0,0 +1,109 @@
+<?php
+namespace GuzzleHttp\Tests\Ring\Future;
+
+use GuzzleHttp\Ring\Exception\CancelledFutureAccessException;
+use GuzzleHttp\Ring\Future\FutureValue;
+use React\Promise\Deferred;
+
+class FutureValueTest extends \PHPUnit_Framework_TestCase
+{
+    public function testDerefReturnsValue()
+    {
+        $called = 0;
+        $deferred = new Deferred();
+
+        $f = new FutureValue(
+            $deferred->promise(),
+            function () use ($deferred, &$called) {
+                $called++;
+                $deferred->resolve('foo');
+            }
+        );
+
+        $this->assertEquals('foo', $f->wait());
+        $this->assertEquals(1, $called);
+        $this->assertEquals('foo', $f->wait());
+        $this->assertEquals(1, $called);
+        $f->cancel();
+        $this->assertTrue($this->readAttribute($f, 'isRealized'));
+    }
+
+    /**
+     * @expectedException \GuzzleHttp\Ring\Exception\CancelledFutureAccessException
+     */
+    public function testThrowsWhenAccessingCancelled()
+    {
+        $f = new FutureValue(
+            (new Deferred())->promise(),
+            function () {},
+            function () { return true; }
+        );
+        $f->cancel();
+        $f->wait();
+    }
+
+    /**
+     * @expectedException \OutOfBoundsException
+     */
+    public function testThrowsWhenDerefFailure()
+    {
+        $called = false;
+        $deferred = new Deferred();
+        $f = new FutureValue(
+            $deferred->promise(),
+            function () use(&$called) {
+                $called = true;
+            }
+        );
+        $deferred->reject(new \OutOfBoundsException());
+        $f->wait();
+        $this->assertFalse($called);
+    }
+
+    /**
+     * @expectedException \GuzzleHttp\Ring\Exception\RingException
+     * @expectedExceptionMessage Waiting did not resolve future
+     */
+    public function testThrowsWhenDerefDoesNotResolve()
+    {
+        $deferred = new Deferred();
+        $f = new FutureValue(
+            $deferred->promise(),
+            function () use(&$called) {
+                $called = true;
+            }
+        );
+        $f->wait();
+    }
+
+    public function testThrowingCancelledFutureAccessExceptionCancels()
+    {
+        $deferred = new Deferred();
+        $f = new FutureValue(
+            $deferred->promise(),
+            function () use ($deferred) {
+                throw new CancelledFutureAccessException();
+            }
+        );
+        try {
+            $f->wait();
+            $this->fail('did not throw');
+        } catch (CancelledFutureAccessException $e) {}
+    }
+
+    /**
+     * @expectedException \Exception
+     * @expectedExceptionMessage foo
+     */
+    public function testThrowingExceptionInDerefMarksAsFailed()
+    {
+        $deferred = new Deferred();
+        $f = new FutureValue(
+            $deferred->promise(),
+            function () {
+                throw new \Exception('foo');
+            }
+        );
+        $f->wait();
+    }
+}
diff --git a/core/vendor/guzzlehttp/ringphp/tests/bootstrap.php b/core/vendor/guzzlehttp/ringphp/tests/bootstrap.php
new file mode 100644
index 0000000000000000000000000000000000000000..017610fe0d86c2258a5baacd5b889ebfc002fb28
--- /dev/null
+++ b/core/vendor/guzzlehttp/ringphp/tests/bootstrap.php
@@ -0,0 +1,11 @@
+<?php
+require __DIR__ . '/../vendor/autoload.php';
+require __DIR__ . '/Client/Server.php';
+
+use GuzzleHttp\Tests\Ring\Client\Server;
+
+Server::start();
+
+register_shutdown_function(function () {
+    Server::stop();
+});
diff --git a/core/vendor/guzzlehttp/streams/.travis.yml b/core/vendor/guzzlehttp/streams/.travis.yml
index 4355f26b1f428aff276d3e4d9a5e68f23e684f44..a6f8a87b7dc46e42a2ca74885674dfab0ebb7c2b 100644
--- a/core/vendor/guzzlehttp/streams/.travis.yml
+++ b/core/vendor/guzzlehttp/streams/.travis.yml
@@ -11,3 +11,7 @@ before_script:
   - composer install --no-interaction --prefer-source --dev
 
 script: vendor/bin/phpunit
+
+matrix:
+  allow_failures:
+    - php: hhvm
diff --git a/core/vendor/guzzlehttp/streams/CHANGELOG.rst b/core/vendor/guzzlehttp/streams/CHANGELOG.rst
index 8f0116b76d43c948067377d7e552716876fada19..0018ffe353f1ebb94097d811755289cfba1a4b5b 100644
--- a/core/vendor/guzzlehttp/streams/CHANGELOG.rst
+++ b/core/vendor/guzzlehttp/streams/CHANGELOG.rst
@@ -2,6 +2,60 @@
 Changelog
 =========
 
+3.0.0 (2014-10-12)
+------------------
+
+* Now supports creating streams from functions and iterators.
+* Supports creating buffered streams and asynchronous streams.
+* Removed ``functions.php``. Use the corresponding functions provided by
+  ``GuzzleHttp\Streams\Utils`` instead.
+* Moved ``GuzzleHttp\Stream\MetadataStreamInterface::getMetadata`` to
+  ``GuzzleHttp\Stream\StreamInterface``. MetadataStreamInterface is no longer
+  used and is marked as deprecated.
+* Added ``attach()`` to ``GuzzleHttp\Stream\StreamInterface`` for PSR-7
+  compatibility.
+* Removed ``flush()`` from StreamInterface.
+* Removed the ``$maxLength`` parameter from
+  ``GuzzleHttp\Stream\StreamInterface::getContents()``. This function now
+  returns the entire remainder of the stream. If you want to limit the maximum
+  amount of data read from the stream, use the
+  ``GuzzleHttp\Stream\Utils::copyToString()`` function.
+* Streams that return an empty string, ``''``, are no longer considered a
+  failure. You MUST return ``false`` to mark the read as a failure, and ensure
+  that any decorators you create properly return ``true`` in response to the
+  ``eof()`` method when the stream is consumed.
+* ``GuzzleHttp\Stream\Stream::__construct``,
+  ``GuzzleHttp\Stream\Stream::factory``, and
+  ``GuzzleHttp\Stream\Utils::create`` no longer accept a size in the second
+  argument. They now accept an associative array of options, including the
+  "size" key and "metadata" key which can be used to provide custom metadata.
+* Added ``GuzzleHttp\Stream\BufferStream`` to add support for buffering data,
+  and when read, shifting data off of the buffer.
+* Added ``GuzzleHttp\Stream\NullBuffer`` which can be used as a buffer that
+  does not actually store any data.
+* Added ``GuzzleHttp\Stream\AsyncStream`` to provide support for non-blocking
+  streams that can be filled by a remote source (e.g., an event-loop). If a
+  ``drain`` option is provided, the stream can also act as if it is a blocking
+  stream.
+
+2.1.0 (2014-08-17)
+------------------
+
+* Added an InflateStream to inflate gzipped or deflated content.
+* Added ``flush`` to stream wrapper.
+* Added the ability to easily register the GuzzleStreamWrapper if needed.
+
+2.0.0 (2014-08-16)
+------------------
+
+* Deprecated functions.php and moved all of those methods to
+  ``GuzzleHttp\Streams\Utils``. Use ``GuzzleHttp\Stream\Stream::factory()``
+  instead of ``GuzzleHttp\Stream\create()`` to create new streams.
+* Added ``flush()`` to ``StreamInterface``. This method is used to flush any
+  underlying stream write buffers.
+* Added ``FnStream`` to easily decorate stream behavior with callables.
+* ``Utils::hash`` now throws an exception when the stream cannot seek to 0.
+
 1.5.1 (2014-09-10)
 ------------------
 
diff --git a/core/vendor/guzzlehttp/streams/README.rst b/core/vendor/guzzlehttp/streams/README.rst
index 0ff85dd49d19e7bfb8e4abd6307795448664cef6..baff63b37d59ac356f00f0b32b2f5c5ef22ebc9f 100644
--- a/core/vendor/guzzlehttp/streams/README.rst
+++ b/core/vendor/guzzlehttp/streams/README.rst
@@ -4,8 +4,8 @@ Guzzle Streams
 
 Provides a simple abstraction over streams of data.
 
-This library is used in `Guzzle 4 <https://github.com/guzzle/guzzle>`_ and is
-an implementation of the proposed `PSR-7 stream interface <https://github.com/php-fig/fig-standards/blob/master/proposed/http-message.md#34-psrhttpstreaminterface>`_.
+This library is used in `Guzzle 5 <https://github.com/guzzle/guzzle>`_, and is
+(currently) compatible with the WIP PSR-7.
 
 Installation
 ============
@@ -17,7 +17,7 @@ Simply add the following to the composer.json file at the root of your project:
 
     {
       "require": {
-        "guzzlehttp/streams": "~1.0"
+        "guzzlehttp/streams": "~3.0"
       }
     }
 
diff --git a/core/vendor/guzzlehttp/streams/composer.json b/core/vendor/guzzlehttp/streams/composer.json
index cf3825fb15ef0c8f047e30be8447c0878b17eccc..6d7034370bda463f985656ea07b08e78661a141d 100644
--- a/core/vendor/guzzlehttp/streams/composer.json
+++ b/core/vendor/guzzlehttp/streams/composer.json
@@ -1,6 +1,6 @@
 {
     "name": "guzzlehttp/streams",
-    "description": "Provides a simple abstraction over streams of data (Guzzle 4+)",
+    "description": "Provides a simple abstraction over streams of data",
     "homepage": "http://guzzlephp.org/",
     "keywords": ["stream", "guzzle"],
     "license": "MIT",
@@ -18,12 +18,11 @@
         "phpunit/phpunit": "~4.0"
     },
     "autoload": {
-        "psr-4": { "GuzzleHttp\\Stream\\": "src/" },
-        "files": ["src/functions.php"]
+        "psr-4": { "GuzzleHttp\\Stream\\": "src/" }
     },
     "extra": {
         "branch-alias": {
-            "dev-master": "1.5-dev"
+            "dev-master": "3.0-dev"
         }
     }
 }
diff --git a/core/vendor/guzzlehttp/streams/phpunit.xml.dist b/core/vendor/guzzlehttp/streams/phpunit.xml.dist
index 994e1584eac8299fa9d9d37e1856908b52f5f98d..6e758c1927bf71d8c865ea8cd6bfc6bb928a0fbf 100644
--- a/core/vendor/guzzlehttp/streams/phpunit.xml.dist
+++ b/core/vendor/guzzlehttp/streams/phpunit.xml.dist
@@ -9,6 +9,9 @@
     <filter>
         <whitelist>
             <directory suffix=".php">src</directory>
+            <exclude>
+                <file>src/functions.php</file>
+            </exclude>
         </whitelist>
     </filter>
 </phpunit>
diff --git a/core/vendor/guzzlehttp/streams/src/AppendStream.php b/core/vendor/guzzlehttp/streams/src/AppendStream.php
index 406b3adb50551ddaae46f58c4bd765a6ee3cf848..94bda7173f7e2ee02a676ed3764258c056d1a4c3 100644
--- a/core/vendor/guzzlehttp/streams/src/AppendStream.php
+++ b/core/vendor/guzzlehttp/streams/src/AppendStream.php
@@ -1,7 +1,8 @@
 <?php
-
 namespace GuzzleHttp\Stream;
 
+use GuzzleHttp\Stream\Exception\CannotAttachException;
+
 /**
  * Reads from multiple streams, one after the other.
  *
@@ -15,6 +16,7 @@ class AppendStream implements StreamInterface
     private $seekable = true;
     private $current = 0;
     private $pos = 0;
+    private $detached = false;
 
     /**
      * @param StreamInterface[] $streams Streams to decorate. Each stream must
@@ -58,9 +60,9 @@ public function addStream(StreamInterface $stream)
         $this->streams[] = $stream;
     }
 
-    public function getContents($maxLength = -1)
+    public function getContents()
     {
-        return copy_to_string($this, $maxLength);
+        return Utils::copyToString($this);
     }
 
     /**
@@ -87,6 +89,12 @@ public function close()
     public function detach()
     {
         $this->close();
+        $this->detached = true;
+    }
+
+    public function attach($stream)
+    {
+        throw new CannotAttachException();
     }
 
     public function tell()
@@ -204,4 +212,9 @@ public function write($string)
     {
         return false;
     }
+
+    public function getMetadata($key = null)
+    {
+        return $key ? null : [];
+    }
 }
diff --git a/core/vendor/guzzlehttp/streams/src/AsyncReadStream.php b/core/vendor/guzzlehttp/streams/src/AsyncReadStream.php
new file mode 100644
index 0000000000000000000000000000000000000000..25ad96021a760538351632eea7cdb6dae32cdb71
--- /dev/null
+++ b/core/vendor/guzzlehttp/streams/src/AsyncReadStream.php
@@ -0,0 +1,207 @@
+<?php
+namespace GuzzleHttp\Stream;
+
+/**
+ * Represents an asynchronous read-only stream that supports a drain event and
+ * pumping data from a source stream.
+ *
+ * The AsyncReadStream can be used as a completely asynchronous stream, meaning
+ * the data you can read from the stream will immediately return only
+ * the data that is currently buffered.
+ *
+ * AsyncReadStream can also be used in a "blocking" manner if a "pump" function
+ * is provided. When a caller requests more bytes than are available in the
+ * buffer, then the pump function is used to block until the requested number
+ * of bytes are available or the remote source stream has errored, closed, or
+ * timed-out. This behavior isn't strictly "blocking" because the pump function
+ * can send other transfers while waiting on the desired buffer size to be
+ * ready for reading (e.g., continue to tick an event loop).
+ *
+ * @unstable This class is subject to change.
+ */
+class AsyncReadStream implements StreamInterface
+{
+    use StreamDecoratorTrait;
+
+    /** @var callable|null Fn used to notify writers the buffer has drained */
+    private $drain;
+
+    /** @var callable|null Fn used to block for more data */
+    private $pump;
+
+    /** @var int|null Highwater mark of the underlying buffer */
+    private $hwm;
+
+    /** @var bool Whether or not drain needs to be called at some point */
+    private $needsDrain;
+
+    /** @var int The expected size of the remote source */
+    private $size;
+
+    /**
+     * In order to utilize high water marks to tell writers to slow down, the
+     * provided stream must answer to the "hwm" stream metadata variable,
+     * providing the high water mark. If no "hwm" metadata value is available,
+     * then the "drain" functionality is not utilized.
+     *
+     * This class accepts an associative array of configuration options.
+     *
+     * - drain: (callable) Function to invoke when the stream has drained,
+     *   meaning the buffer is now writable again because the size of the
+     *   buffer is at an acceptable level (e.g., below the high water mark).
+     *   The function accepts a single argument, the buffer stream object that
+     *   has drained.
+     * - pump: (callable) A function that accepts the number of bytes to read
+     *   from the source stream. This function will block until all of the data
+     *   that was requested has been read, EOF of the source stream, or the
+     *   source stream is closed.
+     * - size: (int) The expected size in bytes of the data that will be read
+     *   (if known up-front).
+     *
+     * @param StreamInterface $buffer   Buffer that contains the data that has
+     *                                  been read by the event loop.
+     * @param array           $config   Associative array of options.
+     *
+     * @throws \InvalidArgumentException if the buffer is not readable and
+     *                                   writable.
+     */
+    public function __construct(
+        StreamInterface $buffer,
+        array $config = []
+    ) {
+        if (!$buffer->isReadable() || !$buffer->isWritable()) {
+            throw new \InvalidArgumentException(
+                'Buffer must be readable and writable'
+            );
+        }
+
+        if (isset($config['size'])) {
+            $this->size = $config['size'];
+        }
+
+        static $callables = ['pump', 'drain'];
+        foreach ($callables as $check) {
+            if (isset($config[$check])) {
+                if (!is_callable($config[$check])) {
+                    throw new \InvalidArgumentException(
+                        $check . ' must be callable'
+                    );
+                }
+                $this->{$check} = $config[$check];
+            }
+        }
+
+        $this->hwm = $buffer->getMetadata('hwm');
+
+        // Cannot drain when there's no high water mark.
+        if ($this->hwm === null) {
+            $this->drain = null;
+        }
+
+        $this->stream = $buffer;
+    }
+
+    /**
+     * Factory method used to create new async stream and an underlying buffer
+     * if no buffer is provided.
+     *
+     * This function accepts the same options as AsyncReadStream::__construct,
+     * but added the following key value pairs:
+     *
+     * - buffer: (StreamInterface) Buffer used to buffer data. If none is
+     *   provided, a default buffer is created.
+     * - hwm: (int) High water mark to use if a buffer is created on your
+     *   behalf.
+     * - max_buffer: (int) If provided, wraps the utilized buffer in a
+     *   DroppingStream decorator to ensure that buffer does not exceed a given
+     *   length. When exceeded, the stream will begin dropping data. Set the
+     *   max_buffer to 0, to use a NullStream which does not store data.
+     * - write: (callable) A function that is invoked when data is written
+     *   to the underlying buffer. The function accepts the buffer as the first
+     *   argument, and the data being written as the second. The function MUST
+     *   return the number of bytes that were written or false to let writers
+     *   know to slow down.
+     * - drain: (callable) See constructor documentation.
+     * - pump: (callable) See constructor documentation.
+     *
+     * @param array $options Associative array of options.
+     *
+     * @return array Returns an array containing the buffer used to buffer
+     *               data, followed by the ready to use AsyncReadStream object.
+     */
+    public static function create(array $options = [])
+    {
+        $maxBuffer = isset($options['max_buffer'])
+            ? $options['max_buffer']
+            : null;
+
+        if ($maxBuffer === 0) {
+            $buffer = new NullStream();
+        } elseif (isset($options['buffer'])) {
+            $buffer = $options['buffer'];
+        } else {
+            $hwm = isset($options['hwm']) ? $options['hwm'] : 16384;
+            $buffer = new BufferStream($hwm);
+        }
+
+        if ($maxBuffer > 0) {
+            $buffer = new DroppingStream($buffer, $options['max_buffer']);
+        }
+
+        // Call the on_write callback if an on_write function was provided.
+        if (isset($options['write'])) {
+            $onWrite = $options['write'];
+            $buffer = FnStream::decorate($buffer, [
+                'write' => function ($string) use ($buffer, $onWrite) {
+                    $result = $buffer->write($string);
+                    $onWrite($buffer, $string);
+                    return $result;
+                }
+            ]);
+        }
+
+        return [$buffer, new self($buffer, $options)];
+    }
+
+    public function getSize()
+    {
+        return $this->size;
+    }
+
+    public function isWritable()
+    {
+        return false;
+    }
+
+    public function write($string)
+    {
+        return false;
+    }
+
+    public function read($length)
+    {
+        if (!$this->needsDrain && $this->drain) {
+            $this->needsDrain = $this->stream->getSize() >= $this->hwm;
+        }
+
+        $result = $this->stream->read($length);
+
+        // If we need to drain, then drain when the buffer is empty.
+        if ($this->needsDrain && $this->stream->getSize() === 0) {
+            $this->needsDrain = false;
+            $drainFn = $this->drain;
+            $drainFn($this->stream);
+        }
+
+        $resultLen = strlen($result);
+
+        // If a pump was provided, the buffer is still open, and not enough
+        // data was given, then block until the data is provided.
+        if ($this->pump && $resultLen < $length) {
+            $pumpFn = $this->pump;
+            $result .= $pumpFn($length - $resultLen);
+        }
+
+        return $result;
+    }
+}
diff --git a/core/vendor/guzzlehttp/streams/src/BufferStream.php b/core/vendor/guzzlehttp/streams/src/BufferStream.php
new file mode 100644
index 0000000000000000000000000000000000000000..0fffbd63a8c555a95dc7630b9a838c596591d68d
--- /dev/null
+++ b/core/vendor/guzzlehttp/streams/src/BufferStream.php
@@ -0,0 +1,138 @@
+<?php
+namespace GuzzleHttp\Stream;
+
+use GuzzleHttp\Stream\Exception\CannotAttachException;
+
+/**
+ * Provides a buffer stream that can be written to to fill a buffer, and read
+ * from to remove bytes from the buffer.
+ *
+ * This stream returns a "hwm" metadata value that tells upstream consumers
+ * what the configured high water mark of the stream is, or the maximum
+ * preferred size of the buffer.
+ *
+ * @package GuzzleHttp\Stream
+ */
+class BufferStream implements StreamInterface
+{
+    private $hwm;
+    private $buffer = '';
+
+    /**
+     * @param int $hwm High water mark, representing the preferred maximum
+     *                 buffer size. If the size of the buffer exceeds the high
+     *                 water mark, then calls to write will continue to succeed
+     *                 but will return false to inform writers to slow down
+     *                 until the buffer has been drained by reading from it.
+     */
+    public function __construct($hwm = 16384)
+    {
+        $this->hwm = $hwm;
+    }
+
+    public function __toString()
+    {
+        return $this->getContents();
+    }
+
+    public function getContents()
+    {
+        $buffer = $this->buffer;
+        $this->buffer = '';
+
+        return $buffer;
+    }
+
+    public function close()
+    {
+        $this->buffer = '';
+    }
+
+    public function detach()
+    {
+        $this->close();
+    }
+
+    public function attach($stream)
+    {
+        throw new CannotAttachException();
+    }
+
+    public function getSize()
+    {
+        return strlen($this->buffer);
+    }
+
+    public function isReadable()
+    {
+        return true;
+    }
+
+    public function isWritable()
+    {
+        return true;
+    }
+
+    public function isSeekable()
+    {
+        return false;
+    }
+
+    public function seek($offset, $whence = SEEK_SET)
+    {
+        return false;
+    }
+
+    public function eof()
+    {
+        return strlen($this->buffer) === 0;
+    }
+
+    public function tell()
+    {
+        return false;
+    }
+
+    /**
+     * Reads data from the buffer.
+     */
+    public function read($length)
+    {
+        $currentLength = strlen($this->buffer);
+
+        if ($length >= $currentLength) {
+            // No need to slice the buffer because we don't have enough data.
+            $result = $this->buffer;
+            $this->buffer = '';
+        } else {
+            // Slice up the result to provide a subset of the buffer.
+            $result = substr($this->buffer, 0, $length);
+            $this->buffer = substr($this->buffer, $length);
+        }
+
+        return $result;
+    }
+
+    /**
+     * Writes data to the buffer.
+     */
+    public function write($string)
+    {
+        $this->buffer .= $string;
+
+        if (strlen($this->buffer) >= $this->hwm) {
+            return false;
+        }
+
+        return strlen($string);
+    }
+
+    public function getMetadata($key = null)
+    {
+        if ($key == 'hwm') {
+            return $this->hwm;
+        }
+
+        return $key ? null : [];
+    }
+}
diff --git a/core/vendor/guzzlehttp/streams/src/CachingStream.php b/core/vendor/guzzlehttp/streams/src/CachingStream.php
index 2d891b82fb5ec0904d82e13f1c714a9d158268f3..60bb9056c432e60019bafd2b609428c15fd63727 100644
--- a/core/vendor/guzzlehttp/streams/src/CachingStream.php
+++ b/core/vendor/guzzlehttp/streams/src/CachingStream.php
@@ -1,12 +1,13 @@
 <?php
-
 namespace GuzzleHttp\Stream;
 
+use GuzzleHttp\Stream\Exception\SeekException;
+
 /**
  * Stream decorator that can cache previously read bytes from a sequentially
  * read stream.
  */
-class CachingStream implements StreamInterface, MetadataStreamInterface
+class CachingStream implements StreamInterface
 {
     use StreamDecoratorTrait;
 
@@ -37,7 +38,7 @@ public function getSize()
 
     /**
      * {@inheritdoc}
-     * @throws \RuntimeException When seeking with SEEK_END or when seeking
+     * @throws SeekException When seeking with SEEK_END or when seeking
      *     past the total size of the buffer stream
      */
     public function seek($offset, $whence = SEEK_SET)
@@ -52,9 +53,12 @@ public function seek($offset, $whence = SEEK_SET)
 
         // You cannot skip ahead past where you've read from the remote stream
         if ($byte > $this->stream->getSize()) {
-            throw new \RuntimeException(sprintf('Cannot seek to byte %d when '
-                . ' the buffered stream only contains %d bytes',
-                $byte, $this->stream->getSize()));
+            throw new SeekException(
+                $this,
+                $byte,
+                sprintf('Cannot seek to byte %d when the buffered stream only'
+                    . ' contains %d bytes', $byte, $this->stream->getSize())
+            );
         }
 
         return $this->stream->seek($byte);
diff --git a/core/vendor/guzzlehttp/streams/src/DroppingStream.php b/core/vendor/guzzlehttp/streams/src/DroppingStream.php
new file mode 100644
index 0000000000000000000000000000000000000000..56ee80c123a92b906e636adc71dfb95f74968dc5
--- /dev/null
+++ b/core/vendor/guzzlehttp/streams/src/DroppingStream.php
@@ -0,0 +1,42 @@
+<?php
+namespace GuzzleHttp\Stream;
+
+/**
+ * Stream decorator that begins dropping data once the size of the underlying
+ * stream becomes too full.
+ */
+class DroppingStream implements StreamInterface
+{
+    use StreamDecoratorTrait;
+
+    private $maxLength;
+
+    /**
+     * @param StreamInterface $stream    Underlying stream to decorate.
+     * @param int             $maxLength Maximum size before dropping data.
+     */
+    public function __construct(StreamInterface $stream, $maxLength)
+    {
+        $this->stream = $stream;
+        $this->maxLength = $maxLength;
+    }
+
+    public function write($string)
+    {
+        $diff = $this->maxLength - $this->stream->getSize();
+
+        // Begin returning false when the underlying stream is too large.
+        if ($diff <= 0) {
+            return false;
+        }
+
+        // Write the stream or a subset of the stream if needed.
+        if (strlen($string) < $diff) {
+            return $this->stream->write($string);
+        }
+
+        $this->stream->write(substr($string, 0, $diff));
+
+        return false;
+    }
+}
diff --git a/core/vendor/guzzlehttp/streams/src/Exception/CannotAttachException.php b/core/vendor/guzzlehttp/streams/src/Exception/CannotAttachException.php
new file mode 100644
index 0000000000000000000000000000000000000000..e631b9fa44bb6410eef808e33d19fa32edd42193
--- /dev/null
+++ b/core/vendor/guzzlehttp/streams/src/Exception/CannotAttachException.php
@@ -0,0 +1,4 @@
+<?php
+namespace GuzzleHttp\Stream\Exception;
+
+class CannotAttachException extends \RuntimeException {}
diff --git a/core/vendor/guzzlehttp/streams/src/Exception/SeekException.php b/core/vendor/guzzlehttp/streams/src/Exception/SeekException.php
new file mode 100644
index 0000000000000000000000000000000000000000..3f6d5ebad5180af15686dca6df791e2456463358
--- /dev/null
+++ b/core/vendor/guzzlehttp/streams/src/Exception/SeekException.php
@@ -0,0 +1,27 @@
+<?php
+namespace GuzzleHttp\Stream\Exception;
+
+use GuzzleHttp\Stream\StreamInterface;
+
+/**
+ * Exception thrown when a seek fails on a stream.
+ */
+class SeekException extends \RuntimeException
+{
+    private $stream;
+
+    public function __construct(StreamInterface $stream, $pos = 0, $msg = '')
+    {
+        $this->stream = $stream;
+        $msg = $msg ?: 'Could not seek the stream to position ' . $pos;
+        parent::__construct($msg);
+    }
+
+    /**
+     * @return StreamInterface
+     */
+    public function getStream()
+    {
+        return $this->stream;
+    }
+}
diff --git a/core/vendor/guzzlehttp/streams/src/FnStream.php b/core/vendor/guzzlehttp/streams/src/FnStream.php
new file mode 100644
index 0000000000000000000000000000000000000000..6b5872d7f6c599b4f5c4b1858b4a3073cf918fab
--- /dev/null
+++ b/core/vendor/guzzlehttp/streams/src/FnStream.php
@@ -0,0 +1,147 @@
+<?php
+namespace GuzzleHttp\Stream;
+
+/**
+ * Compose stream implementations based on a hash of functions.
+ *
+ * Allows for easy testing and extension of a provided stream without needing
+ * to create a concrete class for a simple extension point.
+ */
+class FnStream implements StreamInterface
+{
+    /** @var array */
+    private $methods;
+
+    /** @var array Methods that must be implemented in the given array */
+    private static $slots = ['__toString', 'close', 'detach', 'attach',
+        'getSize', 'tell', 'eof', 'isSeekable', 'seek', 'isWritable', 'write',
+        'isReadable', 'read', 'getContents', 'getMetadata'];
+
+    /**
+     * @param array $methods Hash of method name to a callable.
+     */
+    public function __construct(array $methods)
+    {
+        $this->methods = $methods;
+
+        // Create the functions on the class
+        foreach ($methods as $name => $fn) {
+            $this->{'_fn_' . $name} = $fn;
+        }
+    }
+
+    /**
+     * Lazily determine which methods are not implemented.
+     * @throws \BadMethodCallException
+     */
+    public function __get($name)
+    {
+        throw new \BadMethodCallException(str_replace('_fn_', '', $name)
+            . '() is not implemented in the FnStream');
+    }
+
+    /**
+     * The close method is called on the underlying stream only if possible.
+     */
+    public function __destruct()
+    {
+        if (isset($this->_fn_close)) {
+            call_user_func($this->_fn_close);
+        }
+    }
+
+    /**
+     * Adds custom functionality to an underlying stream by intercepting
+     * specific method calls.
+     *
+     * @param StreamInterface $stream  Stream to decorate
+     * @param array           $methods Hash of method name to a closure
+     *
+     * @return FnStream
+     */
+    public static function decorate(StreamInterface $stream, array $methods)
+    {
+        // If any of the required methods were not provided, then simply
+        // proxy to the decorated stream.
+        foreach (array_diff(self::$slots, array_keys($methods)) as $diff) {
+            $methods[$diff] = [$stream, $diff];
+        }
+
+        return new self($methods);
+    }
+
+    public function __toString()
+    {
+        return call_user_func($this->_fn___toString);
+    }
+
+    public function close()
+    {
+        return call_user_func($this->_fn_close);
+    }
+
+    public function detach()
+    {
+        return call_user_func($this->_fn_detach);
+    }
+
+    public function attach($stream)
+    {
+        return call_user_func($this->_fn_attach, $stream);
+    }
+
+    public function getSize()
+    {
+        return call_user_func($this->_fn_getSize);
+    }
+
+    public function tell()
+    {
+        return call_user_func($this->_fn_tell);
+    }
+
+    public function eof()
+    {
+        return call_user_func($this->_fn_eof);
+    }
+
+    public function isSeekable()
+    {
+        return call_user_func($this->_fn_isSeekable);
+    }
+
+    public function seek($offset, $whence = SEEK_SET)
+    {
+        return call_user_func($this->_fn_seek, $offset, $whence);
+    }
+
+    public function isWritable()
+    {
+        return call_user_func($this->_fn_isWritable);
+    }
+
+    public function write($string)
+    {
+        return call_user_func($this->_fn_write, $string);
+    }
+
+    public function isReadable()
+    {
+        return call_user_func($this->_fn_isReadable);
+    }
+
+    public function read($length)
+    {
+        return call_user_func($this->_fn_read, $length);
+    }
+
+    public function getContents()
+    {
+        return call_user_func($this->_fn_getContents);
+    }
+
+    public function getMetadata($key = null)
+    {
+        return call_user_func($this->_fn_getMetadata, $key);
+    }
+}
diff --git a/core/vendor/guzzlehttp/streams/src/GuzzleStreamWrapper.php b/core/vendor/guzzlehttp/streams/src/GuzzleStreamWrapper.php
index 9f5a826e67f517b65c0cc79495a1f150a8c97080..4d049a6936d688dcafc6fc594acb395b3965b0d7 100644
--- a/core/vendor/guzzlehttp/streams/src/GuzzleStreamWrapper.php
+++ b/core/vendor/guzzlehttp/streams/src/GuzzleStreamWrapper.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp\Stream;
 
 /**
@@ -26,9 +25,7 @@ class GuzzleStreamWrapper
      */
     public static function getResource(StreamInterface $stream)
     {
-        if (!in_array('guzzle', stream_get_wrappers())) {
-            stream_wrapper_register('guzzle', __CLASS__);
-        }
+        self::register();
 
         if ($stream->isReadable()) {
             $mode = $stream->isWritable() ? 'r+' : 'r';
@@ -44,6 +41,16 @@ public static function getResource(StreamInterface $stream)
         ]));
     }
 
+    /**
+     * Registers the stream wrapper if needed
+     */
+    public static function register()
+    {
+        if (!in_array('guzzle', stream_get_wrappers())) {
+            stream_wrapper_register('guzzle', __CLASS__);
+        }
+    }
+
     public function stream_open($path, $mode, $options, &$opened_path)
     {
         $options = stream_context_get_options($this->context);
diff --git a/core/vendor/guzzlehttp/streams/src/InflateStream.php b/core/vendor/guzzlehttp/streams/src/InflateStream.php
new file mode 100644
index 0000000000000000000000000000000000000000..978af21031b9f83a174008e8750d4d0ebcc20b5f
--- /dev/null
+++ b/core/vendor/guzzlehttp/streams/src/InflateStream.php
@@ -0,0 +1,27 @@
+<?php
+namespace GuzzleHttp\Stream;
+
+/**
+ * Uses PHP's zlib.inflate filter to inflate deflate or gzipped content.
+ *
+ * This stream decorator skips the first 10 bytes of the given stream to remove
+ * the gzip header, converts the provided stream to a PHP stream resource,
+ * then appends the zlib.inflate filter. The stream is then converted back
+ * to a Guzzle stream resource to be used as a Guzzle stream.
+ *
+ * @link http://tools.ietf.org/html/rfc1952
+ * @link http://php.net/manual/en/filters.compression.php
+ */
+class InflateStream implements StreamInterface
+{
+    use StreamDecoratorTrait;
+
+    public function __construct(StreamInterface $stream)
+    {
+        // Skip the first 10 bytes
+        $stream = new LimitStream($stream, -1, 10);
+        $resource = GuzzleStreamWrapper::getResource($stream);
+        stream_filter_append($resource, 'zlib.inflate', STREAM_FILTER_READ);
+        $this->stream = new Stream($resource);
+    }
+}
diff --git a/core/vendor/guzzlehttp/streams/src/LazyOpenStream.php b/core/vendor/guzzlehttp/streams/src/LazyOpenStream.php
index 35f0df7a69626eebdb1ff5e6b3251a88639006ee..6242ee7b57fa0783cc2f79aa45c6391c2c689b52 100644
--- a/core/vendor/guzzlehttp/streams/src/LazyOpenStream.php
+++ b/core/vendor/guzzlehttp/streams/src/LazyOpenStream.php
@@ -5,17 +5,16 @@
  * Lazily reads or writes to a file that is opened only after an IO operation
  * take place on the stream.
  */
-class LazyOpenStream implements StreamInterface, MetadataStreamInterface
+class LazyOpenStream implements StreamInterface
 {
+    use StreamDecoratorTrait;
+
     /** @var string File to open */
     private $filename;
 
     /** @var string $mode */
     private $mode;
 
-    /** @var MetadataStreamInterface */
-    private $stream;
-
     /**
      * @param string $filename File to lazily open
      * @param string $mode     fopen mode to use when opening the stream
@@ -26,92 +25,13 @@ public function __construct($filename, $mode)
         $this->mode = $mode;
     }
 
-    public function __toString()
-    {
-        try {
-            return (string) $this->getStream();
-        } catch (\Exception $e) {
-            return '';
-        }
-    }
-
-    private function getStream()
-    {
-        if (!$this->stream) {
-            $this->stream = create(safe_open($this->filename, $this->mode));
-        }
-
-        return $this->stream;
-    }
-
-    public function getContents($maxLength = -1)
-    {
-        return copy_to_string($this->getStream(), $maxLength);
-    }
-
-    public function close()
-    {
-        if ($this->stream) {
-            $this->stream->close();
-        }
-    }
-
-    public function detach()
-    {
-        $stream = $this->getStream();
-        $result = $stream->detach();
-        $this->close();
-
-        return $result;
-    }
-
-    public function tell()
-    {
-        return $this->stream ? $this->stream->tell() : 0;
-    }
-
-    public function getSize()
-    {
-        return $this->getStream()->getSize();
-    }
-
-    public function eof()
-    {
-        return $this->getStream()->eof();
-    }
-
-    public function seek($offset, $whence = SEEK_SET)
-    {
-        return $this->getStream()->seek($offset, $whence);
-    }
-
-    public function read($length)
-    {
-        return $this->getStream()->read($length);
-    }
-
-    public function isReadable()
-    {
-        return $this->getStream()->isReadable();
-    }
-
-    public function isWritable()
-    {
-        return $this->getStream()->isWritable();
-    }
-
-    public function isSeekable()
-    {
-        return $this->getStream()->isSeekable();
-    }
-
-    public function write($string)
-    {
-        return $this->getStream()->write($string);
-    }
-
-    public function getMetadata($key = null)
+    /**
+     * Creates the underlying stream lazily when required.
+     *
+     * @return StreamInterface
+     */
+    protected function createStream()
     {
-        return $this->getStream()->getMetadata($key);
+        return Stream::factory(Utils::open($this->filename, $this->mode));
     }
 }
diff --git a/core/vendor/guzzlehttp/streams/src/LimitStream.php b/core/vendor/guzzlehttp/streams/src/LimitStream.php
index 63345ba35e3e299eabf4fa72dc188194817eb413..e9fad98573318b55a4b2f70805746956a52e1036 100644
--- a/core/vendor/guzzlehttp/streams/src/LimitStream.php
+++ b/core/vendor/guzzlehttp/streams/src/LimitStream.php
@@ -1,11 +1,12 @@
 <?php
-
 namespace GuzzleHttp\Stream;
 
+use GuzzleHttp\Stream\Exception\SeekException;
+
 /**
  * Decorator used to return only a subset of a stream
  */
-class LimitStream implements StreamInterface, MetadataStreamInterface
+class LimitStream implements StreamInterface
 {
     use StreamDecoratorTrait;
 
@@ -34,15 +35,22 @@ public function __construct(
 
     public function eof()
     {
+        // Always return true if the underlying stream is EOF
+        if ($this->stream->eof()) {
+            return true;
+        }
+
+        // No limit and the underlying stream is not at EOF
         if ($this->limit == -1) {
-            return $this->stream->eof();
+            return false;
         }
 
         $tell = $this->stream->tell();
+        if ($tell === false) {
+            return false;
+        }
 
-        return $tell === false ||
-            ($tell >= $this->offset + $this->limit) ||
-            $this->stream->eof();
+        return $tell >= $this->offset + $this->limit;
     }
 
     /**
@@ -66,16 +74,16 @@ public function getSize()
      */
     public function seek($offset, $whence = SEEK_SET)
     {
-        if ($whence != SEEK_SET) {
+        if ($whence !== SEEK_SET || $offset < 0) {
             return false;
         }
 
-        if ($offset < $this->offset) {
-            $offset = $this->offset;
-        }
+        $offset += $this->offset;
 
-        if ($this->limit !== -1 && $offset > ($this->offset + $this->limit)) {
-            $offset = $this->offset + $this->limit;
+        if ($this->limit !== -1) {
+            if ($offset > $this->offset + $this->limit) {
+                $offset = $this->offset + $this->limit;
+            }
         }
 
         return $this->stream->seek($offset);
@@ -96,23 +104,25 @@ public function tell()
      * @param int $offset Offset to seek to and begin byte limiting from
      *
      * @return self
-     * @throws \RuntimeException
+     * @throws SeekException
      */
     public function setOffset($offset)
     {
-        $this->offset = $offset;
         $current = $this->stream->tell();
+
         if ($current !== $offset) {
             // If the stream cannot seek to the offset position, then read to it
             if (!$this->stream->seek($offset)) {
                 if ($current > $offset) {
-                    throw new \RuntimeException("Cannot seek to stream offset {$offset}");
+                    throw new SeekException($this, $offset);
                 } else {
                     $this->stream->read($offset - $current);
                 }
             }
         }
 
+        $this->offset = $offset;
+
         return $this;
     }
 
diff --git a/core/vendor/guzzlehttp/streams/src/MetadataStreamInterface.php b/core/vendor/guzzlehttp/streams/src/MetadataStreamInterface.php
index 3cd96d68aa8063047f13b8b3dd37873fe62531ff..c1433ad83e8158407368ba7f2829cddf662bc9f7 100644
--- a/core/vendor/guzzlehttp/streams/src/MetadataStreamInterface.php
+++ b/core/vendor/guzzlehttp/streams/src/MetadataStreamInterface.php
@@ -1,25 +1,11 @@
 <?php
-
 namespace GuzzleHttp\Stream;
 
 /**
- * Represents a stream that contains metadata
+ * This interface is deprecated and should no longer be used. Just use
+ * StreamInterface now that the getMetadata method has been added to
+ * StreamInterface.
+ *
+ * @deprecated
  */
-interface MetadataStreamInterface extends StreamInterface
-{
-    /**
-     * Get stream metadata as an associative array or retrieve a specific key.
-     *
-     * The keys returned are identical to the keys returned from PHP's
-     * stream_get_meta_data() function.
-     *
-     * @param string $key Specific metadata to retrieve.
-     *
-     * @return array|mixed|null Returns an associative array if no key is
-     *                          no key is provided. Returns a specific key
-     *                          value if a key is provided and the value is
-     *                          found, or null if the key is not found.
-     * @see http://php.net/manual/en/function.stream-get-meta-data.php
-     */
-    public function getMetadata($key = null);
-}
+interface MetadataStreamInterface extends StreamInterface {}
diff --git a/core/vendor/guzzlehttp/streams/src/NoSeekStream.php b/core/vendor/guzzlehttp/streams/src/NoSeekStream.php
index 7d02fc31b655e6047f77af41b2f3d29b5737aa75..3d42395d76b45b8e97e983cc190b934439fd96da 100644
--- a/core/vendor/guzzlehttp/streams/src/NoSeekStream.php
+++ b/core/vendor/guzzlehttp/streams/src/NoSeekStream.php
@@ -1,11 +1,10 @@
 <?php
-
 namespace GuzzleHttp\Stream;
 
 /**
  * Stream decorator that prevents a stream from being seeked
  */
-class NoSeekStream implements StreamInterface, MetadataStreamInterface
+class NoSeekStream implements StreamInterface
 {
     use StreamDecoratorTrait;
 
@@ -18,4 +17,9 @@ public function isSeekable()
     {
         return false;
     }
+
+    public function attach($stream)
+    {
+        $this->stream->attach($stream);
+    }
 }
diff --git a/core/vendor/guzzlehttp/streams/src/NullStream.php b/core/vendor/guzzlehttp/streams/src/NullStream.php
new file mode 100644
index 0000000000000000000000000000000000000000..41ee776683a0f0f26042cc1172f08ed886618d07
--- /dev/null
+++ b/core/vendor/guzzlehttp/streams/src/NullStream.php
@@ -0,0 +1,78 @@
+<?php
+namespace GuzzleHttp\Stream;
+use GuzzleHttp\Stream\Exception\CannotAttachException;
+
+/**
+ * Does not store any data written to it.
+ */
+class NullStream implements StreamInterface
+{
+    public function __toString()
+    {
+        return '';
+    }
+
+    public function getContents()
+    {
+        return '';
+    }
+
+    public function close() {}
+
+    public function detach() {}
+
+    public function attach($stream)
+    {
+        throw new CannotAttachException();
+    }
+
+    public function getSize()
+    {
+        return 0;
+    }
+
+    public function isReadable()
+    {
+        return true;
+    }
+
+    public function isWritable()
+    {
+        return true;
+    }
+
+    public function isSeekable()
+    {
+        return true;
+    }
+
+    public function eof()
+    {
+        return true;
+    }
+
+    public function tell()
+    {
+        return 0;
+    }
+
+    public function seek($offset, $whence = SEEK_SET)
+    {
+        return false;
+    }
+
+    public function read($length)
+    {
+        return false;
+    }
+
+    public function write($string)
+    {
+        return strlen($string);
+    }
+
+    public function getMetadata($key = null)
+    {
+        return $key ? null : [];
+    }
+}
diff --git a/core/vendor/guzzlehttp/streams/src/PumpStream.php b/core/vendor/guzzlehttp/streams/src/PumpStream.php
new file mode 100644
index 0000000000000000000000000000000000000000..9963207296b2c5fc899823c16e0199a8ae5278d9
--- /dev/null
+++ b/core/vendor/guzzlehttp/streams/src/PumpStream.php
@@ -0,0 +1,161 @@
+<?php
+namespace GuzzleHttp\Stream;
+
+use GuzzleHttp\Stream\Exception\CannotAttachException;
+
+/**
+ * Provides a read only stream that pumps data from a PHP callable.
+ *
+ * When invoking the provided callable, the PumpStream will pass the amount of
+ * data requested to read to the callable. The callable can choose to ignore
+ * this value and return fewer or more bytes than requested. Any extra data
+ * returned by the provided callable is buffered internally until drained using
+ * the read() function of the PumpStream. The provided callable MUST return
+ * false when there is no more data to read.
+ */
+class PumpStream implements StreamInterface
+{
+    /** @var callable */
+    private $source;
+
+    /** @var int */
+    private $size;
+
+    /** @var int */
+    private $tellPos = 0;
+
+    /** @var array */
+    private $metadata;
+
+    /** @var BufferStream */
+    private $buffer;
+
+    /**
+     * @param callable $source Source of the stream data. The callable MAY
+     *                         accept an integer argument used to control the
+     *                         amount of data to return. The callable MUST
+     *                         return a string when called, or false on error
+     *                         or EOF.
+     * @param array $options   Stream options:
+     *                         - metadata: Hash of metadata to use with stream.
+     *                         - size: Size of the stream, if known.
+     */
+    public function __construct(callable $source, array $options = [])
+    {
+        $this->source = $source;
+        $this->size = isset($options['size']) ? $options['size'] : null;
+        $this->metadata = isset($options['metadata']) ? $options['metadata'] : [];
+        $this->buffer = new BufferStream();
+    }
+
+    public function __toString()
+    {
+        return Utils::copyToString($this);
+    }
+
+    public function close()
+    {
+        $this->detach();
+    }
+
+    public function detach()
+    {
+        $this->tellPos = false;
+        $this->source = null;
+    }
+
+    public function attach($stream)
+    {
+        throw new CannotAttachException();
+    }
+
+    public function getSize()
+    {
+        return $this->size;
+    }
+
+    public function tell()
+    {
+        return $this->tellPos;
+    }
+
+    public function eof()
+    {
+        return !$this->source;
+    }
+
+    public function isSeekable()
+    {
+        return false;
+    }
+
+    public function seek($offset, $whence = SEEK_SET)
+    {
+        return false;
+    }
+
+    public function isWritable()
+    {
+        return false;
+    }
+
+    public function write($string)
+    {
+        return false;
+    }
+
+    public function isReadable()
+    {
+        return true;
+    }
+
+    public function read($length)
+    {
+        $data = $this->buffer->read($length);
+        $readLen = strlen($data);
+        $this->tellPos += $readLen;
+        $remaining = $length - $readLen;
+
+        if ($remaining) {
+            $this->pump($remaining);
+            $data .= $this->buffer->read($remaining);
+            $this->tellPos += strlen($data) - $readLen;
+        }
+
+        return $data;
+    }
+
+    public function getContents()
+    {
+        $result = '';
+        while (!$this->eof()) {
+            $result .= $this->read(1000000);
+        }
+
+        return $result;
+    }
+
+    public function getMetadata($key = null)
+    {
+        if (!$key) {
+            return $this->metadata;
+        }
+
+        return isset($this->metadata[$key]) ? $this->metadata[$key] : null;
+    }
+
+    private function pump($length)
+    {
+        if ($this->source) {
+            do {
+                $data = call_user_func($this->source, $length);
+                if ($data === false || $data === null) {
+                    $this->source = null;
+                    return;
+                }
+                $this->buffer->write($data);
+                $length -= strlen($data);
+            } while ($length > 0);
+        }
+    }
+}
diff --git a/core/vendor/guzzlehttp/streams/src/Stream.php b/core/vendor/guzzlehttp/streams/src/Stream.php
index 0ff006eba0620d2ee189bb61a5d01fe73a3d2ef1..7adbc5e3f3ec44c1b6d8cb1bd72bec5a332e8fcb 100644
--- a/core/vendor/guzzlehttp/streams/src/Stream.php
+++ b/core/vendor/guzzlehttp/streams/src/Stream.php
@@ -1,11 +1,10 @@
 <?php
-
 namespace GuzzleHttp\Stream;
 
 /**
  * PHP stream implementation
  */
-class Stream implements MetadataStreamInterface
+class Stream implements StreamInterface
 {
     private $stream;
     private $size;
@@ -13,6 +12,7 @@ class Stream implements MetadataStreamInterface
     private $readable;
     private $writable;
     private $uri;
+    private $customMetadata;
 
     /** @var array Hash of readable and writable stream types */
     private static $readWriteHash = [
@@ -31,39 +31,89 @@ class Stream implements MetadataStreamInterface
     ];
 
     /**
-     * Create a new stream based on the input type
+     * Create a new stream based on the input type.
+     *
+     * This factory accepts the same associative array of options as described
+     * in the constructor.
      *
      * @param resource|string|StreamInterface $resource Entity body data
-     * @param int                             $size     Size of the data contained in the resource
+     * @param array                           $options  Additional options
      *
-     * @return StreamInterface
+     * @return Stream
      * @throws \InvalidArgumentException if the $resource arg is not valid.
      */
-    public static function factory($resource = '', $size = null)
+    public static function factory($resource = '', array $options = [])
     {
-        return create($resource, $size);
+        $type = gettype($resource);
+
+        if ($type == 'string') {
+            $stream = fopen('php://temp', 'r+');
+            if ($resource !== '') {
+                fwrite($stream, $resource);
+                fseek($stream, 0);
+            }
+            return new self($stream, $options);
+        }
+
+        if ($type == 'resource') {
+            return new self($resource, $options);
+        }
+
+        if ($resource instanceof StreamInterface) {
+            return $resource;
+        }
+
+        if ($type == 'object' && method_exists($resource, '__toString')) {
+            return self::factory((string) $resource, $options);
+        }
+
+        if (is_callable($resource)) {
+            return new PumpStream($resource, $options);
+        }
+
+        if ($resource instanceof \Iterator) {
+            return new PumpStream(function () use ($resource) {
+                if (!$resource->valid()) {
+                    return false;
+                }
+                $result = $resource->current();
+                $resource->next();
+                return $result;
+            }, $options);
+        }
+
+        throw new \InvalidArgumentException('Invalid resource type: ' . $type);
     }
 
     /**
-     * @param resource $stream Stream resource to wrap
-     * @param int      $size   Size of the stream in bytes. Only pass if the
-     *                         size cannot be obtained from the stream.
+     * This constructor accepts an associative array of options.
+     *
+     * - size: (int) If a read stream would otherwise have an indeterminate
+     *   size, but the size is known due to foreknownledge, then you can
+     *   provide that size, in bytes.
+     * - metadata: (array) Any additional metadata to return when the metadata
+     *   of the stream is accessed.
+     *
+     * @param resource $stream  Stream resource to wrap.
+     * @param array    $options Associative array of options.
      *
      * @throws \InvalidArgumentException if the stream is not a stream resource
      */
-    public function __construct($stream, $size = null)
+    public function __construct($stream, $options = [])
     {
         if (!is_resource($stream)) {
             throw new \InvalidArgumentException('Stream must be a resource');
         }
 
-        $this->size = $size;
-        $this->stream = $stream;
-        $meta = stream_get_meta_data($this->stream);
-        $this->seekable = $meta['seekable'];
-        $this->readable = isset(self::$readWriteHash['read'][$meta['mode']]);
-        $this->writable = isset(self::$readWriteHash['write'][$meta['mode']]);
-        $this->uri = isset($meta['uri']) ? $meta['uri'] : null;
+        if (isset($options['size'])) {
+            $this->size = $options['size'];
+        }
+
+        $this->customMetadata = isset($options['metadata'])
+            ? $options['metadata']
+            : [];
+
+        $this->attach($stream);
     }
 
     /**
@@ -85,11 +135,9 @@ public function __toString()
         return (string) stream_get_contents($this->stream);
     }
 
-    public function getContents($maxLength = -1)
+    public function getContents()
     {
-        return $this->stream
-            ? stream_get_contents($this->stream, $maxLength)
-            : '';
+        return $this->stream ? stream_get_contents($this->stream) : '';
     }
 
     public function close()
@@ -110,6 +158,16 @@ public function detach()
         return $result;
     }
 
+    public function attach($stream)
+    {
+        $this->stream = $stream;
+        $meta = stream_get_meta_data($this->stream);
+        $this->seekable = $meta['seekable'];
+        $this->readable = isset(self::$readWriteHash['read'][$meta['mode']]);
+        $this->writable = isset(self::$readWriteHash['write'][$meta['mode']]);
+        $this->uri = $this->getMetadata('uri');
+    }
+
     public function getSize()
     {
         if ($this->size !== null) {
@@ -151,7 +209,7 @@ public function isSeekable()
 
     public function eof()
     {
-        return $this->stream && feof($this->stream);
+        return !$this->stream || feof($this->stream);
     }
 
     public function tell()
@@ -175,7 +233,7 @@ public function seek($offset, $whence = SEEK_SET)
 
     public function read($length)
     {
-        return $this->readable ? fread($this->stream, $length) : '';
+        return $this->readable ? fread($this->stream, $length) : false;
     }
 
     public function write($string)
@@ -186,24 +244,18 @@ public function write($string)
         return $this->writable ? fwrite($this->stream, $string) : false;
     }
 
-    /**
-     * Get stream metadata as an associative array or retrieve a specific key.
-     *
-     * The keys returned are identical to the keys returned from PHP's
-     * stream_get_meta_data() function.
-     *
-     * @param string $key Specific metadata to retrieve.
-     *
-     * @return array|mixed|null Returns an associative array if no key is
-     *                          no key is provided. Returns a specific key
-     *                          value if a key is provided and the value is
-     *                          found, or null if the key is not found.
-     * @see http://php.net/manual/en/function.stream-get-meta-data.php
-     */
     public function getMetadata($key = null)
     {
-        $meta = $this->stream ? stream_get_meta_data($this->stream) : [];
+        if (!$this->stream) {
+            return $key ? null : [];
+        } elseif (!$key) {
+            return $this->customMetadata + stream_get_meta_data($this->stream);
+        } elseif (isset($this->customMetadata[$key])) {
+            return $this->customMetadata[$key];
+        }
+
+        $meta = stream_get_meta_data($this->stream);
 
-        return !$key ? $meta : (isset($meta[$key]) ? $meta[$key] : null);
+        return isset($meta[$key]) ? $meta[$key] : null;
     }
 }
diff --git a/core/vendor/guzzlehttp/streams/src/StreamDecoratorTrait.php b/core/vendor/guzzlehttp/streams/src/StreamDecoratorTrait.php
index ecb902a4b9b521fa29d28fdffca624543ae2899f..39c19c58ccf1cf2ec95e807c0868383a7641313b 100644
--- a/core/vendor/guzzlehttp/streams/src/StreamDecoratorTrait.php
+++ b/core/vendor/guzzlehttp/streams/src/StreamDecoratorTrait.php
@@ -1,15 +1,13 @@
 <?php
-
 namespace GuzzleHttp\Stream;
+use GuzzleHttp\Stream\Exception\CannotAttachException;
 
 /**
  * Stream decorator trait
+ * @property StreamInterface stream
  */
 trait StreamDecoratorTrait
 {
-    /** @var StreamInterface Decorated stream */
-    private $stream;
-
     /**
      * @param StreamInterface $stream Stream to decorate
      */
@@ -18,6 +16,20 @@ public function __construct(StreamInterface $stream)
         $this->stream = $stream;
     }
 
+    /**
+     * Magic method used to create a new stream if streams are not added in
+     * the constructor of a decorator (e.g., LazyOpenStream).
+     */
+    public function __get($name)
+    {
+        if ($name == 'stream') {
+            $this->stream = $this->createStream();
+            return $this->stream;
+        }
+
+        throw new \UnexpectedValueException("$name not found on class");
+    }
+
     public function __toString()
     {
         try {
@@ -31,9 +43,9 @@ public function __toString()
         }
     }
 
-    public function getContents($maxLength = -1)
+    public function getContents()
     {
-        return copy_to_string($this, $maxLength);
+        return Utils::copyToString($this);
     }
 
     /**
@@ -59,9 +71,7 @@ public function close()
 
     public function getMetadata($key = null)
     {
-        return $this->stream instanceof MetadataStreamInterface
-            ? $this->stream->getMetadata($key)
-            : null;
+        return $this->stream->getMetadata($key);
     }
 
     public function detach()
@@ -69,6 +79,11 @@ public function detach()
         return $this->stream->detach();
     }
 
+    public function attach($stream)
+    {
+        throw new CannotAttachException();
+    }
+
     public function getSize()
     {
         return $this->stream->getSize();
@@ -113,4 +128,16 @@ public function write($string)
     {
         return $this->stream->write($string);
     }
+
+    /**
+     * Implement in subclasses to dynamically create streams when requested.
+     *
+     * @return StreamInterface
+     * @throws \BadMethodCallException
+     */
+    protected function createStream()
+    {
+        throw new \BadMethodCallException('createStream() not implemented in '
+            . get_class($this));
+    }
 }
diff --git a/core/vendor/guzzlehttp/streams/src/StreamInterface.php b/core/vendor/guzzlehttp/streams/src/StreamInterface.php
index b6b04251cccf578f4d7684f05dd39c8e1bf417c8..fd19c6f25ae12a7757f85498d75812194d59b727 100644
--- a/core/vendor/guzzlehttp/streams/src/StreamInterface.php
+++ b/core/vendor/guzzlehttp/streams/src/StreamInterface.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp\Stream;
 
 /**
@@ -36,6 +35,23 @@ public function close();
      */
     public function detach();
 
+    /**
+     * Replaces the underlying stream resource with the provided stream.
+     *
+     * Use this method to replace the underlying stream with another; as an
+     * example, in server-side code, if you decide to return a file, you
+     * would replace the original content-oriented stream with the file
+     * stream.
+     *
+     * Any internal state such as caching of cursor position should be reset
+     * when attach() is called, as the stream has changed.
+     *
+     * @param resource $stream
+     *
+     * @return void
+     */
+    public function attach($stream);
+
     /**
      * Get the size of the stream if known
      *
@@ -93,7 +109,8 @@ public function isWritable();
      * @param string $string The string that is to be written.
      *
      * @return int|bool Returns the number of bytes written to the stream on
-     *                  success or false on failure.
+     *                  success returns false on failure (e.g., broken pipe,
+     *                  writer needs to slow down, buffer is full, etc.)
      */
     public function write($string);
 
@@ -116,11 +133,27 @@ public function isReadable();
     public function read($length);
 
     /**
-     * Returns the remaining contents in a string, up to maxlength bytes.
+     * Returns the remaining contents of the stream as a string.
+     *
+     * Note: this could potentially load a large amount of data into memory.
      *
-     * @param int $maxLength The maximum bytes to read. Defaults to -1 (read
-     *                       all the remaining buffer).
      * @return string
      */
-    public function getContents($maxLength = -1);
+    public function getContents();
+
+    /**
+     * Get stream metadata as an associative array or retrieve a specific key.
+     *
+     * The keys returned are identical to the keys returned from PHP's
+     * stream_get_meta_data() function.
+     *
+     * @param string $key Specific metadata to retrieve.
+     *
+     * @return array|mixed|null Returns an associative array if no key is
+     *                          no key is provided. Returns a specific key
+     *                          value if a key is provided and the value is
+     *                          found, or null if the key is not found.
+     * @see http://php.net/manual/en/function.stream-get-meta-data.php
+     */
+    public function getMetadata($key = null);
 }
diff --git a/core/vendor/guzzlehttp/streams/src/functions.php b/core/vendor/guzzlehttp/streams/src/Utils.php
similarity index 69%
rename from core/vendor/guzzlehttp/streams/src/functions.php
rename to core/vendor/guzzlehttp/streams/src/Utils.php
index 372d51ba17da3d84f9e73e47152014b969b8d575..94cb42d31d15d879c7414f223a36f729cbb1ca67 100644
--- a/core/vendor/guzzlehttp/streams/src/functions.php
+++ b/core/vendor/guzzlehttp/streams/src/Utils.php
@@ -1,45 +1,47 @@
 <?php
 namespace GuzzleHttp\Stream;
 
-if (!defined('GUZZLE_STREAMS_FUNCTIONS')) {
-
-    define('GUZZLE_STREAMS_FUNCTIONS', true);
-
+use GuzzleHttp\Stream\Exception\SeekException;
+
+/**
+ * Static utility class because PHP's autoloaders don't support the concept
+ * of namespaced function autoloading.
+ */
+class Utils
+{
     /**
-     * Create a new stream based on the input type
+     * Safely opens a PHP stream resource using a filename.
      *
-     * @param resource|string|StreamInterface $resource Entity body data
-     * @param int $size Size of the data contained in the resource
+     * When fopen fails, PHP normally raises a warning. This function adds an
+     * error handler that checks for errors and throws an exception instead.
      *
-     * @return StreamInterface
-     * @throws \InvalidArgumentException if the $resource arg is not valid.
+     * @param string $filename File to open
+     * @param string $mode     Mode used to open the file
+     *
+     * @return resource
+     * @throws \RuntimeException if the file cannot be opened
      */
-    function create($resource = '', $size = null)
+    public static function open($filename, $mode)
     {
-        $type = gettype($resource);
-
-        if ($type == 'string') {
-            $stream = fopen('php://temp', 'r+');
-            if ($resource !== '') {
-                fwrite($stream, $resource);
-                fseek($stream, 0);
-            }
-            return new Stream($stream);
-        }
-
-        if ($type == 'resource') {
-            return new Stream($resource, $size);
-        }
+        $ex = null;
+        set_error_handler(function () use ($filename, $mode, &$ex) {
+            $ex = new \RuntimeException(sprintf(
+                'Unable to open %s using mode %s: %s',
+                $filename,
+                $mode,
+                func_get_args()[1]
+            ));
+        });
 
-        if ($resource instanceof StreamInterface) {
-            return $resource;
-        }
+        $handle = fopen($filename, $mode);
+        restore_error_handler();
 
-        if ($type == 'object' && method_exists($resource, '__toString')) {
-            return create((string) $resource, $size);
+        if ($ex) {
+            /** @var $ex \RuntimeException */
+            throw $ex;
         }
 
-        throw new \InvalidArgumentException('Invalid resource type: ' . $type);
+        return $handle;
     }
 
     /**
@@ -51,28 +53,29 @@ function create($resource = '', $size = null)
      *                                to read the entire stream.
      * @return string
      */
-    function copy_to_string(StreamInterface $stream, $maxLen = -1)
+    public static function copyToString(StreamInterface $stream, $maxLen = -1)
     {
         $buffer = '';
 
         if ($maxLen === -1) {
             while (!$stream->eof()) {
                 $buf = $stream->read(1048576);
-                if ($buf === '' || $buf === false) {
+                if ($buf === false) {
                     break;
                 }
                 $buffer .= $buf;
             }
-        } else {
-            $len = 0;
-            while (!$stream->eof() && $len < $maxLen) {
-                $buf = $stream->read($maxLen - $len);
-                if ($buf === '' || $buf === false) {
-                    break;
-                }
-                $buffer .= $buf;
-                $len = strlen($buffer);
+            return $buffer;
+        }
+
+        $len = 0;
+        while (!$stream->eof() && $len < $maxLen) {
+            $buf = $stream->read($maxLen - $len);
+            if ($buf === false) {
+                break;
             }
+            $buffer .= $buf;
+            $len = strlen($buffer);
         }
 
         return $buffer;
@@ -87,7 +90,7 @@ function copy_to_string(StreamInterface $stream, $maxLen = -1)
      * @param int             $maxLen Maximum number of bytes to read. Pass -1
      *                                to read the entire stream.
      */
-    function copy_to_stream(
+    public static function copyToStream(
         StreamInterface $source,
         StreamInterface $dest,
         $maxLen = -1
@@ -122,16 +125,18 @@ function copy_to_stream(
      * @param string          $algo      Hash algorithm (e.g. md5, crc32, etc)
      * @param bool            $rawOutput Whether or not to use raw output
      *
-     * @return bool|string Returns false on failure or a hash string on success
+     * @return string Returns the hash of the stream
+     * @throws SeekException
      */
-    function hash(
+    public static function hash(
         StreamInterface $stream,
         $algo,
         $rawOutput = false
     ) {
         $pos = $stream->tell();
-        if (!$stream->seek(0)) {
-            return false;
+
+        if ($pos > 0 && !$stream->seek(0)) {
+            throw new SeekException($stream);
         }
 
         $ctx = hash_init($algo);
@@ -153,7 +158,7 @@ function hash(
      *
      * @return string|bool
      */
-    function read_line(StreamInterface $stream, $maxLength = null)
+    public static function readline(StreamInterface $stream, $maxLength = null)
     {
         $buffer = '';
         $size = 0;
@@ -173,37 +178,19 @@ function read_line(StreamInterface $stream, $maxLength = null)
     }
 
     /**
-     * Safely opens a PHP stream resource using a filename.
+     * Alias of GuzzleHttp\Stream\Stream::factory.
      *
-     * When fopen fails, PHP normally raises a warning. This function adds an
-     * error handler that checks for errors and throws an exception instead.
+     * @param mixed $resource Resource to create
+     * @param array $options  Associative array of stream options defined in
+     *                        {@see \GuzzleHttp\Stream\Stream::__construct}
      *
-     * @param string $filename File to open
-     * @param string $mode     Mode used to open the file
+     * @return StreamInterface
      *
-     * @return resource
-     * @throws \RuntimeException if the file cannot be opened
+     * @see GuzzleHttp\Stream\Stream::factory
+     * @see GuzzleHttp\Stream\Stream::__construct
      */
-    function safe_open($filename, $mode)
+    public static function create($resource, array $options = [])
     {
-        $ex = null;
-        set_error_handler(function () use ($filename, $mode, &$ex) {
-            $ex = new \RuntimeException(sprintf(
-                'Unable to open %s using mode %s: %s',
-                $filename,
-                $mode,
-                func_get_args()[1]
-            ));
-        });
-
-        $handle = fopen($filename, $mode);
-        restore_error_handler();
-
-        if ($ex) {
-            /** @var $ex \RuntimeException */
-            throw $ex;
-        }
-
-        return $handle;
+        return Stream::factory($resource, $options);
     }
 }
diff --git a/core/vendor/guzzlehttp/streams/tests/AppendStreamTest.php b/core/vendor/guzzlehttp/streams/tests/AppendStreamTest.php
index 61aa5d47cae356b7d20f1417c675686f68e71e39..78798d9f7a0f33ba444e8766ec966967ea8f8c3e 100644
--- a/core/vendor/guzzlehttp/streams/tests/AppendStreamTest.php
+++ b/core/vendor/guzzlehttp/streams/tests/AppendStreamTest.php
@@ -153,4 +153,26 @@ public function testCatchesExceptionsWhenCastingToString()
         $this->assertFalse($a->eof());
         $this->assertSame('', (string) $a);
     }
+
+    public function testCanDetach()
+    {
+        $s = new AppendStream();
+        $s->detach();
+    }
+
+    public function testReturnsEmptyMetadata()
+    {
+        $s = new AppendStream();
+        $this->assertEquals([], $s->getMetadata());
+        $this->assertNull($s->getMetadata('foo'));
+    }
+
+    /**
+     * @expectedException \GuzzleHttp\Stream\Exception\CannotAttachException
+     */
+    public function testCannotAttach()
+    {
+        $p = new AppendStream();
+        $p->attach('a');
+    }
 }
diff --git a/core/vendor/guzzlehttp/streams/tests/AsyncReadStreamTest.php b/core/vendor/guzzlehttp/streams/tests/AsyncReadStreamTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..8c78995962a2327070ec2313c6da44249745c866
--- /dev/null
+++ b/core/vendor/guzzlehttp/streams/tests/AsyncReadStreamTest.php
@@ -0,0 +1,186 @@
+<?php
+namespace GuzzleHttp\Tests\Stream;
+
+use GuzzleHttp\Stream\AsyncReadStream;
+use GuzzleHttp\Stream\BufferStream;
+use GuzzleHttp\Stream\FnStream;
+use GuzzleHttp\Stream\Stream;
+
+class AsyncReadStreamTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @expectedException \InvalidArgumentException
+     * @expectedExceptionMessage Buffer must be readable and writable
+     */
+    public function testValidatesReadableBuffer()
+    {
+        new AsyncReadStream(FnStream::decorate(
+            Stream::factory(),
+            ['isReadable' => function () { return false; }]
+        ));
+    }
+
+    /**
+     * @expectedException \InvalidArgumentException
+     * @expectedExceptionMessage Buffer must be readable and writable
+     */
+    public function testValidatesWritableBuffer()
+    {
+        new AsyncReadStream(FnStream::decorate(
+            Stream::factory(),
+            ['isWritable' => function () { return false; }]
+        ));
+    }
+
+    public function testValidatesHwmMetadata()
+    {
+        $a = new AsyncReadStream(Stream::factory(), [
+            'drain' => function() {}
+        ]);
+        $this->assertNull($this->readAttribute($a, 'drain'));
+    }
+
+    /**
+     * @expectedException \InvalidArgumentException
+     * @expectedExceptionMessage pump must be callable
+     */
+    public function testValidatesPumpIsCallable()
+    {
+        new AsyncReadStream(new BufferStream(), ['pump' => true]);
+    }
+
+    /**
+     * @expectedException \InvalidArgumentException
+     * @expectedExceptionMessage drain must be callable
+     */
+    public function testValidatesDrainIsCallable()
+    {
+        new AsyncReadStream(new BufferStream(), ['drain' => true]);
+    }
+
+    public function testCanInitialize()
+    {
+        $buffer = new BufferStream();
+        $a = new AsyncReadStream($buffer, [
+            'size'  => 10,
+            'drain' => function () {},
+            'pump'  => function () {},
+        ]);
+        $this->assertSame($buffer, $this->readAttribute($a, 'stream'));
+        $this->assertTrue(is_callable($this->readAttribute($a, 'drain')));
+        $this->assertTrue(is_callable($this->readAttribute($a, 'pump')));
+        $this->assertTrue($a->isReadable());
+        $this->assertFalse($a->isSeekable());
+        $this->assertFalse($a->isWritable());
+        $this->assertFalse($a->write('foo'));
+        $this->assertEquals(10, $a->getSize());
+    }
+
+    public function testReadsFromBufferWithNoDrainOrPump()
+    {
+        $buffer = new BufferStream();
+        $a = new AsyncReadStream($buffer);
+        $buffer->write('foo');
+        $this->assertNull($a->getSize());
+        $this->assertEquals('foo', $a->read(10));
+        $this->assertEquals('', $a->read(10));
+    }
+
+    public function testCallsPumpForMoreDataWhenRequested()
+    {
+        $called = 0;
+        $buffer = new BufferStream();
+        $a = new AsyncReadStream($buffer, [
+            'pump' => function ($size) use (&$called) {
+                $called++;
+                return str_repeat('.', $size);
+            }
+        ]);
+        $buffer->write('foobar');
+        $this->assertEquals('foo', $a->read(3));
+        $this->assertEquals(0, $called);
+        $this->assertEquals('bar.....', $a->read(8));
+        $this->assertEquals(1, $called);
+        $this->assertEquals('..', $a->read(2));
+        $this->assertEquals(2, $called);
+    }
+
+    public function testCallsDrainWhenNeeded()
+    {
+        $called = 0;
+        $buffer = new BufferStream(5);
+        $a = new AsyncReadStream($buffer, [
+            'drain' => function (BufferStream $b) use (&$called, $buffer) {
+                $this->assertSame($b, $buffer);
+                $called++;
+            }
+        ]);
+
+        $buffer->write('foobar');
+        $this->assertEquals(6, $buffer->getSize());
+        $this->assertEquals(0, $called);
+
+        $a->read(3);
+        $this->assertTrue($this->readAttribute($a, 'needsDrain'));
+        $this->assertEquals(3, $buffer->getSize());
+        $this->assertEquals(0, $called);
+
+        $a->read(3);
+        $this->assertEquals(0, $buffer->getSize());
+        $this->assertFalse($this->readAttribute($a, 'needsDrain'));
+        $this->assertEquals(1, $called);
+    }
+
+    public function testCreatesBufferWithNoConfig()
+    {
+        list($buffer, $async) = AsyncReadStream::create();
+        $this->assertInstanceOf('GuzzleHttp\Stream\BufferStream', $buffer);
+        $this->assertInstanceOf('GuzzleHttp\Stream\AsyncReadStream', $async);
+    }
+
+    public function testCreatesBufferWithSpecifiedBuffer()
+    {
+        $buf = new BufferStream();
+        list($buffer, $async) = AsyncReadStream::create(['buffer' => $buf]);
+        $this->assertSame($buf, $buffer);
+        $this->assertInstanceOf('GuzzleHttp\Stream\AsyncReadStream', $async);
+    }
+
+    public function testCreatesNullStream()
+    {
+        list($buffer, $async) = AsyncReadStream::create(['max_buffer' => 0]);
+        $this->assertInstanceOf('GuzzleHttp\Stream\NullStream', $buffer);
+        $this->assertInstanceOf('GuzzleHttp\Stream\AsyncReadStream', $async);
+    }
+
+    public function testCreatesDroppingStream()
+    {
+        list($buffer, $async) = AsyncReadStream::create(['max_buffer' => 5]);
+        $this->assertInstanceOf('GuzzleHttp\Stream\DroppingStream', $buffer);
+        $this->assertInstanceOf('GuzzleHttp\Stream\AsyncReadStream', $async);
+        $buffer->write('12345678910');
+        $this->assertEquals(5, $buffer->getSize());
+    }
+
+    public function testCreatesOnWriteStream()
+    {
+        $c = 0;
+        $b = new BufferStream();
+        list($buffer, $async) = AsyncReadStream::create([
+            'buffer' => $b,
+            'write'  => function (BufferStream $buf, $data) use (&$c, $b) {
+                $this->assertSame($buf, $b);
+                $this->assertEquals('foo', $data);
+                $c++;
+            }
+        ]);
+        $this->assertInstanceOf('GuzzleHttp\Stream\FnStream', $buffer);
+        $this->assertInstanceOf('GuzzleHttp\Stream\AsyncReadStream', $async);
+        $this->assertEquals(0, $c);
+        $this->assertEquals(3, $buffer->write('foo'));
+        $this->assertEquals(1, $c);
+        $this->assertEquals(3, $buffer->write('foo'));
+        $this->assertEquals(2, $c);
+        $this->assertEquals('foofoo', (string) $buffer);
+    }
+}
diff --git a/core/vendor/guzzlehttp/streams/tests/BufferStreamTest.php b/core/vendor/guzzlehttp/streams/tests/BufferStreamTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..f9bfea21d183369dc1f480673dc17ba2ba70b0f0
--- /dev/null
+++ b/core/vendor/guzzlehttp/streams/tests/BufferStreamTest.php
@@ -0,0 +1,69 @@
+<?php
+namespace GuzzleHttp\Tests\Stream;
+
+use GuzzleHttp\Stream\BufferStream;
+
+class BufferStreamTest extends \PHPUnit_Framework_TestCase
+{
+    public function testHasMetadata()
+    {
+        $b = new BufferStream(10);
+        $this->assertTrue($b->isReadable());
+        $this->assertTrue($b->isWritable());
+        $this->assertFalse($b->isSeekable());
+        $this->assertEquals(null, $b->getMetadata('foo'));
+        $this->assertEquals(10, $b->getMetadata('hwm'));
+        $this->assertEquals([], $b->getMetadata());
+    }
+
+    public function testRemovesReadDataFromBuffer()
+    {
+        $b = new BufferStream();
+        $this->assertEquals(3, $b->write('foo'));
+        $this->assertEquals(3, $b->getSize());
+        $this->assertFalse($b->eof());
+        $this->assertEquals('foo', $b->read(10));
+        $this->assertTrue($b->eof());
+        $this->assertEquals('', $b->read(10));
+    }
+
+    public function testCanCastToStringOrGetContents()
+    {
+        $b = new BufferStream();
+        $b->write('foo');
+        $b->write('baz');
+        $this->assertEquals('foo', $b->read(3));
+        $b->write('bar');
+        $this->assertEquals('bazbar', (string) $b);
+        $this->assertFalse($b->tell());
+    }
+
+    public function testDetachClearsBuffer()
+    {
+        $b = new BufferStream();
+        $b->write('foo');
+        $b->detach();
+        $this->assertEquals(0, $b->tell());
+        $this->assertTrue($b->eof());
+        $this->assertEquals(3, $b->write('abc'));
+        $this->assertEquals('abc', $b->read(10));
+    }
+
+    public function testExceedingHighwaterMarkReturnsFalseButStillBuffers()
+    {
+        $b = new BufferStream(5);
+        $this->assertEquals(3, $b->write('hi '));
+        $this->assertFalse($b->write('hello'));
+        $this->assertEquals('hi hello', (string) $b);
+        $this->assertEquals(4, $b->write('test'));
+    }
+
+    /**
+     * @expectedException \GuzzleHttp\Stream\Exception\CannotAttachException
+     */
+    public function testCannotAttach()
+    {
+        $p = new BufferStream();
+        $p->attach('a');
+    }
+}
diff --git a/core/vendor/guzzlehttp/streams/tests/CachingStreamTest.php b/core/vendor/guzzlehttp/streams/tests/CachingStreamTest.php
index d7f625f5fe207cdd8097f12d7822bbf25d52b175..ea969b3ad7e78b8027bc9bcde95054597eb44d71 100644
--- a/core/vendor/guzzlehttp/streams/tests/CachingStreamTest.php
+++ b/core/vendor/guzzlehttp/streams/tests/CachingStreamTest.php
@@ -1,9 +1,9 @@
 <?php
-
 namespace GuzzleHttp\Tests\Stream;
 
 use GuzzleHttp\Stream\Stream;
 use GuzzleHttp\Stream\CachingStream;
+use GuzzleHttp\Stream\Utils;
 
 /**
  * @covers GuzzleHttp\Stream\CachingStream
@@ -89,32 +89,31 @@ public function testSkipsOverwrittenBytes()
         $decorated = Stream::factory(
             implode("\n", array_map(function ($n) {
                 return str_pad($n, 4, '0', STR_PAD_LEFT);
-            }, range(0, 25))),
-            true
+            }, range(0, 25)))
         );
 
         $body = new CachingStream($decorated);
 
-        $this->assertEquals("0000\n", \GuzzleHttp\Stream\read_line($body));
-        $this->assertEquals("0001\n", \GuzzleHttp\Stream\read_line($body));
+        $this->assertEquals("0000\n", Utils::readline($body));
+        $this->assertEquals("0001\n", Utils::readline($body));
         // Write over part of the body yet to be read, so skip some bytes
         $this->assertEquals(5, $body->write("TEST\n"));
         $this->assertEquals(5, $this->readAttribute($body, 'skipReadBytes'));
         // Read, which skips bytes, then reads
-        $this->assertEquals("0003\n", \GuzzleHttp\Stream\read_line($body));
+        $this->assertEquals("0003\n", Utils::readline($body));
         $this->assertEquals(0, $this->readAttribute($body, 'skipReadBytes'));
-        $this->assertEquals("0004\n", \GuzzleHttp\Stream\read_line($body));
-        $this->assertEquals("0005\n", \GuzzleHttp\Stream\read_line($body));
+        $this->assertEquals("0004\n", Utils::readline($body));
+        $this->assertEquals("0005\n", Utils::readline($body));
 
         // Overwrite part of the cached body (so don't skip any bytes)
         $body->seek(5);
         $this->assertEquals(5, $body->write("ABCD\n"));
         $this->assertEquals(0, $this->readAttribute($body, 'skipReadBytes'));
-        $this->assertEquals("TEST\n", \GuzzleHttp\Stream\read_line($body));
-        $this->assertEquals("0003\n", \GuzzleHttp\Stream\read_line($body));
-        $this->assertEquals("0004\n", \GuzzleHttp\Stream\read_line($body));
-        $this->assertEquals("0005\n", \GuzzleHttp\Stream\read_line($body));
-        $this->assertEquals("0006\n", \GuzzleHttp\Stream\read_line($body));
+        $this->assertEquals("TEST\n", Utils::readline($body));
+        $this->assertEquals("0003\n", Utils::readline($body));
+        $this->assertEquals("0004\n", Utils::readline($body));
+        $this->assertEquals("0005\n", Utils::readline($body));
+        $this->assertEquals("0006\n", Utils::readline($body));
         $this->assertEquals(5, $body->write("1234\n"));
         $this->assertEquals(5, $this->readAttribute($body, 'skipReadBytes'));
 
diff --git a/core/vendor/guzzlehttp/streams/tests/DroppingStreamTest.php b/core/vendor/guzzlehttp/streams/tests/DroppingStreamTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..bb2cb22048ebdade5ce4e083adad50484ba0ba04
--- /dev/null
+++ b/core/vendor/guzzlehttp/streams/tests/DroppingStreamTest.php
@@ -0,0 +1,26 @@
+<?php
+namespace GuzzleHttp\Tests\Stream;
+
+use GuzzleHttp\Stream\BufferStream;
+use GuzzleHttp\Stream\DroppingStream;
+
+class DroppingStreamTest extends \PHPUnit_Framework_TestCase
+{
+    public function testBeginsDroppingWhenSizeExceeded()
+    {
+        $stream = new BufferStream();
+        $drop = new DroppingStream($stream, 5);
+        $this->assertEquals(3, $drop->write('hel'));
+        $this->assertFalse($drop->write('lo'));
+        $this->assertEquals(5, $drop->getSize());
+        $this->assertEquals('hello', $drop->read(5));
+        $this->assertEquals(0, $drop->getSize());
+        $drop->write('12345678910');
+        $this->assertEquals(5, $stream->getSize());
+        $this->assertEquals(5, $drop->getSize());
+        $this->assertEquals('12345', (string) $drop);
+        $this->assertEquals(0, $drop->getSize());
+        $drop->write('hello');
+        $this->assertFalse($drop->write('test'));
+    }
+}
diff --git a/core/vendor/guzzlehttp/streams/tests/Exception/SeekExceptionTest.php b/core/vendor/guzzlehttp/streams/tests/Exception/SeekExceptionTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..fd8cd1ad266a710daf11812b24d3ce803e977c9f
--- /dev/null
+++ b/core/vendor/guzzlehttp/streams/tests/Exception/SeekExceptionTest.php
@@ -0,0 +1,16 @@
+<?php
+namespace GuzzleHttp\Tests\Stream\Exception;
+
+use GuzzleHttp\Stream\Exception\SeekException;
+use GuzzleHttp\Stream\Stream;
+
+class SeekExceptionTest extends \PHPUnit_Framework_TestCase
+{
+    public function testHasStream()
+    {
+        $s = Stream::factory('foo');
+        $e = new SeekException($s, 10);
+        $this->assertSame($s, $e->getStream());
+        $this->assertContains('10', $e->getMessage());
+    }
+}
diff --git a/core/vendor/guzzlehttp/streams/tests/FnStreamTest.php b/core/vendor/guzzlehttp/streams/tests/FnStreamTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..6cc336b916c6f17b47c743ef73d1a7dede91e623
--- /dev/null
+++ b/core/vendor/guzzlehttp/streams/tests/FnStreamTest.php
@@ -0,0 +1,89 @@
+<?php
+namespace GuzzleHttp\Tests\Stream;
+
+use GuzzleHttp\Stream\Stream;
+use GuzzleHttp\Stream\FnStream;
+
+/**
+ * @covers GuzzleHttp\Stream\FnStream
+ */
+class FnStreamTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @expectedException \BadMethodCallException
+     * @expectedExceptionMessage seek() is not implemented in the FnStream
+     */
+    public function testThrowsWhenNotImplemented()
+    {
+        (new FnStream([]))->seek(1);
+    }
+
+    public function testProxiesToFunction()
+    {
+        $s = new FnStream([
+            'read' => function ($len) {
+                $this->assertEquals(3, $len);
+                return 'foo';
+            }
+        ]);
+
+        $this->assertEquals('foo', $s->read(3));
+    }
+
+    public function testCanCloseOnDestruct()
+    {
+        $called = false;
+        $s = new FnStream([
+            'close' => function () use (&$called) {
+                $called = true;
+            }
+        ]);
+        unset($s);
+        $this->assertTrue($called);
+    }
+
+    public function testDoesNotRequireClose()
+    {
+        $s = new FnStream([]);
+        unset($s);
+    }
+
+    public function testDecoratesStream()
+    {
+        $a = Stream::factory('foo');
+        $b = FnStream::decorate($a, []);
+        $this->assertEquals(3, $b->getSize());
+        $this->assertEquals($b->isWritable(), true);
+        $this->assertEquals($b->isReadable(), true);
+        $this->assertEquals($b->isSeekable(), true);
+        $this->assertEquals($b->read(3), 'foo');
+        $this->assertEquals($b->tell(), 3);
+        $this->assertEquals($a->tell(), 3);
+        $this->assertEquals($b->eof(), true);
+        $this->assertEquals($a->eof(), true);
+        $b->seek(0);
+        $this->assertEquals('foo', (string) $b);
+        $b->seek(0);
+        $this->assertEquals('foo', $b->getContents());
+        $this->assertEquals($a->getMetadata(), $b->getMetadata());
+        $b->seek(0, SEEK_END);
+        $b->write('bar');
+        $this->assertEquals('foobar', (string) $b);
+        $this->assertInternalType('resource', $b->detach());
+        $b->close();
+    }
+
+    public function testDecoratesWithCustomizations()
+    {
+        $called = false;
+        $a = Stream::factory('foo');
+        $b = FnStream::decorate($a, [
+            'read' => function ($len) use (&$called, $a) {
+                $called = true;
+                return $a->read($len);
+            }
+        ]);
+        $this->assertEquals('foo', $b->read(3));
+        $this->assertTrue($called);
+    }
+}
diff --git a/core/vendor/guzzlehttp/streams/tests/GuzzleStreamWrapperTest.php b/core/vendor/guzzlehttp/streams/tests/GuzzleStreamWrapperTest.php
index 2a4c4db66ae1c5a5ffb9b6309891000af9719741..33c3eccb4c090a9c57e09c2bef3f8d7102bf9382 100644
--- a/core/vendor/guzzlehttp/streams/tests/GuzzleStreamWrapperTest.php
+++ b/core/vendor/guzzlehttp/streams/tests/GuzzleStreamWrapperTest.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp\Tests\Stream;
 
 use GuzzleHttp\Stream\GuzzleStreamWrapper;
diff --git a/core/vendor/guzzlehttp/streams/tests/InflateStreamTest.php b/core/vendor/guzzlehttp/streams/tests/InflateStreamTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..ead9356a53f27f68cce9a6123a3a6d8dba702782
--- /dev/null
+++ b/core/vendor/guzzlehttp/streams/tests/InflateStreamTest.php
@@ -0,0 +1,16 @@
+<?php
+namespace GuzzleHttp\Tests\Stream;
+
+use GuzzleHttp\Stream\InflateStream;
+use GuzzleHttp\Stream\Stream;
+
+class InflateStreamtest extends \PHPUnit_Framework_TestCase
+{
+    public function testInflatesStreams()
+    {
+        $content = gzencode('test');
+        $a = Stream::factory($content);
+        $b = new InflateStream($a);
+        $this->assertEquals('test', (string) $b);
+    }
+}
diff --git a/core/vendor/guzzlehttp/streams/tests/LazyOpenStreamTest.php b/core/vendor/guzzlehttp/streams/tests/LazyOpenStreamTest.php
index e5ee7307f03fc53868c35f77ee48b2b350e4cd58..79e0078e888065f9ee865679500be22413c9bbb9 100644
--- a/core/vendor/guzzlehttp/streams/tests/LazyOpenStreamTest.php
+++ b/core/vendor/guzzlehttp/streams/tests/LazyOpenStreamTest.php
@@ -30,6 +30,7 @@ public function testOpensLazily()
         $this->assertInternalType('array', $l->getMetadata());
         $this->assertFileExists($this->fname);
         $this->assertEquals('foo', file_get_contents($this->fname));
+        $this->assertEquals('foo', (string) $l);
     }
 
     public function testProxiesToFile()
@@ -56,6 +57,8 @@ public function testDetachesUnderlyingStream()
         $l = new LazyOpenStream($this->fname, 'r');
         $r = $l->detach();
         $this->assertInternalType('resource', $r);
+        fseek($r, 0);
+        $this->assertEquals('foo', stream_get_contents($r));
         fclose($r);
     }
 }
diff --git a/core/vendor/guzzlehttp/streams/tests/LimitStreamTest.php b/core/vendor/guzzlehttp/streams/tests/LimitStreamTest.php
index 8a07c492518e4f51584aff4bbec00f8b92a8038b..efb1dc58ff362332c08a00f27c21faf59a8041c0 100644
--- a/core/vendor/guzzlehttp/streams/tests/LimitStreamTest.php
+++ b/core/vendor/guzzlehttp/streams/tests/LimitStreamTest.php
@@ -1,9 +1,10 @@
 <?php
-
 namespace GuzzleHttp\Tests\Http;
 
+use GuzzleHttp\Stream\FnStream;
 use GuzzleHttp\Stream\Stream;
 use GuzzleHttp\Stream\LimitStream;
+use GuzzleHttp\Stream\NoSeekStream;
 
 /**
  * @covers GuzzleHttp\Stream\LimitStream
@@ -55,11 +56,18 @@ public function testSeeksWhenConstructed()
 
     public function testAllowsBoundedSeek()
     {
-        $this->body->seek(100);
+        $this->assertEquals(true, $this->body->seek(100));
+        $this->assertEquals(10, $this->body->tell());
         $this->assertEquals(13, $this->decorated->tell());
-        $this->body->seek(0);
+        $this->assertEquals(true, $this->body->seek(0));
+        $this->assertEquals(0, $this->body->tell());
+        $this->assertEquals(3, $this->decorated->tell());
+        $this->assertEquals(false, $this->body->seek(-10));
         $this->assertEquals(0, $this->body->tell());
         $this->assertEquals(3, $this->decorated->tell());
+        $this->assertEquals(true, $this->body->seek(5));
+        $this->assertEquals(5, $this->body->tell());
+        $this->assertEquals(8, $this->decorated->tell());
         $this->assertEquals(false, $this->body->seek(1000, SEEK_END));
     }
 
@@ -75,6 +83,19 @@ public function testReadsOnlySubsetOfData()
         $this->assertNotSame($data, $newData);
     }
 
+    /**
+     * @expectedException \GuzzleHttp\Stream\Exception\SeekException
+     * @expectedExceptionMessage Could not seek the stream to position 2
+     */
+    public function testThrowsWhenCurrentGreaterThanOffsetSeek()
+    {
+        $a = Stream::factory('foo_bar');
+        $b = new NoSeekStream($a);
+        $c = new LimitStream($b);
+        $a->getContents();
+        $c->setOffset(2);
+    }
+
     public function testClaimsConsumedWhenReadLimitIsReached()
     {
         $this->assertFalse($this->body->eof());
@@ -92,4 +113,21 @@ public function testGetContentsIsBasedOnSubset()
         $body = new LimitStream(Stream::factory('foobazbar'), 3, 3);
         $this->assertEquals('baz', $body->getContents());
     }
+
+    public function testReturnsNullIfSizeCannotBeDetermined()
+    {
+        $a = new FnStream([
+            'getSize' => function () { return null; },
+            'tell'    => function () { return 0; },
+        ]);
+        $b = new LimitStream($a);
+        $this->assertNull($b->getSize());
+    }
+
+    public function testLengthLessOffsetWhenNoLimitSize()
+    {
+        $a = Stream::factory('foo_bar');
+        $b = new LimitStream($a, -1, 4);
+        $this->assertEquals(3, $b->getSize());
+    }
 }
diff --git a/core/vendor/guzzlehttp/streams/tests/NoSeekStreamTest.php b/core/vendor/guzzlehttp/streams/tests/NoSeekStreamTest.php
index e6fdbe1f96ceab490dd4a264812c90ef2bcc4c04..21b7c6d22707b4db796c5cc4deed60b4a3dc6152 100644
--- a/core/vendor/guzzlehttp/streams/tests/NoSeekStreamTest.php
+++ b/core/vendor/guzzlehttp/streams/tests/NoSeekStreamTest.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp\Tests\Stream;
 
 use GuzzleHttp\Stream\Stream;
@@ -30,4 +29,13 @@ public function testHandlesClose()
         $wrapped->close();
         $this->assertFalse($wrapped->write('foo'));
     }
+
+    public function testCanAttach()
+    {
+        $s1 = Stream::factory('foo');
+        $s2 = Stream::factory('bar');
+        $wrapped = new NoSeekStream($s1);
+        $wrapped->attach($s2->detach());
+        $this->assertEquals('bar', (string) $wrapped);
+    }
 }
diff --git a/core/vendor/guzzlehttp/streams/tests/NullStreamTest.php b/core/vendor/guzzlehttp/streams/tests/NullStreamTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..8e41431592ec2143c2491650a920f8058cdfb47d
--- /dev/null
+++ b/core/vendor/guzzlehttp/streams/tests/NullStreamTest.php
@@ -0,0 +1,39 @@
+<?php
+namespace GuzzleHttp\Tests\Stream;
+
+use GuzzleHttp\Stream\NullStream;
+
+class NullStreamTest extends \PHPUnit_Framework_TestCase
+{
+    public function testDoesNothing()
+    {
+        $b = new NullStream();
+        $this->assertEquals('', $b->read(10));
+        $this->assertEquals(4, $b->write('test'));
+        $this->assertEquals('', (string) $b);
+        $this->assertNull($b->getMetadata('a'));
+        $this->assertEquals([], $b->getMetadata());
+        $this->assertEquals(0, $b->getSize());
+        $this->assertEquals('', $b->getContents());
+        $this->assertEquals(0, $b->tell());
+
+        $this->assertTrue($b->isReadable());
+        $this->assertTrue($b->isWritable());
+        $this->assertTrue($b->isSeekable());
+        $this->assertFalse($b->seek(10));
+
+        $this->assertTrue($b->eof());
+        $b->detach();
+        $this->assertTrue($b->eof());
+        $b->close();
+    }
+
+    /**
+     * @expectedException \GuzzleHttp\Stream\Exception\CannotAttachException
+     */
+    public function testCannotAttach()
+    {
+        $p = new NullStream();
+        $p->attach('a');
+    }
+}
diff --git a/core/vendor/guzzlehttp/streams/tests/PumpStreamTest.php b/core/vendor/guzzlehttp/streams/tests/PumpStreamTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..2d20ce90c0d7674d946b0a2b3c6c871e2d3019a5
--- /dev/null
+++ b/core/vendor/guzzlehttp/streams/tests/PumpStreamTest.php
@@ -0,0 +1,77 @@
+<?php
+namespace GuzzleHttp\Tests\Stream;
+
+use GuzzleHttp\Stream\LimitStream;
+use GuzzleHttp\Stream\PumpStream;
+use GuzzleHttp\Stream\Stream;
+
+class PumpStreamTest extends \PHPUnit_Framework_TestCase
+{
+    public function testHasMetadataAndSize()
+    {
+        $p = new PumpStream(function () {}, [
+            'metadata' => ['foo' => 'bar'],
+            'size'     => 100
+        ]);
+
+        $this->assertEquals('bar', $p->getMetadata('foo'));
+        $this->assertEquals(['foo' => 'bar'], $p->getMetadata());
+        $this->assertEquals(100, $p->getSize());
+    }
+
+    public function testCanReadFromCallable()
+    {
+        $p = Stream::factory(function ($size) {
+            return 'a';
+        });
+        $this->assertEquals('a', $p->read(1));
+        $this->assertEquals(1, $p->tell());
+        $this->assertEquals('aaaaa', $p->read(5));
+        $this->assertEquals(6, $p->tell());
+    }
+
+    public function testStoresExcessDataInBuffer()
+    {
+        $called = [];
+        $p = Stream::factory(function ($size) use (&$called) {
+            $called[] = $size;
+            return 'abcdef';
+        });
+        $this->assertEquals('a', $p->read(1));
+        $this->assertEquals('b', $p->read(1));
+        $this->assertEquals('cdef', $p->read(4));
+        $this->assertEquals('abcdefabc', $p->read(9));
+        $this->assertEquals([1, 9, 3], $called);
+    }
+
+    public function testInifiniteStreamWrappedInLimitStream()
+    {
+        $p = Stream::factory(function () { return 'a'; });
+        $s = new LimitStream($p, 5);
+        $this->assertEquals('aaaaa', (string) $s);
+    }
+
+    public function testDescribesCapabilities()
+    {
+        $p = Stream::factory(function () {});
+        $this->assertTrue($p->isReadable());
+        $this->assertFalse($p->isSeekable());
+        $this->assertFalse($p->isWritable());
+        $this->assertNull($p->getSize());
+        $this->assertFalse($p->write('aa'));
+        $this->assertEquals('', $p->getContents());
+        $this->assertEquals('', (string) $p);
+        $p->close();
+        $this->assertEquals('', $p->read(10));
+        $this->assertTrue($p->eof());
+    }
+
+    /**
+     * @expectedException \GuzzleHttp\Stream\Exception\CannotAttachException
+     */
+    public function testCannotAttach()
+    {
+        $p = Stream::factory(function () {});
+        $p->attach('a');
+    }
+}
diff --git a/core/vendor/guzzlehttp/streams/tests/StreamDecoratorTraitTest.php b/core/vendor/guzzlehttp/streams/tests/StreamDecoratorTraitTest.php
index 1d49936bfb69a21df6eeec3cda14747629e639fc..2ba79addfad62c336531b256631dd98c95957085 100644
--- a/core/vendor/guzzlehttp/streams/tests/StreamDecoratorTraitTest.php
+++ b/core/vendor/guzzlehttp/streams/tests/StreamDecoratorTraitTest.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp\Tests\Stream;
 
 use GuzzleHttp\Stream\StreamInterface;
@@ -86,8 +85,7 @@ public function testGetsContents()
         $this->assertEquals('foo', $this->b->getContents());
         $this->assertEquals('', $this->b->getContents());
         $this->b->seek(1);
-        $this->assertEquals('o', $this->b->getContents(1));
-        $this->assertEquals('', $this->b->getContents(0));
+        $this->assertEquals('oo', $this->b->getContents(1));
     }
 
     public function testCloses()
@@ -102,6 +100,14 @@ public function testDetaches()
         $this->assertFalse($this->b->isReadable());
     }
 
+    /**
+     * @expectedException \GuzzleHttp\Stream\Exception\CannotAttachException
+     */
+    public function testCannotAttachByDefault()
+    {
+        $this->b->attach('a');
+    }
+
     public function testWrapsMetadata()
     {
         $this->assertSame($this->b->getMetadata(), $this->a->getMetadata());
@@ -114,4 +120,28 @@ public function testWrapsWrites()
         $this->b->write('foo');
         $this->assertEquals('foofoo', (string) $this->a);
     }
+
+    /**
+     * @expectedException \UnexpectedValueException
+     */
+    public function testThrowsWithInvalidGetter()
+    {
+        $this->b->foo;
+    }
+
+    /**
+     * @expectedException \BadMethodCallException
+     */
+    public function testThrowsWhenGetterNotImplemented()
+    {
+        $s = new BadStream();
+        $s->stream;
+    }
+}
+
+class BadStream
+{
+    use StreamDecoratorTrait;
+
+    public function __construct() {}
 }
diff --git a/core/vendor/guzzlehttp/streams/tests/StreamTest.php b/core/vendor/guzzlehttp/streams/tests/StreamTest.php
index 20566e4653f1b5752c33b45c400d6d1f784741a9..2985bfbb17b27bf3bebbab59f22e3eb46a4614bd 100644
--- a/core/vendor/guzzlehttp/streams/tests/StreamTest.php
+++ b/core/vendor/guzzlehttp/streams/tests/StreamTest.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp\Tests\Stream;
 
 use GuzzleHttp\Stream\Stream;
@@ -59,9 +58,6 @@ public function testGetsContents()
         $stream->seek(0);
         $this->assertEquals('data', $stream->getContents());
         $this->assertEquals('', $stream->getContents());
-        $stream->seek(0);
-        $this->assertEquals('da', $stream->getContents(2));
-        $stream->close();
     }
 
     public function testChecksEof()
@@ -130,24 +126,34 @@ public function testKeepsPositionOfResource()
         $stream->close();
     }
 
-    public function testCanDetachStream()
+    public function testCanDetachAndAttachStream()
     {
         $r = fopen('php://temp', 'w+');
         $stream = new Stream($r);
+        $stream->write('foo');
         $this->assertTrue($stream->isReadable());
         $this->assertSame($r, $stream->detach());
         $this->assertNull($stream->detach());
+
         $this->assertFalse($stream->isReadable());
-        $this->assertSame('', $stream->read(10));
+        $this->assertFalse($stream->read(10));
         $this->assertFalse($stream->isWritable());
-        $this->assertFalse($stream->write('foo'));
+        $this->assertFalse($stream->write('bar'));
         $this->assertFalse($stream->isSeekable());
         $this->assertFalse($stream->seek(10));
         $this->assertFalse($stream->tell());
-        $this->assertFalse($stream->eof());
+        $this->assertTrue($stream->eof());
         $this->assertNull($stream->getSize());
         $this->assertSame('', (string) $stream);
         $this->assertSame('', $stream->getContents());
+
+        $stream->attach($r);
+        $stream->seek(0);
+        $this->assertEquals('foo', $stream->getContents());
+        $this->assertTrue($stream->isReadable());
+        $this->assertTrue($stream->isWritable());
+        $this->assertTrue($stream->isSeekable());
+
         $stream->close();
     }
 
@@ -171,4 +177,76 @@ public function testCreatesWithFactory()
         $this->assertEquals('foo', $stream->getContents());
         $stream->close();
     }
+
+    public function testFactoryCreatesFromEmptyString()
+    {
+        $s = Stream::factory();
+        $this->assertInstanceOf('GuzzleHttp\Stream\Stream', $s);
+    }
+
+    public function testFactoryCreatesFromResource()
+    {
+        $r = fopen(__FILE__, 'r');
+        $s = Stream::factory($r);
+        $this->assertInstanceOf('GuzzleHttp\Stream\Stream', $s);
+        $this->assertSame(file_get_contents(__FILE__), (string) $s);
+    }
+
+    public function testFactoryCreatesFromObjectWithToString()
+    {
+        $r = new HasToString();
+        $s = Stream::factory($r);
+        $this->assertInstanceOf('GuzzleHttp\Stream\Stream', $s);
+        $this->assertEquals('foo', (string) $s);
+    }
+
+    public function testCreatePassesThrough()
+    {
+        $s = Stream::factory('foo');
+        $this->assertSame($s, Stream::factory($s));
+    }
+
+    /**
+     * @expectedException \InvalidArgumentException
+     */
+    public function testThrowsExceptionForUnknown()
+    {
+        Stream::factory(new \stdClass());
+    }
+
+    public function testReturnsCustomMetadata()
+    {
+        $s = Stream::factory('foo', ['metadata' => ['hwm' => 3]]);
+        $this->assertEquals(3, $s->getMetadata('hwm'));
+        $this->assertArrayHasKey('hwm', $s->getMetadata());
+    }
+
+    public function testCanSetSize()
+    {
+        $s = Stream::factory('', ['size' => 10]);
+        $this->assertEquals(10, $s->getSize());
+    }
+
+    public function testCanCreateIteratorBasedStream()
+    {
+        $a = new \ArrayIterator(['foo', 'bar', '123']);
+        $p = Stream::factory($a);
+        $this->assertInstanceOf('GuzzleHttp\Stream\PumpStream', $p);
+        $this->assertEquals('foo', $p->read(3));
+        $this->assertFalse($p->eof());
+        $this->assertEquals('b', $p->read(1));
+        $this->assertEquals('a', $p->read(1));
+        $this->assertEquals('r12', $p->read(3));
+        $this->assertFalse($p->eof());
+        $this->assertEquals('3', $p->getContents());
+        $this->assertTrue($p->eof());
+        $this->assertEquals(9, $p->tell());
+    }
+}
+
+class HasToString
+{
+    public function __toString() {
+        return 'foo';
+    }
 }
diff --git a/core/vendor/guzzlehttp/streams/tests/UtilsTest.php b/core/vendor/guzzlehttp/streams/tests/UtilsTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..6e3e3b21608c0f47cfdf334e2aca668015382629
--- /dev/null
+++ b/core/vendor/guzzlehttp/streams/tests/UtilsTest.php
@@ -0,0 +1,155 @@
+<?php
+namespace GuzzleHttp\Tests\Stream;
+
+use GuzzleHttp\Stream\FnStream;
+use GuzzleHttp\Stream\NoSeekStream;
+use GuzzleHttp\Stream\Stream;
+use GuzzleHttp\Stream\Utils;
+
+class UtilsTest extends \PHPUnit_Framework_TestCase
+{
+    public function testCopiesToString()
+    {
+        $s = Stream::factory('foobaz');
+        $this->assertEquals('foobaz', Utils::copyToString($s));
+        $s->seek(0);
+        $this->assertEquals('foo', Utils::copyToString($s, 3));
+        $this->assertEquals('baz', Utils::copyToString($s, 3));
+        $this->assertEquals('', Utils::copyToString($s));
+    }
+
+    public function testCopiesToStringStopsWhenReadFails()
+    {
+        $s1 = Stream::factory('foobaz');
+        $s1 = FnStream::decorate($s1, [
+            'read' => function () {
+                return false;
+            }
+        ]);
+        $result = Utils::copyToString($s1);
+        $this->assertEquals('', $result);
+    }
+
+    public function testCopiesToStream()
+    {
+        $s1 = Stream::factory('foobaz');
+        $s2 = Stream::factory('');
+        Utils::copyToStream($s1, $s2);
+        $this->assertEquals('foobaz', (string) $s2);
+        $s2 = Stream::factory('');
+        $s1->seek(0);
+        Utils::copyToStream($s1, $s2, 3);
+        $this->assertEquals('foo', (string) $s2);
+        Utils::copyToStream($s1, $s2, 3);
+        $this->assertEquals('foobaz', (string) $s2);
+    }
+
+    public function testStopsCopyToStreamWhenWriteFails()
+    {
+        $s1 = Stream::factory('foobaz');
+        $s2 = Stream::factory('');
+        $s2 = FnStream::decorate($s2, ['write' => function () { return 0; }]);
+        Utils::copyToStream($s1, $s2);
+        $this->assertEquals('', (string) $s2);
+    }
+
+    public function testStopsCopyToSteamWhenWriteFailsWithMaxLen()
+    {
+        $s1 = Stream::factory('foobaz');
+        $s2 = Stream::factory('');
+        $s2 = FnStream::decorate($s2, ['write' => function () { return 0; }]);
+        Utils::copyToStream($s1, $s2, 10);
+        $this->assertEquals('', (string) $s2);
+    }
+
+    public function testStopsCopyToSteamWhenReadFailsWithMaxLen()
+    {
+        $s1 = Stream::factory('foobaz');
+        $s1 = FnStream::decorate($s1, ['read' => function () { return ''; }]);
+        $s2 = Stream::factory('');
+        Utils::copyToStream($s1, $s2, 10);
+        $this->assertEquals('', (string) $s2);
+    }
+
+    public function testReadsLines()
+    {
+        $s = Stream::factory("foo\nbaz\nbar");
+        $this->assertEquals("foo\n", Utils::readline($s));
+        $this->assertEquals("baz\n", Utils::readline($s));
+        $this->assertEquals("bar", Utils::readline($s));
+    }
+
+    public function testReadsLinesUpToMaxLength()
+    {
+        $s = Stream::factory("12345\n");
+        $this->assertEquals("123", Utils::readline($s, 4));
+        $this->assertEquals("45\n", Utils::readline($s));
+    }
+
+    public function testReadsLineUntilFalseReturnedFromRead()
+    {
+        $s = $this->getMockBuilder('GuzzleHttp\Stream\Stream')
+            ->setMethods(['read', 'eof'])
+            ->disableOriginalConstructor()
+            ->getMock();
+        $s->expects($this->exactly(2))
+            ->method('read')
+            ->will($this->returnCallback(function () {
+                static $c = false;
+                if ($c) {
+                    return false;
+                }
+                $c = true;
+                return 'h';
+            }));
+        $s->expects($this->exactly(2))
+            ->method('eof')
+            ->will($this->returnValue(false));
+        $this->assertEquals("h", Utils::readline($s));
+    }
+
+    public function testCalculatesHash()
+    {
+        $s = Stream::factory('foobazbar');
+        $this->assertEquals(md5('foobazbar'), Utils::hash($s, 'md5'));
+    }
+
+    /**
+     * @expectedException \GuzzleHttp\Stream\Exception\SeekException
+     */
+    public function testCalculatesHashThrowsWhenSeekFails()
+    {
+        $s = new NoSeekStream(Stream::factory('foobazbar'));
+        $s->read(2);
+        Utils::hash($s, 'md5');
+    }
+
+    public function testCalculatesHashSeeksToOriginalPosition()
+    {
+        $s = Stream::factory('foobazbar');
+        $s->seek(4);
+        $this->assertEquals(md5('foobazbar'), Utils::hash($s, 'md5'));
+        $this->assertEquals(4, $s->tell());
+    }
+
+    public function testOpensFilesSuccessfully()
+    {
+        $r = Utils::open(__FILE__, 'r');
+        $this->assertInternalType('resource', $r);
+        fclose($r);
+    }
+
+    /**
+     * @expectedException \RuntimeException
+     * @expectedExceptionMessage Unable to open /path/to/does/not/exist using mode r
+     */
+    public function testThrowsExceptionNotWarning()
+    {
+        Utils::open('/path/to/does/not/exist', 'r');
+    }
+
+    public function testProxiesToFactory()
+    {
+        $this->assertEquals('foo', (string) Utils::create('foo'));
+    }
+}
diff --git a/core/vendor/guzzlehttp/streams/tests/functionsTest.php b/core/vendor/guzzlehttp/streams/tests/functionsTest.php
deleted file mode 100644
index b2ef89cf93d95422ec113849bd5425c3b2d5c909..0000000000000000000000000000000000000000
--- a/core/vendor/guzzlehttp/streams/tests/functionsTest.php
+++ /dev/null
@@ -1,142 +0,0 @@
-<?php
-
-namespace GuzzleHttp\Stream;
-
-use GuzzleHttp\Stream;
-
-class functionsTest extends \PHPUnit_Framework_TestCase
-{
-    public function testCopiesToMemory()
-    {
-        $s = Stream\create('foobaz');
-        $this->assertEquals('foobaz', Stream\copy_to_string($s));
-        $s->seek(0);
-        $this->assertEquals('foo', Stream\copy_to_string($s, 3));
-        $this->assertEquals('baz', Stream\copy_to_string($s, 3));
-        $this->assertEquals('', Stream\copy_to_string($s));
-    }
-
-    public function testCopiesToStream()
-    {
-        $s1 = Stream\create('foobaz');
-        $s2 = Stream\create('');
-        Stream\copy_to_stream($s1, $s2);
-        $this->assertEquals('foobaz', (string) $s2);
-        $s2 = Stream\create('');
-        $s1->seek(0);
-        Stream\copy_to_stream($s1, $s2, 3);
-        $this->assertEquals('foo', (string) $s2);
-        Stream\copy_to_stream($s1, $s2, 3);
-        $this->assertEquals('foobaz', (string) $s2);
-    }
-
-    public function testReadsLines()
-    {
-        $s = Stream\create("foo\nbaz\nbar");
-        $this->assertEquals("foo\n", Stream\read_line($s));
-        $this->assertEquals("baz\n", Stream\read_line($s));
-        $this->assertEquals("bar", Stream\read_line($s));
-    }
-
-    public function testReadsLinesUpToMaxLength()
-    {
-        $s = Stream\create("12345\n");
-        $this->assertEquals("123", Stream\read_line($s, 4));
-        $this->assertEquals("45\n", Stream\read_line($s));
-    }
-
-    public function testReadsLineUntilFalseReturnedFromRead()
-    {
-        $s = $this->getMockBuilder('GuzzleHttp\Stream\Stream')
-            ->setMethods(['read', 'eof'])
-            ->disableOriginalConstructor()
-            ->getMock();
-        $s->expects($this->exactly(2))
-            ->method('read')
-            ->will($this->returnCallback(function () {
-                static $c = false;
-                if ($c) {
-                    return false;
-                }
-                $c = true;
-                return 'h';
-            }));
-        $s->expects($this->exactly(2))
-            ->method('eof')
-            ->will($this->returnValue(false));
-        $this->assertEquals("h", Stream\read_line($s));
-    }
-
-    public function testCalculatesHash()
-    {
-        $s = Stream\create('foobazbar');
-        $this->assertEquals(md5('foobazbar'), Stream\hash($s, 'md5'));
-    }
-
-    public function testCalculatesHashSeeksToOriginalPosition()
-    {
-        $s = Stream\create('foobazbar');
-        $s->seek(4);
-        $this->assertEquals(md5('foobazbar'), Stream\hash($s, 'md5'));
-        $this->assertEquals(4, $s->tell());
-    }
-
-    public function testFactoryCreatesFromEmptyString()
-    {
-        $s = Stream\create();
-        $this->assertInstanceOf('GuzzleHttp\Stream\Stream', $s);
-    }
-
-    public function testFactoryCreatesFromResource()
-    {
-        $r = fopen(__FILE__, 'r');
-        $s = Stream\create($r);
-        $this->assertInstanceOf('GuzzleHttp\Stream\Stream', $s);
-        $this->assertSame(file_get_contents(__FILE__), (string) $s);
-    }
-
-    public function testFactoryCreatesFromObjectWithToString()
-    {
-        $r = new HasToString();
-        $s = Stream\create($r);
-        $this->assertInstanceOf('GuzzleHttp\Stream\Stream', $s);
-        $this->assertEquals('foo', (string) $s);
-    }
-
-    public function testCreatePassesThrough()
-    {
-        $s = Stream\create('foo');
-        $this->assertSame($s, Stream\create($s));
-    }
-
-    /**
-     * @expectedException \InvalidArgumentException
-     */
-    public function testThrowsExceptionForUnknown()
-    {
-        Stream\create(new \stdClass());
-    }
-
-    public function testOpensFilesSuccessfully()
-    {
-        $r = Stream\safe_open(__FILE__, 'r');
-        $this->assertInternalType('resource', $r);
-        fclose($r);
-    }
-
-    /**
-     * @expectedException \RuntimeException
-     * @expectedExceptionMessage Unable to open /path/to/does/not/exist using mode r
-     */
-    public function testThrowsExceptionNotWarning()
-    {
-        Stream\safe_open('/path/to/does/not/exist', 'r');
-    }
-}
-
-class HasToString
-{
-    public function __toString() {
-        return 'foo';
-    }
-}
diff --git a/core/vendor/react/promise/.gitignore b/core/vendor/react/promise/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..c4bcb78f741ae92c67d5a4e4890fdef8217b1881
--- /dev/null
+++ b/core/vendor/react/promise/.gitignore
@@ -0,0 +1,4 @@
+composer.lock
+composer.phar
+phpunit.xml
+vendor/
diff --git a/core/vendor/react/promise/.travis.yml b/core/vendor/react/promise/.travis.yml
new file mode 100644
index 0000000000000000000000000000000000000000..e26d91aae9cbee3a02823bd92e2c7995d384ac90
--- /dev/null
+++ b/core/vendor/react/promise/.travis.yml
@@ -0,0 +1,13 @@
+language: php
+
+php:
+  - 5.4
+  - 5.5
+  - 5.6
+  - hhvm
+
+before_script:
+  - composer self-update
+  - composer install --dev --prefer-source
+
+script: phpunit --coverage-text
diff --git a/core/vendor/react/promise/CHANGELOG.md b/core/vendor/react/promise/CHANGELOG.md
new file mode 100644
index 0000000000000000000000000000000000000000..870e112e2e42b0c104f6a94224861d1a89cc3ecd
--- /dev/null
+++ b/core/vendor/react/promise/CHANGELOG.md
@@ -0,0 +1,48 @@
+CHANGELOG
+=========
+
+* 2.1.0 (2014-10-15)
+
+  * Introduce new CancellablePromiseInterface implemented by all promises
+  * Add new .cancel() method (part of the CancellablePromiseInterface)
+
+* 2.0.0 (2013-12-10)
+
+  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
+  [ES6 promises specification](https://github.com/domenic/promises-unwrapping/).
+
+  * Add standalone Promise class.
+  * Add new React\Promise\race() function.
+  * BC break: Bump minimum PHP version to PHP 5.4.
+  * BC break: Remove ResolverInterface and PromiseInterface from Deferred.
+  * BC break: Change signature of PromiseInterface.
+  * BC break: Remove When and Util classes and move static methods to functions.
+  * BC break: FulfilledPromise and RejectedPromise now throw an exception when
+    initialized with a promise instead of a value/reason.
+  * BC break: React\Promise\Deferred::resolve() and React\Promise\Deferred::reject()
+    no longer return a promise.
+
+* 1.0.4 (2013-04-03)
+
+  * Trigger PHP errors when invalid callback is passed.
+  * Fully resolve rejection value before calling rejection handler.
+  * Add When::lazy() to create lazy promises which will be initialized once a
+    consumer calls the then() method.
+
+* 1.0.3 (2012-11-17)
+
+  * Add `PromisorInterface` for objects that have a `promise()` method.
+
+* 1.0.2 (2012-11-14)
+
+  * Fix bug in When::any() not correctly unwrapping to a single result value
+  * $promiseOrValue argument of When::resolve() and When::reject() is now optional
+
+* 1.0.1 (2012-11-13)
+
+  * Prevent deep recursion which was reaching `xdebug.max_nesting_level` default of 100
+
+* 1.0.0 (2012-11-07)
+
+  * First tagged release
diff --git a/core/vendor/react/promise/LICENSE b/core/vendor/react/promise/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..9bfcd4113c8ab9d446d87a08eda3531220e44d25
--- /dev/null
+++ b/core/vendor/react/promise/LICENSE
@@ -0,0 +1,22 @@
+Copyright (c) 2012 Jan Sorgalla
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
diff --git a/core/vendor/react/promise/README.md b/core/vendor/react/promise/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..1bb5c32c969cbe19ad39d22639274952ff6f4c04
--- /dev/null
+++ b/core/vendor/react/promise/README.md
@@ -0,0 +1,617 @@
+React/Promise
+=============
+
+A lightweight implementation of
+[CommonJS Promises/A](http://wiki.commonjs.org/wiki/Promises/A) for PHP.
+
+[![Build Status](https://secure.travis-ci.org/reactphp/promise.png?branch=master)](http://travis-ci.org/reactphp/promise)
+
+Table of Contents
+-----------------
+
+1. [Introduction](#introduction)
+2. [Concepts](#concepts)
+   * [Deferred](#deferred)
+   * [Promise](#promise)
+3. [API](#api)
+   * [Deferred](#deferred-1)
+     * [Deferred::promise()](#deferredpromise)
+     * [Deferred::resolve()](#deferredresolve)
+     * [Deferred::reject()](#deferredreject)
+     * [Deferred::progress()](#deferredprogress)
+   * [PromiseInterface](#promiseinterface)
+     * [PromiseInterface::then()](#promiseinterfacethen)
+   * [CancellablePromiseInterface](#cancellablepromiseinterface)
+        * [CancellablePromiseInterface::cancel()](#cancellablepromiseinterfacecancel)
+   * [Promise](#promise-1)
+   * [FulfilledPromise](#fulfilledpromise)
+   * [RejectedPromise](#rejectedpromise)
+   * [LazyPromise](#lazypromise)
+   * [Functions](#functions)
+     * [resolve()](#resolve)
+     * [reject()](#reject)
+     * [all()](#all)
+     * [race()](#race)
+     * [any()](#any)
+     * [some()](#some)
+     * [map()](#map)
+     * [reduce()](#reduce)
+   * [PromisorInterface](#promisorinterface)
+4. [Examples](#examples)
+   * [How to use Deferred](#how-to-use-deferred)
+   * [How promise forwarding works](#how-promise-forwarding-works)
+     * [Resolution forwarding](#resolution-forwarding)
+     * [Rejection forwarding](#rejection-forwarding)
+     * [Mixed resolution and rejection forwarding](#mixed-resolution-and-rejection-forwarding)
+     * [Progress event forwarding](#progress-event-forwarding)
+5. [Credits](#credits)
+6. [License](#license)
+
+Introduction
+------------
+
+React/Promise is a library implementing
+[CommonJS Promises/A](http://wiki.commonjs.org/wiki/Promises/A) for PHP.
+
+It also provides several other useful promise-related concepts, such as joining
+multiple promises and mapping and reducing collections of promises.
+
+If you've never heard about promises before,
+[read this first](https://gist.github.com/3889970).
+
+Concepts
+--------
+
+### Deferred
+
+A **Deferred** 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.
+
+### Promise
+
+While a deferred represents the computation itself, a **Promise** represents
+the result of that computation. Thus, each deferred has a promise that acts as
+a placeholder for its actual result.
+
+API
+---
+
+### Deferred
+
+A deferred represents an operation whose resolution is pending. It has separate
+promise and resolver parts.
+
+``` php
+$deferred = new React\Promise\Deferred();
+
+$promise = $deferred->promise();
+
+$deferred->resolve(mixed $value = null);
+$deferred->reject(mixed $reason = null);
+$deferred->progress(mixed $update = null);
+```
+
+The `promise` method returns the promise of the deferred.
+
+The `resolve` and `reject` methods control the state of the deferred.
+
+The `progress` method is for progress notification.
+
+The constructor of the `Deferred` accepts an optional `$canceller` argument.
+See [Promise](#promise-1) for more information.
+
+#### Deferred::promise()
+
+``` php
+$promise = $deferred->promise();
+```
+
+Returns the promise of the deferred, which you can hand out to others while
+keeping the authority to modify its state to yourself.
+
+#### Deferred::resolve()
+
+``` php
+$deferred->resolve(mixed $value = null);
+```
+
+Resolves the promise returned by `promise()`. All consumers are notified by
+having `$onFulfilled` (which they registered via `$promise->then()`) called with
+`$value`.
+
+If `$value` itself is a promise, the promise will transition to the state of
+this promise once it is resolved.
+
+#### Deferred::reject()
+
+``` php
+$deferred->reject(mixed $reason = null);
+```
+
+Rejects the promise returned by `promise()`, signalling that the deferred's
+computation failed.
+All consumers are notified by having `$onRejected` (which they registered via
+`$promise->then()`) called with `$reason`.
+
+If `$reason` itself is a promise, the promise will be rejected with the outcome
+of this promise regardless whether it fulfills or rejects.
+
+#### Deferred::progress()
+
+``` php
+$deferred->progress(mixed $update = null);
+```
+
+Triggers progress notifications, to indicate to consumers that the computation
+is making progress toward its result.
+
+All consumers are notified by having `$onProgress` (which they registered via
+`$promise->then()`) called with `$update`.
+
+### PromiseInterface
+
+The promise interface provides the common interface for all promise
+implementations.
+
+A promise represents an eventual outcome, which is either fulfillment (success)
+and an associated value, or rejection (failure) and an associated reason.
+
+Once in the fulfilled or rejected state, a promise becomes immutable.
+Neither its state nor its result (or error) can be modified.
+
+#### PromiseInterface::then()
+
+``` php
+$newPromise = $promise->then(callable $onFulfilled = null, callable $onRejected = null, callable $onProgress = null);
+```
+
+The `then()` method registers new fulfilled, rejection and progress handlers
+with this promise (all parameters are optional):
+
+  * `$onFulfilled` will be invoked once the promise is fulfilled and passed
+    the result as the first argument.
+  * `$onRejected` will be invoked once the promise is rejected and passed the
+    reason as the first argument.
+  * `$onProgress` will be invoked whenever the producer of the promise
+    triggers progress notifications and passed a single argument (whatever it
+    wants) to indicate progress.
+
+It returns a new promise that will fulfill with the return value of either
+`$onFulfilled` or `$onRejected`, whichever is called, or will reject with
+the thrown exception if either throws.
+
+A promise makes the following guarantees about handlers registered in
+the same call to `then()`:
+
+  1. Only one of `$onFulfilled` or `$onRejected` will be called,
+     never both.
+  2. `$onFulfilled` and `$onRejected` will never be called more
+     than once.
+  3. `$onProgress` may be called multiple times.
+
+#### Implementations
+
+* [Promise](#promise-1)
+* [FulfilledPromise](#fulfilledpromise)
+* [RejectedPromise](#rejectedpromise)
+* [LazyPromise](#lazypromise)
+
+#### See also
+
+* [resolve()](#resolve) - Creating a resolved promise
+* [reject()](#reject) - Creating a rejected promise
+
+### CancellablePromiseInterface
+
+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.
+
+#### CancellablePromiseInterface::cancel()
+
+``` php
+$promise->cancel();
+```
+
+The `cancel()` method notifies the creator of the promise that there is no
+further interest in the results of the operation.
+
+Once a promise is settled (either fulfilled or rejected), calling `cancel()` on
+a promise has no effect.
+
+#### Implementations
+
+* [Promise](#promise-1)
+* [FulfilledPromise](#fulfilledpromise)
+* [RejectedPromise](#rejectedpromise)
+* [LazyPromise](#lazypromise)
+
+### Promise
+
+Creates a promise whose state is controlled by the functions passed to
+`$resolver`.
+
+``` php
+$resolver = function (callable $resolve, callable $reject, callable $progress) {
+    // Do some work, possibly asynchronously, and then
+    // resolve or reject. You can notify of progress events
+    // along the way if you want/need.
+
+    $resolve($awesomeResult);
+    // or $resolve($anotherPromise);
+    // or $reject($nastyError);
+    // or $progress($progressNotification);
+};
+
+$canceller = function (callable $resolve, callable $reject, callable $progress) {
+    // Cancel/abort any running operations like network connections, streams etc.
+
+    $reject(new \Exception('Promise cancelled'));
+};
+
+$promise = new React\Promise\Promise($resolver, $canceller);
+```
+
+The promise constructor receives a resolver function and an optional canceller
+function which both will be called with 3 arguments:
+
+  * `$resolve($value)` - 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. `$resolve($otherPromise)`, promise's
+    fate will be equivalent to that of `$otherPromise`.
+  * `$reject($reason)` - Function that rejects the promise.
+  * `$progress($update)` - Function that issues progress events for the promise.
+
+If the resolver or canceller throw an exception, the promise will be rejected
+with that thrown exception as the rejection reason.
+
+The resolver function will be called immediately, the canceller function only
+once all consumers called the `cancel()` method of the promise.
+
+### FulfilledPromise
+
+Creates a already fulfilled promise.
+
+```php
+$promise = React\Promise\FulfilledPromise($value);
+```
+
+Note, that `$value` **cannot** be a promise. It's recommended to use
+[resolve()](#resolve) for creating resolved promises.
+
+### RejectedPromise
+
+Creates a already rejected promise.
+
+```php
+$promise = React\Promise\RejectedPromise($reason);
+```
+
+Note, that `$reason` **cannot** be a promise. It's recommended to use
+[reject()](#reject) for creating rejected promises.
+
+### LazyPromise
+
+Creates a promise which will be lazily initialized by `$factory` once a consumer
+calls the `then()` method.
+
+```php
+$factory = function () {
+    $deferred = new React\Promise\Deferred();
+
+    // Do some heavy stuff here and resolve the deferred once completed
+
+    return $deferred->promise();
+};
+
+$promise = React\Promise\LazyPromise($factory);
+
+// $factory will only be executed once we call then()
+$promise->then(function ($value) {
+});
+```
+
+### Functions
+
+Useful functions for creating, joining, mapping and reducing collections of
+promises.
+
+#### resolve()
+
+``` php
+$promise = React\Promise\resolve(mixed $promiseOrValue);
+```
+
+Creates a resolved promise for the supplied `$promiseOrValue`.
+
+If `$promiseOrValue` is a value, it will be the resolution value of the
+returned promise.
+
+If `$promiseOrValue` is a promise, it will simply be returned.
+
+#### reject()
+
+``` php
+$promise = React\Promise\reject(mixed $promiseOrValue);
+```
+
+Creates a rejected promise for the supplied `$promiseOrValue`.
+
+If `$promiseOrValue` is a value, it will be the rejection value of the
+returned promise.
+
+If `$promiseOrValue` is a promise, its completion value will be the rejected
+value of the returned promise.
+
+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.
+
+#### all()
+
+``` php
+$promise = React\Promise\all(array|React\Promise\PromiseInterface $promisesOrValues);
+```
+
+Returns a promise that will resolve only once all the items in
+`$promisesOrValues` have resolved. The resolution value of the returned promise
+will be an array containing the resolution values of each of the items in
+`$promisesOrValues`.
+
+#### race()
+
+``` php
+$promise = React\Promise\race(array|React\Promise\PromiseInterface $promisesOrValues);
+```
+
+Initiates a competitive race that allows one winner. Returns a promise which is
+resolved in the same way the first settled promise resolves.
+
+#### any()
+
+``` php
+$promise = React\Promise\any(array|React\Promise\PromiseInterface $promisesOrValues);
+```
+
+Returns a promise that will resolve when any one of the items in
+`$promisesOrValues` resolves. The resolution value of the returned promise
+will be the resolution value of the triggering item.
+
+The returned promise will only reject if *all* items in `$promisesOrValues` are
+rejected. The rejection value will be an array of all rejection reasons.
+
+#### some()
+
+``` php
+$promise = React\Promise\some(array|React\Promise\PromiseInterface $promisesOrValues, integer $howMany);
+```
+
+Returns a promise that will resolve when `$howMany` of the supplied items in
+`$promisesOrValues` resolve. The resolution value of the returned promise
+will be an array of length `$howMany` containing the resolution values of the
+triggering items.
+
+The returned promise will reject if it becomes impossible for `$howMany` items
+to resolve (that is, when `(count($promisesOrValues) - $howMany) + 1` items
+reject). The rejection value will be an array of
+`(count($promisesOrValues) - $howMany) + 1` rejection reasons.
+
+#### map()
+
+``` php
+$promise = React\Promise\map(array|React\Promise\PromiseInterface $promisesOrValues, callable $mapFunc);
+```
+
+Traditional map function, similar to `array_map()`, but allows input to contain
+promises and/or values, and `$mapFunc` may return either a value or a promise.
+
+The map function receives each item as argument, where item is a fully resolved
+value of a promise or value in `$promisesOrValues`.
+
+#### reduce()
+
+``` php
+$promise = React\Promise\reduce(array|React\Promise\PromiseInterface $promisesOrValues, callable $reduceFunc , $initialValue = null);
+```
+
+Traditional reduce function, similar to `array_reduce()`, but input may contain
+promises and/or values, and `$reduceFunc` may return either a value or a
+promise, *and* `$initialValue` may be a promise or a value for the starting
+value.
+
+### PromisorInterface
+
+The `React\Promise\PromisorInterface` provides a common interface for objects
+that provide a promise. `React\Promise\Deferred` implements it, but since it
+is part of the public API anyone can implement it.
+
+Examples
+--------
+
+### How to use Deferred
+
+``` php
+function getAwesomeResultPromise()
+{
+    $deferred = new React\Promise\Deferred();
+
+    // Execute a Node.js-style function using the callback pattern
+    computeAwesomeResultAsynchronously(function ($error, $result) use ($deferred) {
+        if ($error) {
+            $deferred->reject($error);
+        } else {
+            $deferred->resolve($result);
+        }
+    });
+
+    // Return the promise
+    return $deferred->promise();
+}
+
+getAwesomeResultPromise()
+    ->then(
+        function ($value) {
+            // Deferred resolved, do something with $value
+        },
+        function ($reason) {
+            // Deferred rejected, do something with $reason
+        },
+        function ($update) {
+            // Progress notification triggered, do something with $update
+        }
+    );
+```
+
+### How promise forwarding works
+
+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.
+
+#### Resolution forwarding
+
+Resolved promises forward resolution values to the next promise.
+The first promise, `$deferred->promise()`, will resolve with the value passed
+to `$deferred->resolve()` below.
+
+Each call to `then()` returns a new promise that will resolve with the return
+value of the previous handler. This creates a promise "pipeline".
+
+``` php
+$deferred = new React\Promise\Deferred();
+
+$deferred->promise()
+    ->then(function ($x) {
+        // $x will be the value passed to $deferred->resolve() below
+        // and returns a *new promise* for $x + 1
+        return $x + 1;
+    })
+    ->then(function ($x) {
+        // $x === 2
+        // This handler receives the return value of the
+        // previous handler.
+        return $x + 1;
+    })
+    ->then(function ($x) {
+        // $x === 3
+        // This handler receives the return value of the
+        // previous handler.
+        return $x + 1;
+    })
+    ->then(function ($x) {
+        // $x === 4
+        // This handler receives the return value of the
+        // previous handler.
+        echo 'Resolve ' . $x;
+    });
+
+$deferred->resolve(1); // Prints "Resolve 4"
+```
+
+#### Rejection forwarding
+
+Rejected promises behave similarly, and also work similarly to try/catch:
+When you catch an exception, you must rethrow for it to propagate.
+
+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)
+
+``` php
+$deferred = new React\Promise\Deferred();
+
+$deferred->promise()
+    ->then(function ($x) {
+        throw new \Exception($x + 1);
+    })
+    ->then(null, function (\Exception $x) {
+        // Propagate the rejection
+        throw $x;
+    })
+    ->then(null, function (\Exception $x) {
+        // Can also propagate by returning another rejection
+        return React\Promise\reject((integer) $x->getMessage() + 1);
+    })
+    ->then(null, function ($x) {
+        echo 'Reject ' . $x; // 3
+    });
+
+$deferred->resolve(1);  // Prints "Reject 3"
+```
+
+#### Mixed resolution and rejection forwarding
+
+Just like try/catch, you can choose to propagate or not. Mixing resolutions and
+rejections will still forward handler results in a predictable way.
+
+``` php
+$deferred = new React\Promise\Deferred();
+
+$deferred->promise()
+    ->then(function ($x) {
+        return $x + 1;
+    })
+    ->then(function ($x) {
+        throw \Exception($x + 1);
+    })
+    ->then(null, function (\Exception $x) {
+        // Handle the rejection, and don't propagate.
+        // This is like catch without a rethrow
+        return (integer) $x->getMessage() + 1;
+    })
+    ->then(function ($x) {
+        echo 'Mixed ' . $x; // 4
+    });
+
+$deferred->resolve(1);  // Prints "Mixed 4"
+```
+
+#### Progress event forwarding
+
+In the same way as resolution and rejection handlers, your progress handler
+**MUST** return a progress event to be propagated to the next link in the chain.
+If you return nothing, `null` will be propagated.
+
+Also in the same way as resolutions and rejections, if you don't register a
+progress handler, the update will be propagated through.
+
+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.
+
+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.
+
+``` php
+$deferred = new React\Promise\Deferred();
+
+$deferred->promise()
+    ->then(null, null, function ($update) {
+        return $update + 1;
+    })
+    ->then(null, null, function ($update) {
+        echo 'Progress ' . $update; // 2
+    });
+
+$deferred->progress(1);  // Prints "Progress 2"
+```
+
+Credits
+-------
+
+React/Promise is a port of [when.js](https://github.com/cujojs/when)
+by [Brian Cavalier](https://github.com/briancavalier).
+
+Also, large parts of the documentation have been ported from the when.js
+[Wiki](https://github.com/cujojs/when/wiki) and the
+[API docs](https://github.com/cujojs/when/blob/master/docs/api.md).
+
+License
+-------
+
+React/Promise is released under the [MIT](https://github.com/reactphp/promise/blob/master/LICENSE) license.
diff --git a/core/vendor/react/promise/composer.json b/core/vendor/react/promise/composer.json
new file mode 100644
index 0000000000000000000000000000000000000000..b8ca9a5450c3c9c927026465b684149026f901f1
--- /dev/null
+++ b/core/vendor/react/promise/composer.json
@@ -0,0 +1,22 @@
+{
+    "name": "react/promise",
+    "description": "A lightweight implementation of CommonJS Promises/A for PHP",
+    "license": "MIT",
+    "authors": [
+        {"name": "Jan Sorgalla", "email": "jsorgalla@googlemail.com"}
+    ],
+    "require": {
+        "php": ">=5.4.0"
+    },
+    "autoload": {
+        "psr-4": {
+            "React\\Promise\\": "src/"
+        },
+        "files": ["src/functions.php"]
+    },
+    "extra": {
+        "branch-alias": {
+            "dev-master": "2.0-dev"
+        }
+    }
+}
diff --git a/core/vendor/react/promise/phpunit.xml.dist b/core/vendor/react/promise/phpunit.xml.dist
new file mode 100644
index 0000000000000000000000000000000000000000..0200d463fa368ab7abb74ead4279eb2662e71344
--- /dev/null
+++ b/core/vendor/react/promise/phpunit.xml.dist
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<phpunit backupGlobals="false"
+         backupStaticAttributes="false"
+         colors="true"
+         convertErrorsToExceptions="true"
+         convertNoticesToExceptions="true"
+         convertWarningsToExceptions="true"
+         processIsolation="false"
+         stopOnFailure="false"
+         syntaxCheck="false"
+         bootstrap="tests/bootstrap.php"
+>
+    <testsuites>
+        <testsuite name="Promise Test Suite">
+            <directory>./tests/</directory>
+        </testsuite>
+    </testsuites>
+
+    <filter>
+        <whitelist>
+            <directory>./src/</directory>
+        </whitelist>
+    </filter>
+</phpunit>
diff --git a/core/vendor/react/promise/src/CancellablePromiseInterface.php b/core/vendor/react/promise/src/CancellablePromiseInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..896db2d372a5f99cd5c4fae90ebe39516e969f30
--- /dev/null
+++ b/core/vendor/react/promise/src/CancellablePromiseInterface.php
@@ -0,0 +1,11 @@
+<?php
+
+namespace React\Promise;
+
+interface CancellablePromiseInterface extends PromiseInterface
+{
+    /**
+     * @return void
+     */
+    public function cancel();
+}
diff --git a/core/vendor/react/promise/src/Deferred.php b/core/vendor/react/promise/src/Deferred.php
new file mode 100644
index 0000000000000000000000000000000000000000..d7ae0aa1039b78fabd29a8d86c954596c6cf5d15
--- /dev/null
+++ b/core/vendor/react/promise/src/Deferred.php
@@ -0,0 +1,51 @@
+<?php
+
+namespace React\Promise;
+
+class Deferred implements PromisorInterface
+{
+    private $promise;
+    private $resolveCallback;
+    private $rejectCallback;
+    private $progressCallback;
+    private $canceller;
+
+    public function __construct(callable $canceller = null)
+    {
+        $this->canceller = $canceller;
+    }
+
+    public function promise()
+    {
+        if (null === $this->promise) {
+            $this->promise = new Promise(function ($resolve, $reject, $progress) {
+                $this->resolveCallback  = $resolve;
+                $this->rejectCallback   = $reject;
+                $this->progressCallback = $progress;
+            }, $this->canceller);
+        }
+
+        return $this->promise;
+    }
+
+    public function resolve($value = null)
+    {
+        $this->promise();
+
+        call_user_func($this->resolveCallback, $value);
+    }
+
+    public function reject($reason = null)
+    {
+        $this->promise();
+
+        call_user_func($this->rejectCallback, $reason);
+    }
+
+    public function progress($update = null)
+    {
+        $this->promise();
+
+        call_user_func($this->progressCallback, $update);
+    }
+}
diff --git a/core/vendor/react/promise/src/FulfilledPromise.php b/core/vendor/react/promise/src/FulfilledPromise.php
new file mode 100644
index 0000000000000000000000000000000000000000..bfa3f9953e803156908f5cdded80eaed1b39ed6c
--- /dev/null
+++ b/core/vendor/react/promise/src/FulfilledPromise.php
@@ -0,0 +1,36 @@
+<?php
+
+namespace React\Promise;
+
+class FulfilledPromise implements CancellablePromiseInterface
+{
+    private $value;
+
+    public function __construct($value = null)
+    {
+        if ($value instanceof PromiseInterface) {
+            throw new \InvalidArgumentException('You cannot create React\Promise\FulfilledPromise with a promise. Use React\Promise\resolve($promiseOrValue) instead.');
+        }
+
+        $this->value = $value;
+    }
+
+    public function then(callable $onFulfilled = null, callable $onRejected = null, callable $onProgress = null)
+    {
+        try {
+            $value = $this->value;
+
+            if (null !== $onFulfilled) {
+                $value = $onFulfilled($value);
+            }
+
+            return resolve($value);
+        } catch (\Exception $exception) {
+            return new RejectedPromise($exception);
+        }
+    }
+
+    public function cancel()
+    {
+    }
+}
diff --git a/core/vendor/react/promise/src/LazyPromise.php b/core/vendor/react/promise/src/LazyPromise.php
new file mode 100644
index 0000000000000000000000000000000000000000..e1172e5499fccf59288c9c12e4a10ed09b270dac
--- /dev/null
+++ b/core/vendor/react/promise/src/LazyPromise.php
@@ -0,0 +1,37 @@
+<?php
+
+namespace React\Promise;
+
+class LazyPromise implements CancellablePromiseInterface
+{
+    private $factory;
+    private $promise;
+
+    public function __construct(callable $factory)
+    {
+        $this->factory = $factory;
+    }
+
+    public function then(callable $onFulfilled = null, callable $onRejected = null, callable $onProgress = null)
+    {
+        return $this->promise()->then($onFulfilled, $onRejected, $onProgress);
+    }
+
+    public function cancel()
+    {
+        return $this->promise()->cancel();
+    }
+
+    private function promise()
+    {
+        if (null === $this->promise) {
+            try {
+                $this->promise = resolve(call_user_func($this->factory));
+            } catch (\Exception $exception) {
+                $this->promise = new RejectedPromise($exception);
+            }
+        }
+
+        return $this->promise;
+    }
+}
diff --git a/core/vendor/react/promise/src/Promise.php b/core/vendor/react/promise/src/Promise.php
new file mode 100644
index 0000000000000000000000000000000000000000..09ebb32be831def82a2ad0686073874b538f71c7
--- /dev/null
+++ b/core/vendor/react/promise/src/Promise.php
@@ -0,0 +1,135 @@
+<?php
+
+namespace React\Promise;
+
+class Promise implements CancellablePromiseInterface
+{
+    private $canceller;
+    private $result;
+
+    private $handlers = [];
+    private $progressHandlers = [];
+
+    private $requiredCancelRequests = 0;
+    private $cancelRequests = 0;
+
+    public function __construct(callable $resolver, callable $canceller = null)
+    {
+        $this->canceller = $canceller;
+        $this->call($resolver);
+    }
+
+    public function then(callable $onFulfilled = null, callable $onRejected = null, callable $onProgress = null)
+    {
+        if (null !== $this->result) {
+            return $this->result->then($onFulfilled, $onRejected, $onProgress);
+        }
+
+        if (null === $this->canceller) {
+            return new static($this->resolver($onFulfilled, $onRejected, $onProgress));
+        }
+
+        $this->requiredCancelRequests++;
+
+        return new static($this->resolver($onFulfilled, $onRejected, $onProgress), function ($resolve, $reject, $progress) {
+            if (++$this->cancelRequests < $this->requiredCancelRequests) {
+                return;
+            }
+
+            $this->cancel();
+        });
+    }
+
+    public function cancel()
+    {
+        if (null === $this->canceller || null !== $this->result) {
+            return;
+        }
+
+        $this->call($this->canceller);
+    }
+
+    private function resolver(callable $onFulfilled = null, callable $onRejected = null, callable $onProgress = null)
+    {
+        return function ($resolve, $reject, $progress) use ($onFulfilled, $onRejected, $onProgress) {
+            if ($onProgress) {
+                $progressHandler = function ($update) use ($progress, $onProgress) {
+                    try {
+                        $progress($onProgress($update));
+                    } catch (\Exception $e) {
+                        $progress($e);
+                    }
+                };
+            } else {
+                $progressHandler = $progress;
+            }
+
+            $this->handlers[] = function (PromiseInterface $promise) use ($onFulfilled, $onRejected, $resolve, $reject, $progressHandler) {
+                $promise
+                    ->then($onFulfilled, $onRejected)
+                    ->then($resolve, $reject, $progressHandler);
+            };
+
+            $this->progressHandlers[] = $progressHandler;
+        };
+    }
+
+    private function resolve($value = null)
+    {
+        if (null !== $this->result) {
+            return;
+        }
+
+        $this->settle(resolve($value));
+    }
+
+    private function reject($reason = null)
+    {
+        if (null !== $this->result) {
+            return;
+        }
+
+        $this->settle(reject($reason));
+    }
+
+    private function progress($update = null)
+    {
+        if (null !== $this->result) {
+            return;
+        }
+
+        foreach ($this->progressHandlers as $handler) {
+            $handler($update);
+        }
+    }
+
+    private function settle(PromiseInterface $result)
+    {
+        foreach ($this->handlers as $handler) {
+            $handler($result);
+        }
+
+        $this->progressHandlers = $this->handlers = [];
+
+        $this->result = $result;
+    }
+
+    private function call(callable $callback)
+    {
+        try {
+            $callback(
+                function ($value = null) {
+                    $this->resolve($value);
+                },
+                function ($reason = null) {
+                    $this->reject($reason);
+                },
+                function ($update = null) {
+                    $this->progress($update);
+                }
+            );
+        } catch (\Exception $e) {
+            $this->reject($e);
+        }
+    }
+}
diff --git a/core/vendor/react/promise/src/PromiseInterface.php b/core/vendor/react/promise/src/PromiseInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..d80d11421ad1f60c4e05002288a07b91f6312b27
--- /dev/null
+++ b/core/vendor/react/promise/src/PromiseInterface.php
@@ -0,0 +1,11 @@
+<?php
+
+namespace React\Promise;
+
+interface PromiseInterface
+{
+    /**
+     * @return PromiseInterface
+     */
+    public function then(callable $onFulfilled = null, callable $onRejected = null, callable $onProgress = null);
+}
diff --git a/core/vendor/react/promise/src/PromisorInterface.php b/core/vendor/react/promise/src/PromisorInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..9341a4fa83cd840f7baa12a36987aa6ade856e88
--- /dev/null
+++ b/core/vendor/react/promise/src/PromisorInterface.php
@@ -0,0 +1,11 @@
+<?php
+
+namespace React\Promise;
+
+interface PromisorInterface
+{
+    /**
+     * @return PromiseInterface
+     */
+    public function promise();
+}
diff --git a/core/vendor/react/promise/src/RejectedPromise.php b/core/vendor/react/promise/src/RejectedPromise.php
new file mode 100644
index 0000000000000000000000000000000000000000..ee318cbf448a4459c33111e0885039838d3cc711
--- /dev/null
+++ b/core/vendor/react/promise/src/RejectedPromise.php
@@ -0,0 +1,34 @@
+<?php
+
+namespace React\Promise;
+
+class RejectedPromise implements CancellablePromiseInterface
+{
+    private $reason;
+
+    public function __construct($reason = null)
+    {
+        if ($reason instanceof PromiseInterface) {
+            throw new \InvalidArgumentException('You cannot create React\Promise\RejectedPromise with a promise. Use React\Promise\reject($promiseOrValue) instead.');
+        }
+
+        $this->reason = $reason;
+    }
+
+    public function then(callable $onFulfilled = null, callable $onRejected = null, callable $onProgress = null)
+    {
+        try {
+            if (null === $onRejected) {
+                return new RejectedPromise($this->reason);
+            }
+
+            return resolve($onRejected($this->reason));
+        } catch (\Exception $exception) {
+            return new RejectedPromise($exception);
+        }
+    }
+
+    public function cancel()
+    {
+    }
+}
diff --git a/core/vendor/react/promise/src/functions.php b/core/vendor/react/promise/src/functions.php
new file mode 100644
index 0000000000000000000000000000000000000000..fbf7766262c3a9f98c9940c93bee9af77affedd9
--- /dev/null
+++ b/core/vendor/react/promise/src/functions.php
@@ -0,0 +1,160 @@
+<?php
+
+namespace React\Promise;
+
+function resolve($promiseOrValue = null)
+{
+    if ($promiseOrValue instanceof PromiseInterface) {
+        return $promiseOrValue;
+    }
+
+    return new FulfilledPromise($promiseOrValue);
+}
+
+function reject($promiseOrValue = null)
+{
+    if ($promiseOrValue instanceof PromiseInterface) {
+        return $promiseOrValue->then(function ($value) {
+            return new RejectedPromise($value);
+        });
+    }
+
+    return new RejectedPromise($promiseOrValue);
+}
+
+function all($promisesOrValues)
+{
+    return map($promisesOrValues, function ($val) {
+        return $val;
+    });
+}
+
+function race($promisesOrValues)
+{
+    return resolve($promisesOrValues)
+        ->then(function ($array) {
+            if (!is_array($array) || !$array) {
+                return resolve();
+            }
+
+            return new Promise(function ($resolve, $reject, $progress) use ($array) {
+                foreach ($array as $promiseOrValue) {
+                    resolve($promiseOrValue)
+                        ->then($resolve, $reject, $progress);
+                }
+            });
+        });
+}
+
+function any($promisesOrValues)
+{
+    return some($promisesOrValues, 1)
+        ->then(function ($val) {
+            return array_shift($val);
+        });
+}
+
+function some($promisesOrValues, $howMany)
+{
+    return resolve($promisesOrValues)
+        ->then(function ($array) use ($howMany) {
+            if (!is_array($array) || !$array || $howMany < 1) {
+                return resolve([]);
+            }
+
+            return new Promise(function ($resolve, $reject, $progress) use ($array, $howMany) {
+                $len       = count($array);
+                $toResolve = min($howMany, $len);
+                $toReject  = ($len - $toResolve) + 1;
+                $values    = [];
+                $reasons   = [];
+
+                foreach ($array as $i => $promiseOrValue) {
+                    $fulfiller = function ($val) use ($i, &$values, &$toResolve, $toReject, $resolve) {
+                        if ($toResolve < 1 || $toReject < 1) {
+                            return;
+                        }
+
+                        $values[$i] = $val;
+
+                        if (0 === --$toResolve) {
+                            $resolve($values);
+                        }
+                    };
+
+                    $rejecter = function ($reason) use ($i, &$reasons, &$toReject, $toResolve, $reject) {
+                        if ($toResolve < 1 || $toReject < 1) {
+                            return;
+                        }
+
+                        $reasons[$i] = $reason;
+
+                        if (0 === --$toReject) {
+                            $reject($reasons);
+                        }
+                    };
+
+                    resolve($promiseOrValue)
+                        ->then($fulfiller, $rejecter, $progress);
+                }
+            });
+        });
+}
+
+function map($promisesOrValues, callable $mapFunc)
+{
+    return resolve($promisesOrValues)
+        ->then(function ($array) use ($mapFunc) {
+            if (!is_array($array) || !$array) {
+                return resolve([]);
+            }
+
+            return new Promise(function ($resolve, $reject, $progress) use ($array, $mapFunc) {
+                $toResolve = count($array);
+                $values    = [];
+
+                foreach ($array as $i => $promiseOrValue) {
+                    resolve($promiseOrValue)
+                        ->then($mapFunc)
+                        ->then(
+                            function ($mapped) use ($i, &$values, &$toResolve, $resolve) {
+                                $values[$i] = $mapped;
+
+                                if (0 === --$toResolve) {
+                                    $resolve($values);
+                                }
+                            },
+                            $reject,
+                            $progress
+                        );
+                }
+            });
+        });
+}
+
+function reduce($promisesOrValues, callable $reduceFunc , $initialValue = null)
+{
+    return resolve($promisesOrValues)
+        ->then(function ($array) use ($reduceFunc, $initialValue) {
+            if (!is_array($array)) {
+                $array = [];
+            }
+
+            $total = count($array);
+            $i = 0;
+
+            // Wrap the supplied $reduceFunc with one that handles promises and then
+            // delegates to the supplied.
+            $wrappedReduceFunc = function ($current, $val) use ($reduceFunc, $total, &$i) {
+                return resolve($current)
+                    ->then(function ($c) use ($reduceFunc, $total, &$i, $val) {
+                        return resolve($val)
+                            ->then(function ($value) use ($reduceFunc, $total, &$i, $c) {
+                                return $reduceFunc($c, $value, $i++, $total);
+                            });
+                    });
+            };
+
+            return array_reduce($array, $wrappedReduceFunc, $initialValue);
+        });
+}
diff --git a/core/vendor/react/promise/tests/DeferredTest.php b/core/vendor/react/promise/tests/DeferredTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..754a84dfcadfa6a6ea4fed57750ee89ba1b34583
--- /dev/null
+++ b/core/vendor/react/promise/tests/DeferredTest.php
@@ -0,0 +1,23 @@
+<?php
+
+namespace React\Promise;
+
+use React\Promise\PromiseAdapter\CallbackPromiseAdapter;
+
+class DeferredTest extends TestCase
+{
+    use PromiseTest\FullTestTrait;
+
+    public function getPromiseTestAdapter(callable $canceller = null)
+    {
+        $d = new Deferred($canceller);
+
+        return new CallbackPromiseAdapter([
+            'promise'  => [$d, 'promise'],
+            'resolve'  => [$d, 'resolve'],
+            'reject'   => [$d, 'reject'],
+            'progress' => [$d, 'progress'],
+            'settle'   => [$d, 'resolve'],
+        ]);
+    }
+}
diff --git a/core/vendor/react/promise/tests/FulfilledPromiseTest.php b/core/vendor/react/promise/tests/FulfilledPromiseTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..e72ecebc0ad05e4abfb5587eade7e8c52dd1e6cb
--- /dev/null
+++ b/core/vendor/react/promise/tests/FulfilledPromiseTest.php
@@ -0,0 +1,50 @@
+<?php
+
+namespace React\Promise;
+
+use React\Promise\PromiseAdapter\CallbackPromiseAdapter;
+
+class FulfilledPromiseTest extends TestCase
+{
+    use PromiseTest\PromiseSettledTestTrait,
+        PromiseTest\PromiseFulfilledTestTrait;
+
+    public function getPromiseTestAdapter(callable $canceller = null)
+    {
+        $promise = null;
+
+        return new CallbackPromiseAdapter([
+            'promise' => function () use (&$promise) {
+                if (!$promise) {
+                    throw new \LogicException('FulfilledPromise must be resolved before obtaining the promise');
+                }
+
+                return $promise;
+            },
+            'resolve' => function ($value = null) use (&$promise) {
+                if (!$promise) {
+                    $promise = new FulfilledPromise($value);
+                }
+            },
+            'reject' => function () {
+                throw new \LogicException('You cannot call reject() for React\Promise\FulfilledPromise');
+            },
+            'progress' => function () {
+                throw new \LogicException('You cannot call progress() for React\Promise\FulfilledPromise');
+            },
+            'settle' => function ($value = null) use (&$promise) {
+                if (!$promise) {
+                    $promise = new FulfilledPromise($value);
+                }
+            },
+        ]);
+    }
+
+    /** @test */
+    public function shouldThrowExceptionIfConstructedWithAPromise()
+    {
+        $this->setExpectedException('\InvalidArgumentException');
+
+        return new FulfilledPromise(new FulfilledPromise());
+    }
+}
diff --git a/core/vendor/react/promise/tests/FunctionAllTest.php b/core/vendor/react/promise/tests/FunctionAllTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..fcd0a5df15637ff7492cc0c596eedc4ec5702964
--- /dev/null
+++ b/core/vendor/react/promise/tests/FunctionAllTest.php
@@ -0,0 +1,97 @@
+<?php
+
+namespace React\Promise;
+
+class FunctionAllTest extends TestCase
+{
+    /** @test */
+    public function shouldResolveEmptyInput()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo([]));
+
+        all([])
+            ->then($mock);
+    }
+
+    /** @test */
+    public function shouldResolveValuesArray()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo([1, 2, 3]));
+
+        all([1, 2, 3])
+            ->then($mock);
+    }
+
+    /** @test */
+    public function shouldResolvePromisesArray()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo([1, 2, 3]));
+
+        all([resolve(1), resolve(2), resolve(3)])
+            ->then($mock);
+    }
+
+    /** @test */
+    public function shouldResolveSparseArrayInput()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo([null, 1, null, 1, 1]));
+
+        all([null, 1, null, 1, 1])
+            ->then($mock);
+    }
+
+    /** @test */
+    public function shouldRejectIfAnyInputPromiseRejects()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(2));
+
+        all([resolve(1), reject(2), resolve(3)])
+            ->then($this->expectCallableNever(), $mock);
+    }
+
+    /** @test */
+    public function shouldAcceptAPromiseForAnArray()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo([1, 2, 3]));
+
+        all(resolve([1, 2, 3]))
+            ->then($mock);
+    }
+
+    /** @test */
+    public function shouldResolveToEmptyArrayWhenInputPromiseDoesNotResolveToArray()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo([]));
+
+        all(resolve(1))
+            ->then($mock);
+    }
+}
diff --git a/core/vendor/react/promise/tests/FunctionAnyTest.php b/core/vendor/react/promise/tests/FunctionAnyTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..bf8a0db478582c9a2d03e88ff7c54fe69e21991a
--- /dev/null
+++ b/core/vendor/react/promise/tests/FunctionAnyTest.php
@@ -0,0 +1,116 @@
+<?php
+
+namespace React\Promise;
+
+class FunctionAnyTest extends TestCase
+{
+    /** @test */
+    public function shouldResolveToNullWithEmptyInputArray()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(null));
+
+        any([])
+            ->then($mock);
+    }
+
+    /** @test */
+    public function shouldResolveWithAnInputValue()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(1));
+
+        any([1, 2, 3])
+            ->then($mock);
+    }
+
+    /** @test */
+    public function shouldResolveWithAPromisedInputValue()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(1));
+
+        any([resolve(1), resolve(2), resolve(3)])
+            ->then($mock);
+    }
+
+    /** @test */
+    public function shouldRejectWithAllRejectedInputValuesIfAllInputsAreRejected()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo([0 => 1, 1 => 2, 2 => 3]));
+
+        any([reject(1), reject(2), reject(3)])
+            ->then($this->expectCallableNever(), $mock);
+    }
+
+    /** @test */
+    public function shouldResolveWhenFirstInputPromiseResolves()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(1));
+
+        any([resolve(1), reject(2), reject(3)])
+            ->then($mock);
+    }
+
+    /** @test */
+    public function shouldAcceptAPromiseForAnArray()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(1));
+
+        any(resolve([1, 2, 3]))
+            ->then($mock);
+    }
+
+    /** @test */
+    public function shouldResolveToNullArrayWhenInputPromiseDoesNotResolveToArray()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(null));
+
+        any(resolve(1))
+            ->then($mock);
+    }
+
+    /** @test */
+    public function shouldNotRelyOnArryIndexesWhenUnwrappingToASingleResolutionValue()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(2));
+
+        $d1 = new Deferred();
+        $d2 = new Deferred();
+
+        any(['abc' => $d1->promise(), 1 => $d2->promise()])
+            ->then($mock);
+
+        $d2->resolve(2);
+        $d1->resolve(1);
+    }
+}
diff --git a/core/vendor/react/promise/tests/FunctionMapTest.php b/core/vendor/react/promise/tests/FunctionMapTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..b8bf3a8327b80e6fb6de96a64d4ad014d39525ee
--- /dev/null
+++ b/core/vendor/react/promise/tests/FunctionMapTest.php
@@ -0,0 +1,125 @@
+<?php
+
+namespace React\Promise;
+
+class FunctionMapTest extends TestCase
+{
+    protected function mapper()
+    {
+        return function ($val) {
+            return $val * 2;
+        };
+    }
+
+    protected function promiseMapper()
+    {
+        return function ($val) {
+            return resolve($val * 2);
+        };
+    }
+
+    /** @test */
+    public function shouldMapInputValuesArray()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo([2, 4, 6]));
+
+        map(
+            [1, 2, 3],
+            $this->mapper()
+        )->then($mock);
+    }
+
+    /** @test */
+    public function shouldMapInputPromisesArray()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo([2, 4, 6]));
+
+        map(
+            [resolve(1), resolve(2), resolve(3)],
+            $this->mapper()
+        )->then($mock);
+    }
+
+    /** @test */
+    public function shouldMapMixedInputArray()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo([2, 4, 6]));
+
+        map(
+            [1, resolve(2), 3],
+            $this->mapper()
+        )->then($mock);
+    }
+
+    /** @test */
+    public function shouldMapInputWhenMapperReturnsAPromise()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo([2, 4, 6]));
+
+        map(
+            [1, 2, 3],
+            $this->promiseMapper()
+        )->then($mock);
+    }
+
+    /** @test */
+    public function shouldAcceptAPromiseForAnArray()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo([2, 4, 6]));
+
+        map(
+            resolve([1, resolve(2), 3]),
+            $this->mapper()
+        )->then($mock);
+    }
+
+    /** @test */
+    public function shouldResolveToEmptyArrayWhenInputPromiseDoesNotResolveToArray()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo([]));
+
+        map(
+            resolve(1),
+            $this->mapper()
+        )->then($mock);
+    }
+
+    /** @test */
+    public function shouldRejectWhenInputContainsRejection()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(2));
+
+        map(
+            [resolve(1), reject(2), resolve(3)],
+            $this->mapper()
+        )->then($this->expectCallableNever(), $mock);
+    }
+}
diff --git a/core/vendor/react/promise/tests/FunctionRaceTest.php b/core/vendor/react/promise/tests/FunctionRaceTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..553220c5e337b6d1b5b020fb1cfd40a134f72d9b
--- /dev/null
+++ b/core/vendor/react/promise/tests/FunctionRaceTest.php
@@ -0,0 +1,122 @@
+<?php
+
+namespace React\Promise;
+
+class FunctionRaceTest extends TestCase
+{
+    /** @test */
+    public function shouldResolveEmptyInput()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(null));
+
+        race(
+            []
+        )->then($mock);
+    }
+
+    /** @test */
+    public function shouldResolveValuesArray()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(1));
+
+        race(
+            [1, 2, 3]
+        )->then($mock);
+    }
+
+    /** @test */
+    public function shouldResolvePromisesArray()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(2));
+
+        $d1 = new Deferred();
+        $d2 = new Deferred();
+        $d3 = new Deferred();
+
+        race(
+            [$d1->promise(), $d2->promise(), $d3->promise()]
+        )->then($mock);
+
+        $d2->resolve(2);
+
+        $d1->resolve(1);
+        $d3->resolve(3);
+    }
+
+    /** @test */
+    public function shouldResolveSparseArrayInput()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(null));
+
+        race(
+            [null, 1, null, 2, 3]
+        )->then($mock);
+    }
+
+    /** @test */
+    public function shouldRejectIfFirstSettledPromiseRejects()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(2));
+
+        $d1 = new Deferred();
+        $d2 = new Deferred();
+        $d3 = new Deferred();
+
+        race(
+            [$d1->promise(), $d2->promise(), $d3->promise()]
+        )->then($this->expectCallableNever(), $mock);
+
+        $d2->reject(2);
+
+        $d1->resolve(1);
+        $d3->resolve(3);
+    }
+
+    /** @test */
+    public function shouldAcceptAPromiseForAnArray()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(1));
+
+        race(
+            resolve([1, 2, 3])
+        )->then($mock);
+    }
+
+    /** @test */
+    public function shouldResolveToNullWhenInputPromiseDoesNotResolveToArray()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(null));
+
+        race(
+            resolve(1)
+        )->then($mock);
+    }
+}
diff --git a/core/vendor/react/promise/tests/FunctionReduceTest.php b/core/vendor/react/promise/tests/FunctionReduceTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..715e84778c5384268e389f04a3e70414dda5361f
--- /dev/null
+++ b/core/vendor/react/promise/tests/FunctionReduceTest.php
@@ -0,0 +1,290 @@
+<?php
+
+namespace React\Promise;
+
+class FunctionReduceTest extends TestCase
+{
+    protected function plus()
+    {
+        return function ($sum, $val) {
+            return $sum + $val;
+        };
+    }
+
+    protected function append()
+    {
+        return function ($sum, $val) {
+            return $sum . $val;
+        };
+    }
+
+    /** @test */
+    public function shouldReduceValuesWithoutInitialValue()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(6));
+
+        reduce(
+            [1, 2, 3],
+            $this->plus()
+        )->then($mock);
+    }
+
+    /** @test */
+    public function shouldReduceValuesWithInitialValue()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(7));
+
+        reduce(
+            [1, 2, 3],
+            $this->plus(),
+            1
+        )->then($mock);
+    }
+
+    /** @test */
+    public function shouldReduceValuesWithInitialPromise()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(7));
+
+        reduce(
+            [1, 2, 3],
+            $this->plus(),
+            resolve(1)
+        )->then($mock);
+    }
+
+    /** @test */
+    public function shouldReducePromisedValuesWithoutInitialValue()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(6));
+
+        reduce(
+            [resolve(1), resolve(2), resolve(3)],
+            $this->plus()
+        )->then($mock);
+    }
+
+    /** @test */
+    public function shouldReducePromisedValuesWithInitialValue()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(7));
+
+        reduce(
+            [resolve(1), resolve(2), resolve(3)],
+            $this->plus(),
+            1
+        )->then($mock);
+    }
+
+    /** @test */
+    public function shouldReducePromisedValuesWithInitialPromise()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(7));
+
+        reduce(
+            [resolve(1), resolve(2), resolve(3)],
+            $this->plus(),
+            resolve(1)
+        )->then($mock);
+    }
+
+    /** @test */
+    public function shouldReduceEmptyInputWithInitialValue()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(1));
+
+        reduce(
+            [],
+            $this->plus(),
+            1
+        )->then($mock);
+    }
+
+    /** @test */
+    public function shouldReduceEmptyInputWithInitialPromise()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(1));
+
+        reduce(
+            [],
+            $this->plus(),
+            resolve(1)
+        )->then($mock);
+    }
+
+    /** @test */
+    public function shouldRejectWhenInputContainsRejection()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(2));
+
+        reduce(
+            [resolve(1), reject(2), resolve(3)],
+            $this->plus(),
+            resolve(1)
+        )->then($this->expectCallableNever(), $mock);
+    }
+
+    /** @test */
+    public function shouldResolveWithNullWhenInputIsEmptyAndNoInitialValueOrPromiseProvided()
+    {
+        // Note: this is different from when.js's behavior!
+        // In when.reduce(), this rejects with a TypeError exception (following
+        // JavaScript's [].reduce behavior.
+        // We're following PHP's array_reduce behavior and resolve with NULL.
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(null));
+
+        reduce(
+            [],
+            $this->plus()
+        )->then($mock);
+    }
+
+    /** @test */
+    public function shouldAllowSparseArrayInputWithoutInitialValue()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(3));
+
+        reduce(
+            [null, null, 1, null, 1, 1],
+            $this->plus()
+        )->then($mock);
+    }
+
+    /** @test */
+    public function shouldAllowSparseArrayInputWithInitialValue()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(4));
+
+        reduce(
+            [null, null, 1, null, 1, 1],
+            $this->plus(),
+            1
+        )->then($mock);
+    }
+
+    /** @test */
+    public function shouldReduceInInputOrder()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo('123'));
+
+        reduce(
+            [1, 2, 3],
+            $this->append(),
+            ''
+        )->then($mock);
+    }
+
+    /** @test */
+    public function shouldAcceptAPromiseForAnArray()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo('123'));
+
+        reduce(
+            resolve([1, 2, 3]),
+            $this->append(),
+            ''
+        )->then($mock);
+    }
+
+    /** @test */
+    public function shouldResolveToInitialValueWhenInputPromiseDoesNotResolveToAnArray()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(1));
+
+        reduce(
+            resolve(1),
+            $this->plus(),
+            1
+        )->then($mock);
+    }
+
+    /** @test */
+    public function shouldProvideCorrectBasisValue()
+    {
+        $insertIntoArray = function ($arr, $val, $i) {
+            $arr[$i] = $val;
+
+            return $arr;
+        };
+
+        $d1 = new Deferred();
+        $d2 = new Deferred();
+        $d3 = new Deferred();
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo([1, 2, 3]));
+
+        reduce(
+            [$d1->promise(), $d2->promise(), $d3->promise()],
+            $insertIntoArray,
+            []
+        )->then($mock);
+
+        $d3->resolve(3);
+        $d1->resolve(1);
+        $d2->resolve(2);
+    }
+}
diff --git a/core/vendor/react/promise/tests/FunctionRejectTest.php b/core/vendor/react/promise/tests/FunctionRejectTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..84b8ec6a04245afeb27a8d9004ebb7f7f3886bfa
--- /dev/null
+++ b/core/vendor/react/promise/tests/FunctionRejectTest.php
@@ -0,0 +1,64 @@
+<?php
+
+namespace React\Promise;
+
+class FunctionRejectTest extends TestCase
+{
+    /** @test */
+    public function shouldRejectAnImmediateValue()
+    {
+        $expected = 123;
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo($expected));
+
+        reject($expected)
+            ->then(
+                $this->expectCallableNever(),
+                $mock
+            );
+    }
+
+    /** @test */
+    public function shouldRejectAFulfilledPromise()
+    {
+        $expected = 123;
+
+        $resolved = new FulfilledPromise($expected);
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo($expected));
+
+        reject($resolved)
+            ->then(
+                $this->expectCallableNever(),
+                $mock
+            );
+    }
+
+    /** @test */
+    public function shouldRejectARejectedPromise()
+    {
+        $expected = 123;
+
+        $resolved = new RejectedPromise($expected);
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo($expected));
+
+        reject($resolved)
+            ->then(
+                $this->expectCallableNever(),
+                $mock
+            );
+    }
+}
diff --git a/core/vendor/react/promise/tests/FunctionResolveTest.php b/core/vendor/react/promise/tests/FunctionResolveTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..01307d5a857a9b477d86a7bb921e8bb51578a52e
--- /dev/null
+++ b/core/vendor/react/promise/tests/FunctionResolveTest.php
@@ -0,0 +1,94 @@
+<?php
+
+namespace React\Promise;
+
+class FunctionResolveTest extends TestCase
+{
+    /** @test */
+    public function shouldResolveAnImmediateValue()
+    {
+        $expected = 123;
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo($expected));
+
+        resolve($expected)
+            ->then(
+                $mock,
+                $this->expectCallableNever()
+            );
+    }
+
+    /** @test */
+    public function shouldResolveAFulfilledPromise()
+    {
+        $expected = 123;
+
+        $resolved = new FulfilledPromise($expected);
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo($expected));
+
+        resolve($resolved)
+            ->then(
+                $mock,
+                $this->expectCallableNever()
+            );
+    }
+
+    /** @test */
+    public function shouldRejectARejectedPromise()
+    {
+        $expected = 123;
+
+        $resolved = new RejectedPromise($expected);
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo($expected));
+
+        resolve($resolved)
+            ->then(
+                $this->expectCallableNever(),
+                $mock
+            );
+    }
+
+    /** @test */
+    public function shouldSupportDeepNestingInPromiseChains()
+    {
+        $d = new Deferred();
+        $d->resolve(false);
+
+        $result = resolve(resolve($d->promise()->then(function ($val) {
+            $d = new Deferred();
+            $d->resolve($val);
+
+            $identity = function ($val) {
+                return $val;
+            };
+
+            return resolve($d->promise()->then($identity))->then(
+                function ($val) {
+                    return !$val;
+                }
+            );
+        })));
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(true));
+
+        $result->then($mock);
+    }
+}
diff --git a/core/vendor/react/promise/tests/FunctionSomeTest.php b/core/vendor/react/promise/tests/FunctionSomeTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..09e5350493efa244d0ec8364e99eb074d3603adc
--- /dev/null
+++ b/core/vendor/react/promise/tests/FunctionSomeTest.php
@@ -0,0 +1,126 @@
+<?php
+
+namespace React\Promise;
+
+class FunctionSomeTest extends TestCase
+{
+    /** @test */
+    public function shouldResolveEmptyInput()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo([]));
+
+        some(
+            [],
+            1
+        )->then($mock);
+    }
+
+    /** @test */
+    public function shouldResolveValuesArray()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo([1, 2]));
+
+        some(
+            [1, 2, 3],
+            2
+        )->then($mock);
+    }
+
+    /** @test */
+    public function shouldResolvePromisesArray()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo([1, 2]));
+
+        some(
+            [resolve(1), resolve(2), resolve(3)],
+            2
+        )->then($mock);
+    }
+
+    /** @test */
+    public function shouldResolveSparseArrayInput()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo([null, 1]));
+
+        some(
+            [null, 1, null, 2, 3],
+            2
+        )->then($mock);
+    }
+
+    /** @test */
+    public function shouldRejectIfAnyInputPromiseRejectsBeforeDesiredNumberOfInputsAreResolved()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo([1 => 2, 2 => 3]));
+
+        some(
+            [resolve(1), reject(2), reject(3)],
+            2
+        )->then($this->expectCallableNever(), $mock);
+    }
+
+    /** @test */
+    public function shouldAcceptAPromiseForAnArray()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo([1, 2]));
+
+        some(
+            resolve([1, 2, 3]),
+            2
+        )->then($mock);
+    }
+
+    /** @test */
+    public function shouldResolveWithEmptyArrayIfHowManyIsLessThanOne()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo([]));
+
+        some(
+            [1],
+            0
+        )->then($mock);
+    }
+
+    /** @test */
+    public function shouldResolveToEmptyArrayWhenInputPromiseDoesNotResolveToArray()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo([]));
+
+        some(
+            resolve(1),
+            1
+        )->then($mock);
+    }
+}
diff --git a/core/vendor/react/promise/tests/LazyPromiseTest.php b/core/vendor/react/promise/tests/LazyPromiseTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..a6eb446380831ee080a981b165e0ea0796e78ee4
--- /dev/null
+++ b/core/vendor/react/promise/tests/LazyPromiseTest.php
@@ -0,0 +1,107 @@
+<?php
+
+namespace React\Promise;
+
+use React\Promise\PromiseAdapter\CallbackPromiseAdapter;
+
+class LazyPromiseTest extends TestCase
+{
+    use PromiseTest\FullTestTrait;
+
+    public function getPromiseTestAdapter(callable $canceller = null)
+    {
+        $d = new Deferred($canceller);
+
+        $factory = function () use ($d) {
+            return $d->promise();
+        };
+
+        return new CallbackPromiseAdapter([
+            'promise'  => function () use ($factory) {
+                return new LazyPromise($factory);
+            },
+            'resolve'  => [$d, 'resolve'],
+            'reject'   => [$d, 'reject'],
+            'progress' => [$d, 'progress'],
+            'settle'   => [$d, 'resolve'],
+        ]);
+    }
+
+    /** @test */
+    public function shouldNotCallFactoryIfThenIsNotInvoked()
+    {
+        $factory = $this->createCallableMock();
+        $factory
+            ->expects($this->never())
+            ->method('__invoke');
+
+        new LazyPromise($factory);
+    }
+
+    /** @test */
+    public function shouldCallFactoryIfThenIsInvoked()
+    {
+        $factory = $this->createCallableMock();
+        $factory
+            ->expects($this->once())
+            ->method('__invoke');
+
+        $p = new LazyPromise($factory);
+        $p->then();
+    }
+
+    /** @test */
+    public function shouldReturnPromiseFromFactory()
+    {
+        $factory = $this->createCallableMock();
+        $factory
+            ->expects($this->once())
+            ->method('__invoke')
+            ->will($this->returnValue(new FulfilledPromise(1)));
+
+        $onFulfilled = $this->createCallableMock();
+        $onFulfilled
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(1));
+
+        $p = new LazyPromise($factory);
+
+        $p->then($onFulfilled);
+    }
+
+    /** @test */
+    public function shouldReturnPromiseIfFactoryReturnsNull()
+    {
+        $factory = $this->createCallableMock();
+        $factory
+            ->expects($this->once())
+            ->method('__invoke')
+            ->will($this->returnValue(null));
+
+        $p = new LazyPromise($factory);
+        $this->assertInstanceOf('React\\Promise\\PromiseInterface', $p->then());
+    }
+
+    /** @test */
+    public function shouldReturnRejectedPromiseIfFactoryThrowsException()
+    {
+        $exception = new \Exception();
+
+        $factory = $this->createCallableMock();
+        $factory
+            ->expects($this->once())
+            ->method('__invoke')
+            ->will($this->throwException($exception));
+
+        $onRejected = $this->createCallableMock();
+        $onRejected
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo($exception));
+
+        $p = new LazyPromise($factory);
+
+        $p->then($this->expectCallableNever(), $onRejected);
+    }
+}
diff --git a/core/vendor/react/promise/tests/PromiseAdapter/CallbackPromiseAdapter.php b/core/vendor/react/promise/tests/PromiseAdapter/CallbackPromiseAdapter.php
new file mode 100644
index 0000000000000000000000000000000000000000..3a46050e9f435672115bd294de25a95ed34c191c
--- /dev/null
+++ b/core/vendor/react/promise/tests/PromiseAdapter/CallbackPromiseAdapter.php
@@ -0,0 +1,40 @@
+<?php
+
+namespace React\Promise\PromiseAdapter;
+
+use React\Promise;
+
+class CallbackPromiseAdapter implements PromiseAdapterInterface
+{
+    private $callbacks;
+
+    public function __construct(array $callbacks)
+    {
+        $this->callbacks = $callbacks;
+    }
+
+    public function promise()
+    {
+        return call_user_func_array($this->callbacks['promise'], func_get_args());
+    }
+
+    public function resolve()
+    {
+        return call_user_func_array($this->callbacks['resolve'], func_get_args());
+    }
+
+    public function reject()
+    {
+        return call_user_func_array($this->callbacks['reject'], func_get_args());
+    }
+
+    public function progress()
+    {
+        return call_user_func_array($this->callbacks['progress'], func_get_args());
+    }
+
+    public function settle()
+    {
+        return call_user_func_array($this->callbacks['settle'], func_get_args());
+    }
+}
diff --git a/core/vendor/react/promise/tests/PromiseAdapter/PromiseAdapterInterface.php b/core/vendor/react/promise/tests/PromiseAdapter/PromiseAdapterInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..01baf46678661c91f660023c2d0bec12fb4b2ceb
--- /dev/null
+++ b/core/vendor/react/promise/tests/PromiseAdapter/PromiseAdapterInterface.php
@@ -0,0 +1,14 @@
+<?php
+
+namespace React\Promise\PromiseAdapter;
+
+use React\Promise;
+
+interface PromiseAdapterInterface
+{
+    public function promise();
+    public function resolve();
+    public function reject();
+    public function progress();
+    public function settle();
+}
diff --git a/core/vendor/react/promise/tests/PromiseTest.php b/core/vendor/react/promise/tests/PromiseTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..18e30f7c38ef13b74521070737f790a82e1e3791
--- /dev/null
+++ b/core/vendor/react/promise/tests/PromiseTest.php
@@ -0,0 +1,50 @@
+<?php
+
+namespace React\Promise;
+
+use React\Promise\PromiseAdapter\CallbackPromiseAdapter;
+
+class PromiseTest extends TestCase
+{
+    use PromiseTest\FullTestTrait;
+
+    public function getPromiseTestAdapter(callable $canceller = null)
+    {
+        $resolveCallback = $rejectCallback = $progressCallback = null;
+
+        $promise = new Promise(function ($resolve, $reject, $progress) use (&$resolveCallback, &$rejectCallback, &$progressCallback) {
+            $resolveCallback  = $resolve;
+            $rejectCallback   = $reject;
+            $progressCallback = $progress;
+        }, $canceller);
+
+        return new CallbackPromiseAdapter([
+            'promise' => function () use ($promise) {
+                return $promise;
+            },
+            'resolve'  => $resolveCallback,
+            'reject'   => $rejectCallback,
+            'progress' => $progressCallback,
+            'settle'   => $resolveCallback,
+        ]);
+    }
+
+    /** @test */
+    public function shouldRejectIfResolverThrowsException()
+    {
+        $exception = new \Exception('foo');
+
+        $promise = new Promise(function () use ($exception) {
+            throw $exception;
+        });
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo($exception));
+
+        $promise
+            ->then($this->expectCallableNever(), $mock);
+    }
+}
diff --git a/core/vendor/react/promise/tests/PromiseTest/CancelTestTrait.php b/core/vendor/react/promise/tests/PromiseTest/CancelTestTrait.php
new file mode 100644
index 0000000000000000000000000000000000000000..d6c095662c8fccdb51ffc25d6baa13dc5da60111
--- /dev/null
+++ b/core/vendor/react/promise/tests/PromiseTest/CancelTestTrait.php
@@ -0,0 +1,206 @@
+<?php
+
+namespace React\Promise\PromiseTest;
+
+use React\Promise;
+
+trait CancelTestTrait
+{
+    /**
+     * @return \React\Promise\PromiseAdapter\PromiseAdapterInterface
+     */
+    abstract public function getPromiseTestAdapter(callable $canceller = null);
+
+    /** @test */
+    public function cancelShouldCallCancellerWithResolverArguments()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->isType('callable'), $this->isType('callable'), $this->isType('callable'));
+
+        $adapter = $this->getPromiseTestAdapter($mock);
+
+        $adapter->promise()->cancel();
+    }
+
+    /** @test */
+    public function cancelShouldFulfillPromiseIfCancellerFulfills()
+    {
+        $adapter = $this->getPromiseTestAdapter(function ($resolve) {
+            $resolve(1);
+        });
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(1));
+
+        $adapter->promise()
+            ->then($mock, $this->expectCallableNever());
+
+        $adapter->promise()->cancel();
+    }
+
+    /** @test */
+    public function cancelShouldRejectPromiseIfCancellerRejects()
+    {
+        $adapter = $this->getPromiseTestAdapter(function ($resolve, $reject) {
+            $reject(1);
+        });
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(1));
+
+        $adapter->promise()
+            ->then($this->expectCallableNever(), $mock);
+
+        $adapter->promise()->cancel();
+    }
+
+    /** @test */
+    public function cancelShouldRejectPromiseWithExceptionIfCancellerThrows()
+    {
+        $e = new \Exception();
+
+        $adapter = $this->getPromiseTestAdapter(function () use ($e) {
+            throw $e;
+        });
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo($e));
+
+        $adapter->promise()
+            ->then($this->expectCallableNever(), $mock);
+
+        $adapter->promise()->cancel();
+    }
+
+    /** @test */
+    public function cancelShouldProgressPromiseIfCancellerNotifies()
+    {
+        $adapter = $this->getPromiseTestAdapter(function ($resolve, $reject, $progress) {
+            $progress(1);
+        });
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(1));
+
+        $adapter->promise()
+            ->then($this->expectCallableNever(), $this->expectCallableNever(), $mock);
+
+        $adapter->promise()->cancel();
+    }
+
+    /** @test */
+    public function cancelShouldCallCancellerOnlyOnceIfCancellerResolves()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->will($this->returnCallback(function ($resolve) {
+                $resolve();
+            }));
+
+        $adapter = $this->getPromiseTestAdapter($mock);
+
+        $adapter->promise()->cancel();
+        $adapter->promise()->cancel();
+    }
+
+    /** @test */
+    public function cancelShouldHaveNoEffectIfCancellerDoesNothing()
+    {
+        $adapter = $this->getPromiseTestAdapter(function () {});
+
+        $adapter->promise()
+            ->then($this->expectCallableNever(), $this->expectCallableNever());
+
+        $adapter->promise()->cancel();
+        $adapter->promise()->cancel();
+    }
+
+    /** @test */
+    public function cancelShouldCallCancellerFromDeepNestedPromiseChain()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke');
+
+        $adapter = $this->getPromiseTestAdapter($mock);
+
+        $promise = $adapter->promise()
+            ->then(function () {
+                return new Promise\Promise(function () {});
+            })
+            ->then(function () {
+                $d = new Promise\Deferred();
+
+                return $d->promise();
+            })
+            ->then(function () {
+                return new Promise\Promise(function () {});
+            });
+
+        $promise->cancel();
+    }
+
+    /** @test */
+    public function cancelCalledOnChildrenSouldOnlyCancelWhenAllChildrenCancelled()
+    {
+        $adapter = $this->getPromiseTestAdapter($this->expectCallableNever());
+
+        $child1 = $adapter->promise()
+            ->then()
+            ->then();
+
+        $adapter->promise()
+            ->then();
+
+        $child1->cancel();
+    }
+
+    /** @test */
+    public function cancelShouldTriggerCancellerWhenAllChildrenCancel()
+    {
+        $adapter = $this->getPromiseTestAdapter($this->expectCallableOnce());
+
+        $child1 = $adapter->promise()
+            ->then()
+            ->then();
+
+        $child2 = $adapter->promise()
+            ->then();
+
+        $child1->cancel();
+        $child2->cancel();
+    }
+
+    /** @test */
+    public function cancelShouldAlwaysTriggerCancellerWhenCalledOnRootPromise()
+    {
+        $adapter = $this->getPromiseTestAdapter($this->expectCallableOnce());
+
+        $adapter->promise()
+            ->then()
+            ->then();
+
+        $adapter->promise()
+            ->then();
+
+        $adapter->promise()->cancel();
+    }
+}
diff --git a/core/vendor/react/promise/tests/PromiseTest/FullTestTrait.php b/core/vendor/react/promise/tests/PromiseTest/FullTestTrait.php
new file mode 100644
index 0000000000000000000000000000000000000000..fd8f9342004b6c000493162dd1f728cfa99c2def
--- /dev/null
+++ b/core/vendor/react/promise/tests/PromiseTest/FullTestTrait.php
@@ -0,0 +1,15 @@
+<?php
+
+namespace React\Promise\PromiseTest;
+
+trait FullTestTrait
+{
+    use PromisePendingTestTrait,
+        PromiseSettledTestTrait,
+        PromiseFulfilledTestTrait,
+        PromiseRejectedTestTrait,
+        ResolveTestTrait,
+        RejectTestTrait,
+        ProgressTestTrait,
+        CancelTestTrait;
+}
diff --git a/core/vendor/react/promise/tests/PromiseTest/ProgressTestTrait.php b/core/vendor/react/promise/tests/PromiseTest/ProgressTestTrait.php
new file mode 100644
index 0000000000000000000000000000000000000000..0d160a8165aa3ee57d88532bd330b09fd10764bc
--- /dev/null
+++ b/core/vendor/react/promise/tests/PromiseTest/ProgressTestTrait.php
@@ -0,0 +1,293 @@
+<?php
+
+namespace React\Promise\PromiseTest;
+
+trait ProgressTestTrait
+{
+    /**
+     * @return \React\Promise\PromiseAdapter\PromiseAdapterInterface
+     */
+    abstract public function getPromiseTestAdapter(callable $canceller = null);
+
+    /** @test */
+    public function progressShouldProgress()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $sentinel = new \stdClass();
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($sentinel);
+
+        $adapter->promise()
+            ->then($this->expectCallableNever(), $this->expectCallableNever(), $mock);
+
+        $adapter->progress($sentinel);
+    }
+
+    /** @test */
+    public function progressShouldPropagateProgressToDownstreamPromises()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $sentinel = new \stdClass();
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->will($this->returnArgument(0));
+
+        $mock2 = $this->createCallableMock();
+        $mock2
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($sentinel);
+
+        $adapter->promise()
+            ->then(
+                $this->expectCallableNever(),
+                $this->expectCallableNever(),
+                $mock
+            )
+            ->then(
+                $this->expectCallableNever(),
+                $this->expectCallableNever(),
+                $mock2
+            );
+
+        $adapter->progress($sentinel);
+    }
+
+    /** @test */
+    public function progressShouldPropagateTransformedProgressToDownstreamPromises()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $sentinel = new \stdClass();
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->will($this->returnValue($sentinel));
+
+        $mock2 = $this->createCallableMock();
+        $mock2
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($sentinel);
+
+        $adapter->promise()
+            ->then(
+                $this->expectCallableNever(),
+                $this->expectCallableNever(),
+                $mock
+            )
+            ->then(
+                $this->expectCallableNever(),
+                $this->expectCallableNever(),
+                $mock2
+            );
+
+        $adapter->progress(1);
+    }
+
+    /** @test */
+    public function progressShouldPropagateCaughtExceptionValueAsProgress()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $exception = new \Exception();
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->will($this->throwException($exception));
+
+        $mock2 = $this->createCallableMock();
+        $mock2
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo($exception));
+
+        $adapter->promise()
+            ->then(
+                $this->expectCallableNever(),
+                $this->expectCallableNever(),
+                $mock
+            )
+            ->then(
+                $this->expectCallableNever(),
+                $this->expectCallableNever(),
+                $mock2
+            );
+
+        $adapter->progress(1);
+    }
+
+    /** @test */
+    public function progressShouldForwardProgressEventsWhenIntermediaryCallbackTiedToAResolvedPromiseReturnsAPromise()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+        $adapter2 = $this->getPromiseTestAdapter();
+
+        $promise2 = $adapter2->promise();
+
+        $sentinel = new \stdClass();
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($sentinel);
+
+        // resolve BEFORE attaching progress handler
+        $adapter->resolve();
+
+        $adapter->promise()
+            ->then(function () use ($promise2) {
+                return $promise2;
+            })
+            ->then(
+                $this->expectCallableNever(),
+                $this->expectCallableNever(),
+                $mock
+            );
+
+        $adapter2->progress($sentinel);
+    }
+
+    /** @test */
+    public function progressShouldForwardProgressEventsWhenIntermediaryCallbackTiedToAnUnresolvedPromiseReturnsAPromise()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+        $adapter2 = $this->getPromiseTestAdapter();
+
+        $promise2 = $adapter2->promise();
+
+        $sentinel = new \stdClass();
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($sentinel);
+
+        $adapter->promise()
+            ->then(function () use ($promise2) {
+                return $promise2;
+            })
+            ->then(
+                $this->expectCallableNever(),
+                $this->expectCallableNever(),
+                $mock
+            );
+
+        // resolve AFTER attaching progress handler
+        $adapter->resolve();
+        $adapter2->progress($sentinel);
+    }
+
+    /** @test */
+    public function progressShouldForwardProgressWhenResolvedWithAnotherPromise()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+        $adapter2 = $this->getPromiseTestAdapter();
+
+        $sentinel = new \stdClass();
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->will($this->returnValue($sentinel));
+
+        $mock2 = $this->createCallableMock();
+        $mock2
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($sentinel);
+
+        $adapter->promise()
+            ->then(
+                $this->expectCallableNever(),
+                $this->expectCallableNever(),
+                $mock
+            )
+            ->then(
+                $this->expectCallableNever(),
+                $this->expectCallableNever(),
+                $mock2
+            );
+
+        $adapter->resolve($adapter2->promise());
+        $adapter2->progress($sentinel);
+    }
+
+    /** @test */
+    public function progressShouldAllowResolveAfterProgress()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->at(0))
+            ->method('__invoke')
+            ->with($this->identicalTo(1));
+        $mock
+            ->expects($this->at(1))
+            ->method('__invoke')
+            ->with($this->identicalTo(2));
+
+        $adapter->promise()
+            ->then(
+                $mock,
+                $this->expectCallableNever(),
+                $mock
+            );
+
+        $adapter->progress(1);
+        $adapter->resolve(2);
+    }
+
+    /** @test */
+    public function progressShouldAllowRejectAfterProgress()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->at(0))
+            ->method('__invoke')
+            ->with($this->identicalTo(1));
+        $mock
+            ->expects($this->at(1))
+            ->method('__invoke')
+            ->with($this->identicalTo(2));
+
+        $adapter->promise()
+            ->then(
+                $this->expectCallableNever(),
+                $mock,
+                $mock
+            );
+
+        $adapter->progress(1);
+        $adapter->reject(2);
+    }
+
+    /** @test */
+    public function progressShouldReturnSilentlyOnProgressWhenAlreadyRejected()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $adapter->reject(1);
+
+        $this->assertNull($adapter->progress());
+    }
+}
diff --git a/core/vendor/react/promise/tests/PromiseTest/PromiseFulfilledTestTrait.php b/core/vendor/react/promise/tests/PromiseTest/PromiseFulfilledTestTrait.php
new file mode 100644
index 0000000000000000000000000000000000000000..5ae29422d056c7f7cc2e0c7174a3ea09d49396e1
--- /dev/null
+++ b/core/vendor/react/promise/tests/PromiseTest/PromiseFulfilledTestTrait.php
@@ -0,0 +1,198 @@
+<?php
+
+namespace React\Promise\PromiseTest;
+
+trait PromiseFulfilledTestTrait
+{
+    /**
+     * @return \React\Promise\PromiseAdapter\PromiseAdapterInterface
+     */
+    abstract public function getPromiseTestAdapter(callable $canceller = null);
+
+    /** @test */
+    public function fulfilledPromiseShouldBeImmutable()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(1));
+
+        $adapter->resolve(1);
+        $adapter->resolve(2);
+
+        $adapter->promise()
+            ->then(
+                $mock,
+                $this->expectCallableNever()
+            );
+    }
+
+    /** @test */
+    public function fulfilledPromiseShouldInvokeNewlyAddedCallback()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $adapter->resolve(1);
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(1));
+
+        $adapter->promise()
+            ->then($mock, $this->expectCallableNever());
+    }
+
+    /** @test */
+    public function thenShouldForwardResultWhenCallbackIsNull()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(1));
+
+        $adapter->resolve(1);
+        $adapter->promise()
+            ->then(
+                null,
+                $this->expectCallableNever()
+            )
+            ->then(
+                $mock,
+                $this->expectCallableNever()
+            );
+    }
+
+    /** @test */
+    public function thenShouldForwardCallbackResultToNextCallback()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(2));
+
+        $adapter->resolve(1);
+        $adapter->promise()
+            ->then(
+                function ($val) {
+                    return $val + 1;
+                },
+                $this->expectCallableNever()
+            )
+            ->then(
+                $mock,
+                $this->expectCallableNever()
+            );
+    }
+
+    /** @test */
+    public function thenShouldForwardPromisedCallbackResultValueToNextCallback()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(2));
+
+        $adapter->resolve(1);
+        $adapter->promise()
+            ->then(
+                function ($val) {
+                    return \React\Promise\resolve($val + 1);
+                },
+                $this->expectCallableNever()
+            )
+            ->then(
+                $mock,
+                $this->expectCallableNever()
+            );
+    }
+
+    /** @test */
+    public function thenShouldSwitchFromCallbacksToErrbacksWhenCallbackReturnsARejection()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(2));
+
+        $adapter->resolve(1);
+        $adapter->promise()
+            ->then(
+                function ($val) {
+                    return \React\Promise\reject($val + 1);
+                },
+                $this->expectCallableNever()
+            )
+            ->then(
+                $this->expectCallableNever(),
+                $mock
+            );
+    }
+
+    /** @test */
+    public function thenShouldSwitchFromCallbacksToErrbacksWhenCallbackThrows()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $exception = new \Exception();
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->will($this->throwException($exception));
+
+        $mock2 = $this->createCallableMock();
+        $mock2
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo($exception));
+
+        $adapter->resolve(1);
+        $adapter->promise()
+            ->then(
+                $mock,
+                $this->expectCallableNever()
+            )
+            ->then(
+                $this->expectCallableNever(),
+                $mock2
+            );
+    }
+
+    /** @test */
+    public function cancelShouldReturnNullForFulfilledPromise()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $adapter->resolve();
+
+        $this->assertNull($adapter->promise()->cancel());
+    }
+
+    /** @test */
+    public function cancelShouldHaveNoEffectForFulfilledPromise()
+    {
+        $adapter = $this->getPromiseTestAdapter($this->expectCallableNever());
+
+        $adapter->resolve();
+
+        $adapter->promise()->cancel();
+    }
+}
diff --git a/core/vendor/react/promise/tests/PromiseTest/PromisePendingTestTrait.php b/core/vendor/react/promise/tests/PromiseTest/PromisePendingTestTrait.php
new file mode 100644
index 0000000000000000000000000000000000000000..0b188013fe90bc82db4c7cb55a08fa53c499bd29
--- /dev/null
+++ b/core/vendor/react/promise/tests/PromiseTest/PromisePendingTestTrait.php
@@ -0,0 +1,35 @@
+<?php
+
+namespace React\Promise\PromiseTest;
+
+trait PromisePendingTestTrait
+{
+    /**
+     * @return \React\Promise\PromiseAdapter\PromiseAdapterInterface
+     */
+    abstract public function getPromiseTestAdapter(callable $canceller = null);
+
+    /** @test */
+    public function thenShouldReturnAPromiseForPendingPromise()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $this->assertInstanceOf('React\\Promise\\PromiseInterface', $adapter->promise()->then());
+    }
+
+    /** @test */
+    public function thenShouldReturnAllowNullForPendingPromise()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $this->assertInstanceOf('React\\Promise\\PromiseInterface', $adapter->promise()->then(null, null, null));
+    }
+
+    /** @test */
+    public function cancelShouldReturnNullForPendingPromise()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $this->assertNull($adapter->promise()->cancel());
+    }
+}
diff --git a/core/vendor/react/promise/tests/PromiseTest/PromiseRejectedTestTrait.php b/core/vendor/react/promise/tests/PromiseTest/PromiseRejectedTestTrait.php
new file mode 100644
index 0000000000000000000000000000000000000000..a9cfa68ad08905d2ef3b3263e545476bc2b0b2ea
--- /dev/null
+++ b/core/vendor/react/promise/tests/PromiseTest/PromiseRejectedTestTrait.php
@@ -0,0 +1,203 @@
+<?php
+
+namespace React\Promise\PromiseTest;
+
+trait PromiseRejectedTestTrait
+{
+    /**
+     * @return \React\Promise\PromiseAdapter\PromiseAdapterInterface
+     */
+    abstract public function getPromiseTestAdapter(callable $canceller = null);
+
+    /** @test */
+    public function rejectedPromiseShouldBeImmutable()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(1));
+
+        $adapter->reject(1);
+        $adapter->reject(2);
+
+        $adapter->promise()
+            ->then(
+                $this->expectCallableNever(),
+                $mock
+            );
+    }
+
+    /** @test */
+    public function rejectedPromiseShouldInvokeNewlyAddedCallback()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $adapter->reject(1);
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(1));
+
+        $adapter->promise()
+            ->then($this->expectCallableNever(), $mock);
+    }
+
+    /** @test */
+    public function shouldForwardUndefinedRejectionValue()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with(null);
+
+        $adapter->reject(1);
+        $adapter->promise()
+            ->then(
+                $this->expectCallableNever(),
+                function () {
+                    // Presence of rejection handler is enough to switch back
+                    // to resolve mode, even though it returns undefined.
+                    // The ONLY way to propagate a rejection is to re-throw or
+                    // return a rejected promise;
+                }
+            )
+            ->then(
+                $mock,
+                $this->expectCallableNever()
+            );
+    }
+
+    /** @test */
+    public function shouldSwitchFromErrbacksToCallbacksWhenErrbackDoesNotExplicitlyPropagate()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(2));
+
+        $adapter->reject(1);
+        $adapter->promise()
+            ->then(
+                $this->expectCallableNever(),
+                function ($val) {
+                    return $val + 1;
+                }
+            )
+            ->then(
+                $mock,
+                $this->expectCallableNever()
+            );
+    }
+
+    /** @test */
+    public function shouldSwitchFromErrbacksToCallbacksWhenErrbackReturnsAResolution()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(2));
+
+        $adapter->reject(1);
+        $adapter->promise()
+            ->then(
+                $this->expectCallableNever(),
+                function ($val) {
+                    return \React\Promise\resolve($val + 1);
+                }
+            )
+            ->then(
+                $mock,
+                $this->expectCallableNever()
+            );
+    }
+
+    /** @test */
+    public function shouldPropagateRejectionsWhenErrbackThrows()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $exception = new \Exception();
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->will($this->throwException($exception));
+
+        $mock2 = $this->createCallableMock();
+        $mock2
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo($exception));
+
+        $adapter->reject(1);
+        $adapter->promise()
+            ->then(
+                $this->expectCallableNever(),
+                $mock
+            )
+            ->then(
+                $this->expectCallableNever(),
+                $mock2
+            );
+    }
+
+    /** @test */
+    public function shouldPropagateRejectionsWhenErrbackReturnsARejection()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(2));
+
+        $adapter->reject(1);
+        $adapter->promise()
+            ->then(
+                $this->expectCallableNever(),
+                function ($val) {
+                    return \React\Promise\reject($val + 1);
+                }
+            )
+            ->then(
+                $this->expectCallableNever(),
+                $mock
+            );
+    }
+
+    /** @test */
+    public function cancelShouldReturnNullForRejectedPromise()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $adapter->reject();
+
+        $this->assertNull($adapter->promise()->cancel());
+    }
+
+    /** @test */
+    public function cancelShouldHaveNoEffectForRejectedPromise()
+    {
+        $adapter = $this->getPromiseTestAdapter($this->expectCallableNever());
+
+        $adapter->reject();
+
+        $adapter->promise()->cancel();
+    }
+}
diff --git a/core/vendor/react/promise/tests/PromiseTest/PromiseSettledTestTrait.php b/core/vendor/react/promise/tests/PromiseTest/PromiseSettledTestTrait.php
new file mode 100644
index 0000000000000000000000000000000000000000..c56028471bbc7a636034989a48b86614c828f0b6
--- /dev/null
+++ b/core/vendor/react/promise/tests/PromiseTest/PromiseSettledTestTrait.php
@@ -0,0 +1,49 @@
+<?php
+
+namespace React\Promise\PromiseTest;
+
+trait PromiseSettledTestTrait
+{
+    /**
+     * @return \React\Promise\PromiseAdapter\PromiseAdapterInterface
+     */
+    abstract public function getPromiseTestAdapter(callable $canceller = null);
+
+    /** @test */
+    public function thenShouldReturnAPromiseForSettledPromise()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $adapter->settle();
+        $this->assertInstanceOf('React\\Promise\\PromiseInterface', $adapter->promise()->then());
+    }
+
+    /** @test */
+    public function thenShouldReturnAllowNullForSettledPromise()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $adapter->settle();
+        $this->assertInstanceOf('React\\Promise\\PromiseInterface', $adapter->promise()->then(null, null, null));
+    }
+
+    /** @test */
+    public function cancelShouldReturnNullForSettledPromise()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $adapter->settle();
+
+        $this->assertNull($adapter->promise()->cancel());
+    }
+
+    /** @test */
+    public function cancelShouldHaveNoEffectForSettledPromise()
+    {
+        $adapter = $this->getPromiseTestAdapter($this->expectCallableNever());
+
+        $adapter->settle();
+
+        $adapter->promise()->cancel();
+    }
+}
diff --git a/core/vendor/react/promise/tests/PromiseTest/RejectTestTrait.php b/core/vendor/react/promise/tests/PromiseTest/RejectTestTrait.php
new file mode 100644
index 0000000000000000000000000000000000000000..66e5e734ef7ce9f5d85b7c53f5be0ec6b78f4661
--- /dev/null
+++ b/core/vendor/react/promise/tests/PromiseTest/RejectTestTrait.php
@@ -0,0 +1,108 @@
+<?php
+
+namespace React\Promise\PromiseTest;
+
+use React\Promise;
+
+trait RejectTestTrait
+{
+    /**
+     * @return \React\Promise\PromiseAdapter\PromiseAdapterInterface
+     */
+    abstract public function getPromiseTestAdapter(callable $canceller = null);
+
+    /** @test */
+    public function rejectShouldRejectWithAnImmediateValue()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(1));
+
+        $adapter->promise()
+            ->then($this->expectCallableNever(), $mock);
+
+        $adapter->reject(1);
+    }
+
+    /** @test */
+    public function rejectShouldRejectWithFulfilledPromise()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(1));
+
+        $adapter->promise()
+            ->then($this->expectCallableNever(), $mock);
+
+        $adapter->reject(Promise\resolve(1));
+    }
+
+    /** @test */
+    public function rejectShouldRejectWithRejectedPromise()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(1));
+
+        $adapter->promise()
+            ->then($this->expectCallableNever(), $mock);
+
+        $adapter->reject(Promise\reject(1));
+    }
+
+    /** @test */
+    public function rejectShouldForwardReasonWhenCallbackIsNull()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(1));
+
+        $adapter->promise()
+            ->then(
+                $this->expectCallableNever()
+            )
+            ->then(
+                $this->expectCallableNever(),
+                $mock
+            );
+
+        $adapter->reject(1);
+    }
+
+    /** @test */
+    public function rejectShouldMakePromiseImmutable()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(1));
+
+        $adapter->promise()
+            ->then(
+                $this->expectCallableNever(),
+                $mock
+            );
+
+        $adapter->reject(1);
+        $adapter->reject(2);
+    }
+}
diff --git a/core/vendor/react/promise/tests/PromiseTest/ResolveTestTrait.php b/core/vendor/react/promise/tests/PromiseTest/ResolveTestTrait.php
new file mode 100644
index 0000000000000000000000000000000000000000..4ee201916142655814287fa8a65cbd5bef6e6679
--- /dev/null
+++ b/core/vendor/react/promise/tests/PromiseTest/ResolveTestTrait.php
@@ -0,0 +1,109 @@
+<?php
+
+namespace React\Promise\PromiseTest;
+
+use React\Promise;
+
+trait ResolveTestTrait
+{
+    /**
+     * @return \React\Promise\PromiseAdapter\PromiseAdapterInterface
+     */
+    abstract public function getPromiseTestAdapter(callable $canceller = null);
+
+    /** @test */
+    public function resolveShouldResolve()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(1));
+
+        $adapter->promise()
+            ->then($mock);
+
+        $adapter->resolve(1);
+    }
+
+    /** @test */
+    public function resolveShouldResolveWithPromisedValue()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(1));
+
+        $adapter->promise()
+            ->then($mock);
+
+        $adapter->resolve(Promise\resolve(1));
+    }
+
+    /** @test */
+    public function resolveShouldRejectWhenResolvedWithRejectedPromise()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(1));
+
+        $adapter->promise()
+            ->then($this->expectCallableNever(), $mock);
+
+        $adapter->resolve(Promise\reject(1));
+    }
+
+    /** @test */
+    public function resolveShouldForwardValueWhenCallbackIsNull()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(1));
+
+        $adapter->promise()
+            ->then(
+                null,
+                $this->expectCallableNever()
+            )
+            ->then(
+                $mock,
+                $this->expectCallableNever()
+            );
+
+        $adapter->resolve(1);
+    }
+
+    /** @test */
+    public function resolveShouldMakePromiseImmutable()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(1));
+
+        $adapter->promise()
+            ->then(
+                $mock,
+                $this->expectCallableNever()
+            );
+
+        $adapter->resolve(1);
+        $adapter->resolve(2);
+    }
+}
diff --git a/core/vendor/react/promise/tests/RejectedPromiseTest.php b/core/vendor/react/promise/tests/RejectedPromiseTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..040dd2e2cc2e66563028fb3e3999960395c4c9ed
--- /dev/null
+++ b/core/vendor/react/promise/tests/RejectedPromiseTest.php
@@ -0,0 +1,50 @@
+<?php
+
+namespace React\Promise;
+
+use React\Promise\PromiseAdapter\CallbackPromiseAdapter;
+
+class RejectedPromiseTest extends TestCase
+{
+    use PromiseTest\PromiseSettledTestTrait,
+        PromiseTest\PromiseRejectedTestTrait;
+
+    public function getPromiseTestAdapter(callable $canceller = null)
+    {
+        $promise = null;
+
+        return new CallbackPromiseAdapter([
+            'promise' => function () use (&$promise) {
+                if (!$promise) {
+                    throw new \LogicException('RejectedPromise must be rejected before obtaining the promise');
+                }
+
+                return $promise;
+            },
+            'resolve' => function () {
+                throw new \LogicException('You cannot call resolve() for React\Promise\RejectedPromise');
+            },
+            'reject' => function ($reason = null) use (&$promise) {
+                if (!$promise) {
+                    $promise = new RejectedPromise($reason);
+                }
+            },
+            'progress' => function () {
+                throw new \LogicException('You cannot call progress() for React\Promise\RejectedPromise');
+            },
+            'settle' => function ($reason = null) use (&$promise) {
+                if (!$promise) {
+                    $promise = new RejectedPromise($reason);
+                }
+            },
+        ]);
+    }
+
+    /** @test */
+    public function shouldThrowExceptionIfConstructedWithAPromise()
+    {
+        $this->setExpectedException('\InvalidArgumentException');
+
+        return new RejectedPromise(new RejectedPromise());
+    }
+}
diff --git a/core/vendor/react/promise/tests/Stub/CallableStub.php b/core/vendor/react/promise/tests/Stub/CallableStub.php
new file mode 100644
index 0000000000000000000000000000000000000000..0120893358c986052decc6655ef82523fd0c6f31
--- /dev/null
+++ b/core/vendor/react/promise/tests/Stub/CallableStub.php
@@ -0,0 +1,10 @@
+<?php
+
+namespace React\Promise\Stub;
+
+class CallableStub
+{
+    public function __invoke()
+    {
+    }
+}
diff --git a/core/vendor/react/promise/tests/TestCase.php b/core/vendor/react/promise/tests/TestCase.php
new file mode 100644
index 0000000000000000000000000000000000000000..60ea46d7dc1c00e6633ae2d0d0fb936763cb5f01
--- /dev/null
+++ b/core/vendor/react/promise/tests/TestCase.php
@@ -0,0 +1,41 @@
+<?php
+
+namespace React\Promise;
+
+class TestCase extends \PHPUnit_Framework_TestCase
+{
+    public function expectCallableExactly($amount)
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->exactly($amount))
+            ->method('__invoke');
+
+        return $mock;
+    }
+
+    public function expectCallableOnce()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke');
+
+        return $mock;
+    }
+
+    public function expectCallableNever()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->never())
+            ->method('__invoke');
+
+        return $mock;
+    }
+
+    public function createCallableMock()
+    {
+        return $this->getMock('React\\Promise\Stub\CallableStub');
+    }
+}
diff --git a/core/vendor/react/promise/tests/bootstrap.php b/core/vendor/react/promise/tests/bootstrap.php
new file mode 100644
index 0000000000000000000000000000000000000000..9b7f872a5fc6732ef685bed412ed1ec6847ee3e4
--- /dev/null
+++ b/core/vendor/react/promise/tests/bootstrap.php
@@ -0,0 +1,7 @@
+<?php
+
+$loader = @include __DIR__.'/../vendor/autoload.php';
+if (!$loader) {
+    $loader = require __DIR__.'/../../../../vendor/autoload.php';
+}
+$loader->addPsr4('React\\Promise\\', __DIR__);