diff --git a/externals/stripe-php/.travis.yml b/externals/stripe-php/.travis.yml
deleted file mode 100644
--- a/externals/stripe-php/.travis.yml
+++ /dev/null
@@ -1,17 +0,0 @@
-language: php
-
-php:
- - 5.2
- - 5.3
- - 5.4
- - 5.5
- - 5.6
- - hhvm
-
-before_script:
- - sh -c "if [ '$TRAVIS_PHP_VERSION' = '5.2' ]; then wget http://iweb.dl.sourceforge.net/project/simpletest/simpletest/simpletest_1.1/simpletest_1.1.0.tar.gz; tar xf simpletest_1.1.0.tar.gz -C test; else composer install --dev --prefer-source; fi"
- - sh -c "if [ '$TRAVIS_PHP_VERSION' = '5.6' ]; then pear install pear/PHP_CodeSniffer; phpenv rehash; fi"
-
-script:
- - sh -c "if [ '$TRAVIS_PHP_VERSION' = '5.6' ]; then phpcs --standard=zend --encoding=UTF-8 --ignore=vendor -p ./; fi"
- - php test/Stripe.php
diff --git a/externals/stripe-php/CHANGELOG b/externals/stripe-php/CHANGELOG
deleted file mode 100644
--- a/externals/stripe-php/CHANGELOG
+++ /dev/null
@@ -1,156 +0,0 @@
-=== 1.16.0 2014-06-17
-
-* Add metadata for refunds and disputes
-
-=== 1.15.0 2014-05-28
-
-* Support canceling transfers
-
-=== 1.14.1 2014-05-21
-
-* Support cards for recipients.
-
-=== 1.13.1 2014-05-15
-
-* Fix bug in account resource where `id` wasn't in the result
-
-=== 1.13.0 2014-04-10
-
-* Add support for certificate blacklisting
-* Update ca bundle
-* Drop support for HHVM (Temporarily)
-
-=== 1.12.0 2014-04-01
-
-* Add Stripe_RateLimitError for catching rate limit errors.
-* Update to Zend coding style (thanks, @jpiasetz)
-
-=== 1.11.0 2014-01-29
-
-* Add support for multiple subscriptions per customer
-
-=== 1.10.1 2013-12-02
-
-* Add new ApplicationFee
-
-=== 1.9.1 2013-11-08
-
-* Fix a bug where a null nestable object causes warnings to fire.
-
-=== 1.9.0 2013-10-16
-
-* Add support for metadata API.
-
-=== 1.8.4 2013-09-18
-
-* Add support for closing disputes.
-
-=== 1.8.3 2013-08-13
-
-* Add new Balance and BalanceTransaction
-
-=== 1.8.2 2013-08-12
-
-* Add support for unsetting attributes by updating to NULL.
- Setting properties to a blank string is now an error.
-
-=== 1.8.1 2013-07-12
-
-* Add support for multiple cards API (Stripe API version 2013-07-12: https://stripe.com/docs/upgrades#2013-07-05)
-
-=== 1.8.0 2013-04-11
-
-* Allow Transfers to be creatable
-* Add new Recipient resource
-
-=== 1.7.15 2013-02-21
-
-* Add 'id' to the list of permanent object attributes
-
-=== 1.7.14 2013-02-20
-
-* Don't re-encode strings that are already encoded in UTF-8. If you
- were previously using plan or coupon objects with UTF-8 IDs, they
- may have been treated as ISO-8859-1 (Latin-1) and encoded to UTF-8 a
- 2nd time. You may now need to pass the IDs to utf8_encode before
- passing them to Stripe_Plan::retrieve or Stripe_Coupon::retrieve.
-* Ensure that all input is encoded in UTF-8 before submitting it to
- Stripe's servers. (github issue #27)
-
-=== 1.7.13 2013-02-01
-
-* Add support for passing options when retrieving Stripe objects
- e.g., Stripe_Charge::retrieve(array("id"=>"foo", "expand" => array("customer")))
- Stripe_Charge::retrieve("foo") will continue to work
-
-=== 1.7.12 2013-01-15
-
-* Add support for setting a Stripe API version override
-
-=== 1.7.11 2012-12-30
-
-* Version bump to cleanup constants and such (github issue #26)
-
-=== 1.7.10 2012-11-08
-
-* Add support for updating charge disputes.
-* Fix bug preventing retrieval of null attributes
-
-=== 1.7.9 2012-11-08
-
-* Fix usage under autoloaders such as the one generated by composer
- (github issue #22)
-
-=== 1.7.8 2012-10-30
-* Add support for creating invoices.
-* Add support for new invoice lines return format
-* Add support for new list objects
-
-=== 1.7.7 2012-09-14
-
-* Get all of the various version numbers in the repo in sync (no other
- changes)
-
-=== 1.7.6 2012-08-31
-
-* Add update and pay methods to Invoice resource
-
-=== 1.7.5 2012-08-23
-
-* Change internal function names so that Stripe_SingletonApiRequest is
- E_STRICT-clean (github issue #16)
-
-=== 1.7.4 2012-08-21
-
-* Bugfix so that Stripe objects (e.g. Customer, Charge objects) used
- in API calls are transparently converted to their object IDs
-
-=== 1.7.3 2012-08-15
-
-* Add new Account resource
-
-=== 1.7.2 2012-06-26
-
-* Make clearer that you should be including lib/Stripe.php, not
- test/Stripe.php (github issue #14)
-
-=== 1.7.1 2012-05-24
-
-* Add missing argument to Stripe_InvalidRequestError constructor in
- Stripe_ApiResource::instanceUrl. Fixes a warning when
- Stripe_ApiResource::instanceUrl is called on a resource with no ID
- (github issue #12)
-
-=== 1.7.0 2012-05-17
-
-* Support Composer and Packagist (github issue #9)
-
-* Add new deleteDiscount method to Stripe_Customer
-
-* Add new Transfer resource
-
-* Switch from using HTTP Basic auth to Bearer auth. (Note: Stripe will
- support Basic auth for the indefinite future, but recommends Bearer
- auth when possible going forward)
-
-* Numerous test suite improvements
diff --git a/externals/stripe-php/LICENSE b/externals/stripe-php/LICENSE
deleted file mode 100644
--- a/externals/stripe-php/LICENSE
+++ /dev/null
@@ -1,21 +0,0 @@
-The MIT License
-
-Copyright (c) 2010-2014 Stripe
-
-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/externals/stripe-php/README.rdoc b/externals/stripe-php/README.rdoc
deleted file mode 100644
--- a/externals/stripe-php/README.rdoc
+++ /dev/null
@@ -1,67 +0,0 @@
-= Stripe PHP bindings
-{}[https://travis-ci.org/stripe/stripe-php]
-{}[https://packagist.org/packages/stripe/stripe-php]
-{}[https://packagist.org/packages/stripe/stripe-php]
-{}[https://packagist.org/packages/stripe/stripe-php]
-
-You can sign up for a Stripe account at https://stripe.com.
-
-== Requirements
-
-PHP 5.2 and later.
-
-== Composer
-
-You can install the bindings via Composer[http://getcomposer.org/]. Add this to your +composer.json+:
-
- {
- "require": {
- "stripe/stripe-php": "1.*"
- }
- }
-
-Then install via:
-
- composer.phar install
-
-To use the bindings, either user Composer's autoload[https://getcomposer.org/doc/00-intro.md#autoloading]:
-
- require_once('vendor/autoload.php');
-
-Or manually:
-
- require_once('/path/to/vendor/stripe/stripe-php/lib/Stripe.php');
-
-== Manual Installation
-
-Obtain the latest version of the Stripe PHP bindings with:
-
- git clone https://github.com/stripe/stripe-php
-
-To use the bindings, add the following to your PHP script:
-
- require_once("/path/to/stripe-php/lib/Stripe.php");
-
-== Getting Started
-
-Simple usage looks like:
-
- Stripe::setApiKey('d8e8fca2dc0f896fd7cb4cb0031ba249');
- $myCard = array('number' => '4242424242424242', 'exp_month' => 5, 'exp_year' => 2015);
- $charge = Stripe_Charge::create(array('card' => $myCard, 'amount' => 2000, 'currency' => 'usd'));
- echo $charge;
-
-== Documentation
-
-Please see https://stripe.com/api for up-to-date documentation.
-
-== Tests
-
-In order to run tests you have to install SimpleTest[http://packagist.org/packages/simpletest/simpletest] via Composer[http://getcomposer.org/] (recommended way):
-
- composer.phar update --dev
-
-Run test suite:
-
- php ./test/Stripe.php
-
diff --git a/externals/stripe-php/VERSION b/externals/stripe-php/VERSION
deleted file mode 100644
--- a/externals/stripe-php/VERSION
+++ /dev/null
@@ -1 +0,0 @@
-1.16.0
diff --git a/externals/stripe-php/composer.json b/externals/stripe-php/composer.json
deleted file mode 100644
--- a/externals/stripe-php/composer.json
+++ /dev/null
@@ -1,29 +0,0 @@
-{
- "name": "stripe/stripe-php",
- "description": "Stripe PHP Library",
- "keywords": [
- "stripe",
- "payment processing",
- "api"
- ],
- "homepage": "https://stripe.com/",
- "license": "MIT",
- "authors": [
- {
- "name": "Stripe and contributors",
- "homepage": "https://github.com/stripe/stripe-php/contributors"
- }
- ],
- "require": {
- "php": ">=5.2",
- "ext-curl": "*",
- "ext-json": "*",
- "ext-mbstring": "*"
- },
- "require-dev": {
- "simpletest/simpletest": "*"
- },
- "autoload": {
- "classmap": ["lib/Stripe/"]
- }
-}
diff --git a/externals/stripe-php/lib/Stripe.php b/externals/stripe-php/lib/Stripe.php
deleted file mode 100644
--- a/externals/stripe-php/lib/Stripe.php
+++ /dev/null
@@ -1,57 +0,0 @@
-_apiKey = $apiKey;
- }
-
- /**
- * @param string $url The path to the API endpoint.
- *
- * @returns string The full path.
- */
- public static function apiUrl($url='')
- {
- $apiBase = Stripe::$apiBase;
- return "$apiBase$url";
- }
-
- /**
- * @param string|mixed $value A string to UTF8-encode.
- *
- * @returns string|mixed The UTF8-encoded string, or the object passed in if
- * it wasn't a string.
- */
- public static function utf8($value)
- {
- if (is_string($value)
- && mb_detect_encoding($value, "UTF-8", TRUE) != "UTF-8") {
- return utf8_encode($value);
- } else {
- return $value;
- }
- }
-
- private static function _encodeObjects($d)
- {
- if ($d instanceof Stripe_ApiResource) {
- return self::utf8($d->id);
- } else if ($d === true) {
- return 'true';
- } else if ($d === false) {
- return 'false';
- } else if (is_array($d)) {
- $res = array();
- foreach ($d as $k => $v)
- $res[$k] = self::_encodeObjects($v);
- return $res;
- } else {
- return self::utf8($d);
- }
- }
-
- /**
- * @param array $arr An map of param keys to values.
- * @param string|null $prefix (It doesn't look like we ever use $prefix...)
- *
- * @returns string A querystring, essentially.
- */
- public static function encode($arr, $prefix=null)
- {
- if (!is_array($arr))
- return $arr;
-
- $r = array();
- foreach ($arr as $k => $v) {
- if (is_null($v))
- continue;
-
- if ($prefix && $k && !is_int($k))
- $k = $prefix."[".$k."]";
- else if ($prefix)
- $k = $prefix."[]";
-
- if (is_array($v)) {
- $r[] = self::encode($v, $k, true);
- } else {
- $r[] = urlencode($k)."=".urlencode($v);
- }
- }
-
- return implode("&", $r);
- }
-
- /**
- * @param string $method
- * @param string $url
- * @param array|null $params
- *
- * @return array An array whose first element is the response and second
- * element is the API key used to make the request.
- */
- public function request($method, $url, $params=null)
- {
- if (!$params)
- $params = array();
- list($rbody, $rcode, $myApiKey) =
- $this->_requestRaw($method, $url, $params);
- $resp = $this->_interpretResponse($rbody, $rcode);
- return array($resp, $myApiKey);
- }
-
-
- /**
- * @param string $rbody A JSON string.
- * @param int $rcode
- * @param array $resp
- *
- * @throws Stripe_InvalidRequestError if the error is caused by the user.
- * @throws Stripe_AuthenticationError if the error is caused by a lack of
- * permissions.
- * @throws Stripe_CardError if the error is the error code is 402 (payment
- * required)
- * @throws Stripe_ApiError otherwise.
- */
- public function handleApiError($rbody, $rcode, $resp)
- {
- if (!is_array($resp) || !isset($resp['error'])) {
- $msg = "Invalid response object from API: $rbody "
- ."(HTTP response code was $rcode)";
- throw new Stripe_ApiError($msg, $rcode, $rbody, $resp);
- }
-
- $error = $resp['error'];
- $msg = isset($error['message']) ? $error['message'] : null;
- $param = isset($error['param']) ? $error['param'] : null;
- $code = isset($error['code']) ? $error['code'] : null;
-
- switch ($rcode) {
- case 400:
- if ($code == 'rate_limit') {
- throw new Stripe_RateLimitError(
- $msg, $param, $rcode, $rbody, $resp
- );
- }
- case 404:
- throw new Stripe_InvalidRequestError(
- $msg, $param, $rcode, $rbody, $resp
- );
- case 401:
- throw new Stripe_AuthenticationError($msg, $rcode, $rbody, $resp);
- case 402:
- throw new Stripe_CardError($msg, $param, $code, $rcode, $rbody, $resp);
- default:
- throw new Stripe_ApiError($msg, $rcode, $rbody, $resp);
- }
- }
-
- private function _requestRaw($method, $url, $params)
- {
- $myApiKey = $this->_apiKey;
- if (!$myApiKey)
- $myApiKey = Stripe::$apiKey;
-
- if (!$myApiKey) {
- $msg = 'No API key provided. (HINT: set your API key using '
- . '"Stripe::setApiKey()". You can generate API keys from '
- . 'the Stripe web interface. See https://stripe.com/api for '
- . 'details, or email support@stripe.com if you have any questions.';
- throw new Stripe_AuthenticationError($msg);
- }
-
- $absUrl = $this->apiUrl($url);
- $params = self::_encodeObjects($params);
- $langVersion = phpversion();
- $uname = php_uname();
- $ua = array('bindings_version' => Stripe::VERSION,
- 'lang' => 'php',
- 'lang_version' => $langVersion,
- 'publisher' => 'stripe',
- 'uname' => $uname);
- $headers = array('X-Stripe-Client-User-Agent: ' . json_encode($ua),
- 'User-Agent: Stripe/v1 PhpBindings/' . Stripe::VERSION,
- 'Authorization: Bearer ' . $myApiKey);
- if (Stripe::$apiVersion)
- $headers[] = 'Stripe-Version: ' . Stripe::$apiVersion;
- list($rbody, $rcode) = $this->_curlRequest(
- $method,
- $absUrl,
- $headers,
- $params
- );
- return array($rbody, $rcode, $myApiKey);
- }
-
- private function _interpretResponse($rbody, $rcode)
- {
- try {
- $resp = json_decode($rbody, true);
- } catch (Exception $e) {
- $msg = "Invalid response body from API: $rbody "
- . "(HTTP response code was $rcode)";
- throw new Stripe_ApiError($msg, $rcode, $rbody);
- }
-
- if ($rcode < 200 || $rcode >= 300) {
- $this->handleApiError($rbody, $rcode, $resp);
- }
- return $resp;
- }
-
- private function _curlRequest($method, $absUrl, $headers, $params)
- {
-
- if (!self::$_preFlight) {
- self::$_preFlight = $this->checkSslCert($this->apiUrl());
- }
-
- $curl = curl_init();
- $method = strtolower($method);
- $opts = array();
- if ($method == 'get') {
- $opts[CURLOPT_HTTPGET] = 1;
- if (count($params) > 0) {
- $encoded = self::encode($params);
- $absUrl = "$absUrl?$encoded";
- }
- } else if ($method == 'post') {
- $opts[CURLOPT_POST] = 1;
- $opts[CURLOPT_POSTFIELDS] = self::encode($params);
- } else if ($method == 'delete') {
- $opts[CURLOPT_CUSTOMREQUEST] = 'DELETE';
- if (count($params) > 0) {
- $encoded = self::encode($params);
- $absUrl = "$absUrl?$encoded";
- }
- } else {
- throw new Stripe_ApiError("Unrecognized method $method");
- }
-
- $absUrl = self::utf8($absUrl);
- $opts[CURLOPT_URL] = $absUrl;
- $opts[CURLOPT_RETURNTRANSFER] = true;
- $opts[CURLOPT_CONNECTTIMEOUT] = 30;
- $opts[CURLOPT_TIMEOUT] = 80;
- $opts[CURLOPT_RETURNTRANSFER] = true;
- $opts[CURLOPT_HTTPHEADER] = $headers;
- if (!Stripe::$verifySslCerts)
- $opts[CURLOPT_SSL_VERIFYPEER] = false;
-
- curl_setopt_array($curl, $opts);
- $rbody = curl_exec($curl);
-
- if (!defined('CURLE_SSL_CACERT_BADFILE')) {
- define('CURLE_SSL_CACERT_BADFILE', 77); // constant not defined in PHP
- }
-
- $errno = curl_errno($curl);
- if ($errno == CURLE_SSL_CACERT ||
- $errno == CURLE_SSL_PEER_CERTIFICATE ||
- $errno == CURLE_SSL_CACERT_BADFILE) {
- array_push(
- $headers,
- 'X-Stripe-Client-Info: {"ca":"using Stripe-supplied CA bundle"}'
- );
- $cert = $this->caBundle();
- curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
- curl_setopt($curl, CURLOPT_CAINFO, $cert);
- $rbody = curl_exec($curl);
- }
-
- if ($rbody === false) {
- $errno = curl_errno($curl);
- $message = curl_error($curl);
- curl_close($curl);
- $this->handleCurlError($errno, $message);
- }
-
- $rcode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
- curl_close($curl);
- return array($rbody, $rcode);
- }
-
- /**
- * @param number $errno
- * @param string $message
- * @throws Stripe_ApiConnectionError
- */
- public function handleCurlError($errno, $message)
- {
- $apiBase = Stripe::$apiBase;
- switch ($errno) {
- case CURLE_COULDNT_CONNECT:
- case CURLE_COULDNT_RESOLVE_HOST:
- case CURLE_OPERATION_TIMEOUTED:
- $msg = "Could not connect to Stripe ($apiBase). Please check your "
- . "internet connection and try again. If this problem persists, "
- . "you should check Stripe's service status at "
- . "https://twitter.com/stripestatus, or";
- break;
- case CURLE_SSL_CACERT:
- case CURLE_SSL_PEER_CERTIFICATE:
- $msg = "Could not verify Stripe's SSL certificate. Please make sure "
- . "that your network is not intercepting certificates. "
- . "(Try going to $apiBase in your browser.) "
- . "If this problem persists,";
- break;
- default:
- $msg = "Unexpected error communicating with Stripe. "
- . "If this problem persists,";
- }
- $msg .= " let us know at support@stripe.com.";
-
- $msg .= "\n\n(Network error [errno $errno]: $message)";
- throw new Stripe_ApiConnectionError($msg);
- }
-
- /**
- * Preflight the SSL certificate presented by the backend. This isn't 100%
- * bulletproof, in that we're not actually validating the transport used to
- * communicate with Stripe, merely that the first attempt to does not use a
- * revoked certificate.
- *
- * Unfortunately the interface to OpenSSL doesn't make it easy to check the
- * certificate before sending potentially sensitive data on the wire. This
- * approach raises the bar for an attacker significantly.
- */
- private function checkSslCert($url)
- {
- if (version_compare(PHP_VERSION, '5.3.0', '<')) {
- error_log(
- 'Warning: This version of PHP is too old to check SSL certificates '.
- 'correctly. Stripe cannot guarantee that the server has a '.
- 'certificate which is not blacklisted'
- );
- return true;
- }
-
- if (strpos(PHP_VERSION, 'hiphop') !== false) {
- error_log(
- 'Warning: HHVM does not support Stripe\'s SSL certificate '.
- 'verification. (See http://docs.hhvm.com/manual/en/context.ssl.php) '.
- 'Stripe cannot guarantee that the server has a certificate which is '.
- 'not blacklisted'
- );
- return true;
- }
-
- $url = parse_url($url);
- $port = isset($url["port"]) ? $url["port"] : 443;
- $url = "ssl://{$url["host"]}:{$port}";
-
- $sslContext = stream_context_create(
- array('ssl' => array(
- 'capture_peer_cert' => true,
- 'verify_peer' => true,
- 'cafile' => $this->caBundle(),
- ))
- );
- $result = stream_socket_client(
- $url, $errno, $errstr, 30, STREAM_CLIENT_CONNECT, $sslContext
- );
- if ($errno !== 0) {
- $apiBase = Stripe::$apiBase;
- throw new Stripe_ApiConnectionError(
- 'Could not connect to Stripe (' . $apiBase . '). Please check your '.
- 'internet connection and try again. If this problem persists, '.
- 'you should check Stripe\'s service status at '.
- 'https://twitter.com/stripestatus. Reason was: '.$errstr
- );
- }
-
- $params = stream_context_get_params($result);
-
- $cert = $params['options']['ssl']['peer_certificate'];
-
- openssl_x509_export($cert, $pemCert);
-
- if (self::isBlackListed($pemCert)) {
- throw new Stripe_ApiConnectionError(
- 'Invalid server certificate. You tried to connect to a server that '.
- 'has a revoked SSL certificate, which means we cannot securely send '.
- 'data to that server. Please email support@stripe.com if you need '.
- 'help connecting to the correct API server.'
- );
- }
-
- return true;
- }
-
- /* Checks if a valid PEM encoded certificate is blacklisted
- * @return boolean
- */
- public static function isBlackListed($certificate)
- {
- $certificate = trim($certificate);
- $lines = explode("\n", $certificate);
-
- // Kludgily remove the PEM padding
- array_shift($lines); array_pop($lines);
-
- $derCert = base64_decode(implode("", $lines));
- $fingerprint = sha1($derCert);
- return in_array($fingerprint, self::blacklistedCerts());
- }
-
- private function caBundle()
- {
- return dirname(__FILE__) . '/../data/ca-certificates.crt';
- }
-}
diff --git a/externals/stripe-php/lib/Stripe/ApiResource.php b/externals/stripe-php/lib/Stripe/ApiResource.php
deleted file mode 100644
--- a/externals/stripe-php/lib/Stripe/ApiResource.php
+++ /dev/null
@@ -1,144 +0,0 @@
-refresh();
- return $instance;
- }
-
- /**
- * @returns Stripe_ApiResource The refreshed resource.
- */
- public function refresh()
- {
- $requestor = new Stripe_ApiRequestor($this->_apiKey);
- $url = $this->instanceUrl();
-
- list($response, $apiKey) = $requestor->request(
- 'get',
- $url,
- $this->_retrieveOptions
- );
- $this->refreshFrom($response, $apiKey);
- return $this;
- }
-
- /**
- * @param string $class
- *
- * @returns string The name of the class, with namespacing and underscores
- * stripped.
- */
- public static function className($class)
- {
- // Useful for namespaces: Foo\Stripe_Charge
- if ($postfixNamespaces = strrchr($class, '\\')) {
- $class = substr($postfixNamespaces, 1);
- }
- // Useful for underscored 'namespaces': Foo_Stripe_Charge
- if ($postfixFakeNamespaces = strrchr($class, 'Stripe_')) {
- $class = $postfixFakeNamespaces;
- }
- if (substr($class, 0, strlen('Stripe')) == 'Stripe') {
- $class = substr($class, strlen('Stripe'));
- }
- $class = str_replace('_', '', $class);
- $name = urlencode($class);
- $name = strtolower($name);
- return $name;
- }
-
- /**
- * @param string $class
- *
- * @returns string The endpoint URL for the given class.
- */
- public static function classUrl($class)
- {
- $base = self::_scopedLsb($class, 'className', $class);
- return "/v1/${base}s";
- }
-
- /**
- * @returns string The full API URL for this API resource.
- */
- public function instanceUrl()
- {
- $id = $this['id'];
- $class = get_class($this);
- if ($id === null) {
- $message = "Could not determine which URL to request: "
- . "$class instance has invalid ID: $id";
- throw new Stripe_InvalidRequestError($message, null);
- }
- $id = Stripe_ApiRequestor::utf8($id);
- $base = $this->_lsb('classUrl', $class);
- $extn = urlencode($id);
- return "$base/$extn";
- }
-
- private static function _validateCall($method, $params=null, $apiKey=null)
- {
- if ($params && !is_array($params)) {
- $message = "You must pass an array as the first argument to Stripe API "
- . "method calls. (HINT: an example call to create a charge "
- . "would be: \"StripeCharge::create(array('amount' => 100, "
- . "'currency' => 'usd', 'card' => array('number' => "
- . "4242424242424242, 'exp_month' => 5, 'exp_year' => 2015)))\")";
- throw new Stripe_Error($message);
- }
-
- if ($apiKey && !is_string($apiKey)) {
- $message = 'The second argument to Stripe API method calls is an '
- . 'optional per-request apiKey, which must be a string. '
- . '(HINT: you can set a global apiKey by '
- . '"Stripe::setApiKey()")';
- throw new Stripe_Error($message);
- }
- }
-
- protected static function _scopedAll($class, $params=null, $apiKey=null)
- {
- self::_validateCall('all', $params, $apiKey);
- $requestor = new Stripe_ApiRequestor($apiKey);
- $url = self::_scopedLsb($class, 'classUrl', $class);
- list($response, $apiKey) = $requestor->request('get', $url, $params);
- return Stripe_Util::convertToStripeObject($response, $apiKey);
- }
-
- protected static function _scopedCreate($class, $params=null, $apiKey=null)
- {
- self::_validateCall('create', $params, $apiKey);
- $requestor = new Stripe_ApiRequestor($apiKey);
- $url = self::_scopedLsb($class, 'classUrl', $class);
- list($response, $apiKey) = $requestor->request('post', $url, $params);
- return Stripe_Util::convertToStripeObject($response, $apiKey);
- }
-
- protected function _scopedSave($class, $apiKey=null)
- {
- self::_validateCall('save');
- $requestor = new Stripe_ApiRequestor($apiKey);
- $params = $this->serializeParameters();
-
- if (count($params) > 0) {
- $url = $this->instanceUrl();
- list($response, $apiKey) = $requestor->request('post', $url, $params);
- $this->refreshFrom($response, $apiKey);
- }
- return $this;
- }
-
- protected function _scopedDelete($class, $params=null)
- {
- self::_validateCall('delete');
- $requestor = new Stripe_ApiRequestor($this->_apiKey);
- $url = $this->instanceUrl();
- list($response, $apiKey) = $requestor->request('delete', $url, $params);
- $this->refreshFrom($response, $apiKey);
- return $this;
- }
-}
diff --git a/externals/stripe-php/lib/Stripe/ApplicationFee.php b/externals/stripe-php/lib/Stripe/ApplicationFee.php
deleted file mode 100644
--- a/externals/stripe-php/lib/Stripe/ApplicationFee.php
+++ /dev/null
@@ -1,53 +0,0 @@
-_apiKey);
- $url = $this->instanceUrl() . '/refund';
- list($response, $apiKey) = $requestor->request('post', $url, $params);
- $this->refreshFrom($response, $apiKey);
- return $this;
- }
-}
diff --git a/externals/stripe-php/lib/Stripe/AttachedObject.php b/externals/stripe-php/lib/Stripe/AttachedObject.php
deleted file mode 100644
--- a/externals/stripe-php/lib/Stripe/AttachedObject.php
+++ /dev/null
@@ -1,23 +0,0 @@
-_values), array_keys($properties));
- // Don't unset, but rather set to null so we send up '' for deletion.
- foreach ($removed as $k) {
- $this->$k = null;
- }
-
- foreach ($properties as $k => $v) {
- $this->$k = $v;
- }
- }
-}
diff --git a/externals/stripe-php/lib/Stripe/AuthenticationError.php b/externals/stripe-php/lib/Stripe/AuthenticationError.php
deleted file mode 100644
--- a/externals/stripe-php/lib/Stripe/AuthenticationError.php
+++ /dev/null
@@ -1,5 +0,0 @@
-param = $param;
- $this->code = $code;
- }
-}
diff --git a/externals/stripe-php/lib/Stripe/Charge.php b/externals/stripe-php/lib/Stripe/Charge.php
deleted file mode 100644
--- a/externals/stripe-php/lib/Stripe/Charge.php
+++ /dev/null
@@ -1,103 +0,0 @@
-_apiKey);
- $url = $this->instanceUrl() . '/refund';
- list($response, $apiKey) = $requestor->request('post', $url, $params);
- $this->refreshFrom($response, $apiKey);
- return $this;
- }
-
- /**
- * @param array|null $params
- *
- * @return Stripe_Charge The captured charge.
- */
- public function capture($params=null)
- {
- $requestor = new Stripe_ApiRequestor($this->_apiKey);
- $url = $this->instanceUrl() . '/capture';
- list($response, $apiKey) = $requestor->request('post', $url, $params);
- $this->refreshFrom($response, $apiKey);
- return $this;
- }
-
- /**
- * @param array|null $params
- *
- * @return array The updated dispute.
- */
- public function updateDispute($params=null)
- {
- $requestor = new Stripe_ApiRequestor($this->_apiKey);
- $url = $this->instanceUrl() . '/dispute';
- list($response, $apiKey) = $requestor->request('post', $url, $params);
- $this->refreshFrom(array('dispute' => $response), $apiKey, true);
- return $this->dispute;
- }
-
- /**
- * @return Stripe_Charge The updated charge.
- */
- public function closeDispute()
- {
- $requestor = new Stripe_ApiRequestor($this->_apiKey);
- $url = $this->instanceUrl() . '/dispute/close';
- list($response, $apiKey) = $requestor->request('post', $url);
- $this->refreshFrom($response, $apiKey);
- return $this;
- }
-}
diff --git a/externals/stripe-php/lib/Stripe/Coupon.php b/externals/stripe-php/lib/Stripe/Coupon.php
deleted file mode 100644
--- a/externals/stripe-php/lib/Stripe/Coupon.php
+++ /dev/null
@@ -1,51 +0,0 @@
-id;
- $ii = Stripe_InvoiceItem::create($params, $this->_apiKey);
- return $ii;
- }
-
- /**
- * @param array|null $params
- *
- * @returns array An array of the customer's Stripe_Invoices.
- */
- public function invoices($params=null)
- {
- if (!$params)
- $params = array();
- $params['customer'] = $this->id;
- $invoices = Stripe_Invoice::all($params, $this->_apiKey);
- return $invoices;
- }
-
- /**
- * @param array|null $params
- *
- * @returns array An array of the customer's Stripe_InvoiceItems.
- */
- public function invoiceItems($params=null)
- {
- if (!$params)
- $params = array();
- $params['customer'] = $this->id;
- $iis = Stripe_InvoiceItem::all($params, $this->_apiKey);
- return $iis;
- }
-
- /**
- * @param array|null $params
- *
- * @returns array An array of the customer's Stripe_Charges.
- */
- public function charges($params=null)
- {
- if (!$params)
- $params = array();
- $params['customer'] = $this->id;
- $charges = Stripe_Charge::all($params, $this->_apiKey);
- return $charges;
- }
-
- /**
- * @param array|null $params
- *
- * @returns Stripe_Subscription The updated subscription.
- */
- public function updateSubscription($params=null)
- {
- $requestor = new Stripe_ApiRequestor($this->_apiKey);
- $url = $this->instanceUrl() . '/subscription';
- list($response, $apiKey) = $requestor->request('post', $url, $params);
- $this->refreshFrom(array('subscription' => $response), $apiKey, true);
- return $this->subscription;
- }
-
- /**
- * @param array|null $params
- *
- * @returns Stripe_Subscription The cancelled subscription.
- */
- public function cancelSubscription($params=null)
- {
- $requestor = new Stripe_ApiRequestor($this->_apiKey);
- $url = $this->instanceUrl() . '/subscription';
- list($response, $apiKey) = $requestor->request('delete', $url, $params);
- $this->refreshFrom(array('subscription' => $response), $apiKey, true);
- return $this->subscription;
- }
-
- /**
- * @param array|null $params
- *
- * @returns Stripe_Customer The updated customer.
- */
- public function deleteDiscount()
- {
- $requestor = new Stripe_ApiRequestor($this->_apiKey);
- $url = $this->instanceUrl() . '/discount';
- list($response, $apiKey) = $requestor->request('delete', $url);
- $this->refreshFrom(array('discount' => null), $apiKey, true);
- }
-}
diff --git a/externals/stripe-php/lib/Stripe/Error.php b/externals/stripe-php/lib/Stripe/Error.php
deleted file mode 100644
--- a/externals/stripe-php/lib/Stripe/Error.php
+++ /dev/null
@@ -1,29 +0,0 @@
-httpStatus = $httpStatus;
- $this->httpBody = $httpBody;
- $this->jsonBody = $jsonBody;
- }
-
- public function getHttpStatus()
- {
- return $this->httpStatus;
- }
-
- public function getHttpBody()
- {
- return $this->httpBody;
- }
-
- public function getJsonBody()
- {
- return $this->jsonBody;
- }
-}
diff --git a/externals/stripe-php/lib/Stripe/Event.php b/externals/stripe-php/lib/Stripe/Event.php
deleted file mode 100644
--- a/externals/stripe-php/lib/Stripe/Event.php
+++ /dev/null
@@ -1,28 +0,0 @@
-param = $param;
- }
-}
diff --git a/externals/stripe-php/lib/Stripe/Invoice.php b/externals/stripe-php/lib/Stripe/Invoice.php
deleted file mode 100644
--- a/externals/stripe-php/lib/Stripe/Invoice.php
+++ /dev/null
@@ -1,75 +0,0 @@
-request('get', $url, $params);
- return Stripe_Util::convertToStripeObject($response, $apiKey);
- }
-
- /**
- * @return Stripe_Invoice The saved invoice.
- */
- public function save()
- {
- $class = get_class();
- return self::_scopedSave($class);
- }
-
- /**
- * @return Stripe_Invoice The paid invoice.
- */
- public function pay()
- {
- $requestor = new Stripe_ApiRequestor($this->_apiKey);
- $url = $this->instanceUrl() . '/pay';
- list($response, $apiKey) = $requestor->request('post', $url);
- $this->refreshFrom($response, $apiKey);
- return $this;
- }
-}
diff --git a/externals/stripe-php/lib/Stripe/InvoiceItem.php b/externals/stripe-php/lib/Stripe/InvoiceItem.php
deleted file mode 100644
--- a/externals/stripe-php/lib/Stripe/InvoiceItem.php
+++ /dev/null
@@ -1,58 +0,0 @@
-_apiKey);
- list($response, $apiKey) = $requestor->request(
- 'get',
- $this['url'],
- $params
- );
- return Stripe_Util::convertToStripeObject($response, $apiKey);
- }
-
- public function create($params=null)
- {
- $requestor = new Stripe_ApiRequestor($this->_apiKey);
- list($response, $apiKey) = $requestor->request(
- 'post', $this['url'], $params
- );
- return Stripe_Util::convertToStripeObject($response, $apiKey);
- }
-
- public function retrieve($id, $params=null)
- {
- $requestor = new Stripe_ApiRequestor($this->_apiKey);
- $base = $this['url'];
- $id = Stripe_ApiRequestor::utf8($id);
- $extn = urlencode($id);
- list($response, $apiKey) = $requestor->request(
- 'get', "$base/$extn", $params
- );
- return Stripe_Util::convertToStripeObject($response, $apiKey);
- }
-
-}
diff --git a/externals/stripe-php/lib/Stripe/Object.php b/externals/stripe-php/lib/Stripe/Object.php
deleted file mode 100644
--- a/externals/stripe-php/lib/Stripe/Object.php
+++ /dev/null
@@ -1,264 +0,0 @@
-_apiKey = $apiKey;
- $this->_values = array();
- $this->_unsavedValues = new Stripe_Util_Set();
- $this->_transientValues = new Stripe_Util_Set();
-
- $this->_retrieveOptions = array();
- if (is_array($id)) {
- foreach ($id as $key => $value) {
- if ($key != 'id') {
- $this->_retrieveOptions[$key] = $value;
- }
- }
- $id = $id['id'];
- }
-
- if ($id !== null) {
- $this->id = $id;
- }
- }
-
- // Standard accessor magic methods
- public function __set($k, $v)
- {
- if ($v === "") {
- throw new InvalidArgumentException(
- 'You cannot set \''.$k.'\'to an empty string. '
- .'We interpret empty strings as NULL in requests. '
- .'You may set obj->'.$k.' = NULL to delete the property'
- );
- }
-
- if (self::$nestedUpdatableAttributes->includes($k)
- && isset($this->$k) && is_array($v)) {
- $this->$k->replaceWith($v);
- } else {
- // TODO: may want to clear from $_transientValues (Won't be user-visible).
- $this->_values[$k] = $v;
- }
- if (!self::$permanentAttributes->includes($k))
- $this->_unsavedValues->add($k);
- }
- public function __isset($k)
- {
- return isset($this->_values[$k]);
- }
- public function __unset($k)
- {
- unset($this->_values[$k]);
- $this->_transientValues->add($k);
- $this->_unsavedValues->discard($k);
- }
- public function __get($k)
- {
- if (array_key_exists($k, $this->_values)) {
- return $this->_values[$k];
- } else if ($this->_transientValues->includes($k)) {
- $class = get_class($this);
- $attrs = join(', ', array_keys($this->_values));
- $message = "Stripe Notice: Undefined property of $class instance: $k. "
- . "HINT: The $k attribute was set in the past, however. "
- . "It was then wiped when refreshing the object "
- . "with the result returned by Stripe's API, "
- . "probably as a result of a save(). The attributes currently "
- . "available on this object are: $attrs";
- error_log($message);
- return null;
- } else {
- $class = get_class($this);
- error_log("Stripe Notice: Undefined property of $class instance: $k");
- return null;
- }
- }
-
- // ArrayAccess methods
- public function offsetSet($k, $v)
- {
- $this->$k = $v;
- }
-
- public function offsetExists($k)
- {
- return array_key_exists($k, $this->_values);
- }
-
- public function offsetUnset($k)
- {
- unset($this->$k);
- }
- public function offsetGet($k)
- {
- return array_key_exists($k, $this->_values) ? $this->_values[$k] : null;
- }
-
- public function keys()
- {
- return array_keys($this->_values);
- }
-
- /**
- * This unfortunately needs to be public to be used in Util.php
- *
- * @param string $class
- * @param array $values
- * @param string|null $apiKey
- *
- * @return Stripe_Object The object constructed from the given values.
- */
- public static function scopedConstructFrom($class, $values, $apiKey=null)
- {
- $obj = new $class(isset($values['id']) ? $values['id'] : null, $apiKey);
- $obj->refreshFrom($values, $apiKey);
- return $obj;
- }
-
- /**
- * @param array $values
- * @param string|null $apiKey
- *
- * @return Stripe_Object The object of the same class as $this constructed
- * from the given values.
- */
- public static function constructFrom($values, $apiKey=null)
- {
- return self::scopedConstructFrom(__CLASS__, $values, $apiKey);
- }
-
- /**
- * Refreshes this object using the provided values.
- *
- * @param array $values
- * @param string $apiKey
- * @param boolean $partial Defaults to false.
- */
- public function refreshFrom($values, $apiKey, $partial=false)
- {
- $this->_apiKey = $apiKey;
-
- // Wipe old state before setting new. This is useful for e.g. updating a
- // customer, where there is no persistent card parameter. Mark those values
- // which don't persist as transient
- if ($partial) {
- $removed = new Stripe_Util_Set();
- } else {
- $removed = array_diff(array_keys($this->_values), array_keys($values));
- }
-
- foreach ($removed as $k) {
- if (self::$permanentAttributes->includes($k))
- continue;
- unset($this->$k);
- }
-
- foreach ($values as $k => $v) {
- if (self::$permanentAttributes->includes($k) && isset($this[$k]))
- continue;
-
- if (self::$nestedUpdatableAttributes->includes($k) && is_array($v)) {
- $this->_values[$k] = Stripe_Object::scopedConstructFrom(
- 'Stripe_AttachedObject', $v, $apiKey
- );
- } else {
- $this->_values[$k] = Stripe_Util::convertToStripeObject($v, $apiKey);
- }
-
- $this->_transientValues->discard($k);
- $this->_unsavedValues->discard($k);
- }
- }
-
- /**
- * @return array A recursive mapping of attributes to values for this object,
- * including the proper value for deleted attributes.
- */
- public function serializeParameters()
- {
- $params = array();
- if ($this->_unsavedValues) {
- foreach ($this->_unsavedValues->toArray() as $k) {
- $v = $this->$k;
- if ($v === NULL) {
- $v = '';
- }
- $params[$k] = $v;
- }
- }
-
- // Get nested updates.
- foreach (self::$nestedUpdatableAttributes->toArray() as $property) {
- if (isset($this->$property)
- && $this->$property instanceOf Stripe_Object) {
- $params[$property] = $this->$property->serializeParameters();
- }
- }
- return $params;
- }
-
- // Pretend to have late static bindings, even in PHP 5.2
- protected function _lsb($method)
- {
- $class = get_class($this);
- $args = array_slice(func_get_args(), 1);
- return call_user_func_array(array($class, $method), $args);
- }
- protected static function _scopedLsb($class, $method)
- {
- $args = array_slice(func_get_args(), 2);
- return call_user_func_array(array($class, $method), $args);
- }
-
- public function __toJSON()
- {
- if (defined('JSON_PRETTY_PRINT')) {
- return json_encode($this->__toArray(true), JSON_PRETTY_PRINT);
- } else {
- return json_encode($this->__toArray(true));
- }
- }
-
- public function __toString()
- {
- return $this->__toJSON();
- }
-
- public function __toArray($recursive=false)
- {
- if ($recursive) {
- return Stripe_Util::convertStripeObjectToArray($this->_values);
- } else {
- return $this->_values;
- }
- }
-}
-
-
-Stripe_Object::init();
diff --git a/externals/stripe-php/lib/Stripe/Plan.php b/externals/stripe-php/lib/Stripe/Plan.php
deleted file mode 100644
--- a/externals/stripe-php/lib/Stripe/Plan.php
+++ /dev/null
@@ -1,60 +0,0 @@
-id;
- $transfers = Stripe_Transfer::all($params, $this->_apiKey);
- return $transfers;
- }
-}
diff --git a/externals/stripe-php/lib/Stripe/Refund.php b/externals/stripe-php/lib/Stripe/Refund.php
deleted file mode 100644
--- a/externals/stripe-php/lib/Stripe/Refund.php
+++ /dev/null
@@ -1,36 +0,0 @@
-refresh();
- return $instance;
- }
-
- /**
- * @param Stripe_SingletonApiResource $class
- * @return string The endpoint associated with this singleton class.
- */
- public static function classUrl($class)
- {
- $base = self::className($class);
- return "/v1/${base}";
- }
-
- /**
- * @return string The endpoint associated with this singleton API resource.
- */
- public function instanceUrl()
- {
- $class = get_class($this);
- $base = self::classUrl($class);
- return "$base";
- }
-}
diff --git a/externals/stripe-php/lib/Stripe/Stripe.php b/externals/stripe-php/lib/Stripe/Stripe.php
deleted file mode 100644
--- a/externals/stripe-php/lib/Stripe/Stripe.php
+++ /dev/null
@@ -1,73 +0,0 @@
-_apiKey);
- $url = $this->instanceUrl() . '/discount';
- list($response, $apiKey) = $requestor->request('delete', $url);
- $this->refreshFrom(array('discount' => null), $apiKey, true);
- }
-}
diff --git a/externals/stripe-php/lib/Stripe/Token.php b/externals/stripe-php/lib/Stripe/Token.php
deleted file mode 100644
--- a/externals/stripe-php/lib/Stripe/Token.php
+++ /dev/null
@@ -1,28 +0,0 @@
-_apiKey);
- $url = $this->instanceUrl() . '/cancel';
- list($response, $apiKey) = $requestor->request('post', $url);
- $this->refreshFrom($response, $apiKey);
- return $this;
- }
-
- /**
- * @return Stripe_Transfer The saved transfer.
- */
- public function save()
- {
- $class = get_class();
- return self::_scopedSave($class);
- }
-
-}
diff --git a/externals/stripe-php/lib/Stripe/Util.php b/externals/stripe-php/lib/Stripe/Util.php
deleted file mode 100644
--- a/externals/stripe-php/lib/Stripe/Util.php
+++ /dev/null
@@ -1,90 +0,0 @@
- $v) {
- // FIXME: this is an encapsulation violation
- if ($k[0] == '_') {
- continue;
- }
- if ($v instanceof Stripe_Object) {
- $results[$k] = $v->__toArray(true);
- } else if (is_array($v)) {
- $results[$k] = self::convertStripeObjectToArray($v);
- } else {
- $results[$k] = $v;
- }
- }
- return $results;
- }
-
- /**
- * Converts a response from the Stripe API to the corresponding PHP object.
- *
- * @param array $resp The response from the Stripe API.
- * @param string $apiKey
- * @return Stripe_Object|array
- */
- public static function convertToStripeObject($resp, $apiKey)
- {
- $types = array(
- 'card' => 'Stripe_Card',
- 'charge' => 'Stripe_Charge',
- 'customer' => 'Stripe_Customer',
- 'list' => 'Stripe_List',
- 'invoice' => 'Stripe_Invoice',
- 'invoiceitem' => 'Stripe_InvoiceItem',
- 'event' => 'Stripe_Event',
- 'transfer' => 'Stripe_Transfer',
- 'plan' => 'Stripe_Plan',
- 'recipient' => 'Stripe_Recipient',
- 'refund' => 'Stripe_Refund',
- 'subscription' => 'Stripe_Subscription'
- );
- if (self::isList($resp)) {
- $mapped = array();
- foreach ($resp as $i)
- array_push($mapped, self::convertToStripeObject($i, $apiKey));
- return $mapped;
- } else if (is_array($resp)) {
- if (isset($resp['object'])
- && is_string($resp['object'])
- && isset($types[$resp['object']])) {
- $class = $types[$resp['object']];
- } else {
- $class = 'Stripe_Object';
- }
- return Stripe_Object::scopedConstructFrom($class, $resp, $apiKey);
- } else {
- return $resp;
- }
- }
-}
diff --git a/externals/stripe-php/lib/Stripe/Util/Set.php b/externals/stripe-php/lib/Stripe/Util/Set.php
deleted file mode 100644
--- a/externals/stripe-php/lib/Stripe/Util/Set.php
+++ /dev/null
@@ -1,34 +0,0 @@
-_elts = array();
- foreach ($members as $item)
- $this->_elts[$item] = true;
- }
-
- public function includes($elt)
- {
- return isset($this->_elts[$elt]);
- }
-
- public function add($elt)
- {
- $this->_elts[$elt] = true;
- }
-
- public function discard($elt)
- {
- unset($this->_elts[$elt]);
- }
-
- // TODO: make Set support foreach
- public function toArray()
- {
- return array_keys($this->_elts);
- }
-}
diff --git a/externals/stripe-php/lib/data/ca-certificates.crt b/externals/stripe-php/lib/data/ca-certificates.crt
deleted file mode 100644
--- a/externals/stripe-php/lib/data/ca-certificates.crt
+++ /dev/null
@@ -1,5165 +0,0 @@
-# Generated by https://gist.github.com/ab/9756531 on 2014-03-25
-# from Ubuntu ca-certificates 20130906.
-# See http://www.ubuntu.com/usn/usn-2154-1/ for version info.
-
-================================================================
-C: AT
-O: A-Trust Ges. f. Sicherheitssysteme im elektr. Datenverkehr GmbH
-OU: A-Trust-nQual-03
-CN: A-Trust-nQual-03
------BEGIN CERTIFICATE-----
-MIIDzzCCAregAwIBAgIDAWweMA0GCSqGSIb3DQEBBQUAMIGNMQswCQYDVQQGEwJB
-VDFIMEYGA1UECgw/QS1UcnVzdCBHZXMuIGYuIFNpY2hlcmhlaXRzc3lzdGVtZSBp
-bSBlbGVrdHIuIERhdGVudmVya2VociBHbWJIMRkwFwYDVQQLDBBBLVRydXN0LW5R
-dWFsLTAzMRkwFwYDVQQDDBBBLVRydXN0LW5RdWFsLTAzMB4XDTA1MDgxNzIyMDAw
-MFoXDTE1MDgxNzIyMDAwMFowgY0xCzAJBgNVBAYTAkFUMUgwRgYDVQQKDD9BLVRy
-dXN0IEdlcy4gZi4gU2ljaGVyaGVpdHNzeXN0ZW1lIGltIGVsZWt0ci4gRGF0ZW52
-ZXJrZWhyIEdtYkgxGTAXBgNVBAsMEEEtVHJ1c3QtblF1YWwtMDMxGTAXBgNVBAMM
-EEEtVHJ1c3QtblF1YWwtMDMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
-AQCtPWFuA/OQO8BBC4SAzewqo51ru27CQoT3URThoKgtUaNR8t4j8DRE/5TrzAUj
-lUC5B3ilJfYKvUWG6Nm9wASOhURh73+nyfrBJcyFLGM/BWBzSQXgYHiVEEvc+RFZ
-znF/QJuKqiTfC0Li21a8StKlDJu3Qz7dg9MmEALP6iPESU7l0+m0iKsMrmKS1GWH
-2WrX9IWf5DMiJaXlyDO6w8dB3F/GaswADm0yqLaHNgBid5seHzTLkDx4iHQF63n1
-k3Flyp3HaxgtPVxO59X4PzF9j4fsCiIvI+n+u33J4PTs63zEsMMtYrWacdaxaujs
-2e3Vcuy+VwHOBVWf3tFgiBCzAgMBAAGjNjA0MA8GA1UdEwEB/wQFMAMBAf8wEQYD
-VR0OBAoECERqlWdVeRFPMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOC
-AQEAVdRU0VlIXLOThaq/Yy/kgM40ozRiPvbY7meIMQQDbwvUB/tOdQ/TLtPAF8fG
-KOwGDREkDg6lXb+MshOWcdzUzg4NCmgybLlBMRmrsQd7TZjTXLDR8KdCoLXEjq/+
-8T/0709GAHbrAvv5ndJAlseIOrifEXnzgGWovR/TeIGgUUw3tKZdJXDRZslo+S4R
-FGjxVJgIrCaSD96JntT6s3kr0qN51OyLrIdTaEJMUVF0HhsnLuP1Hyl0Te2v9+GS
-mYHovjrHF1D2t8b8m7CKa9aIA5GPBnc6hQLdmNVDeD/GMBWsm2vLV7eJUYs66MmE
-DNuxUCAKGkq6ahq97BvIxYSazQ==
------END CERTIFICATE-----
-
-================================================================
-C: BE
-O: GlobalSign nv-sa
-OU: Root CA
-CN: GlobalSign Root CA
------BEGIN CERTIFICATE-----
-MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkG
-A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv
-b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAw
-MDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i
-YWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJHbG9iYWxT
-aWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDaDuaZ
-jc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavp
-xy0Sy6scTHAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp
-1Wrjsok6Vjk4bwY8iGlbKk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdG
-snUOhugZitVtbNV4FpWi6cgKOOvyJBNPc1STE4U6G7weNLWLBYy5d4ux2x8gkasJ
-U26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrXgzT/LCrBbBlDSgeF59N8
-9iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8E
-BTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0B
-AQUFAAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOz
-yj1hTdNGCbM+w6DjY1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE
-38NflNUVyRRBnMRddWQVDf9VMOyGj/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymP
-AbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhHhm4qxFYxldBniYUr+WymXUad
-DKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveCX4XSQRjbgbME
-HMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A==
------END CERTIFICATE-----
-
-================================================================
-C: BM
-O: QuoVadis Limited
-CN: QuoVadis Root CA 2
------BEGIN CERTIFICATE-----
-MIIFtzCCA5+gAwIBAgICBQkwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0x
-GTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJv
-b3QgQ0EgMjAeFw0wNjExMjQxODI3MDBaFw0zMTExMjQxODIzMzNaMEUxCzAJBgNV
-BAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W
-YWRpcyBSb290IENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCa
-GMpLlA0ALa8DKYrwD4HIrkwZhR0In6spRIXzL4GtMh6QRr+jhiYaHv5+HBg6XJxg
-Fyo6dIMzMH1hVBHL7avg5tKifvVrbxi3Cgst/ek+7wrGsxDp3MJGF/hd/aTa/55J
-WpzmM+Yklvc/ulsrHHo1wtZn/qtmUIttKGAr79dgw8eTvI02kfN/+NsRE8Scd3bB
-rrcCaoF6qUWD4gXmuVbBlDePSHFjIuwXZQeVikvfj8ZaCuWw419eaxGrDPmF60Tp
-+ARz8un+XJiM9XOva7R+zdRcAitMOeGylZUtQofX1bOQQ7dsE/He3fbE+Ik/0XX1
-ksOR1YqI0JDs3G3eicJlcZaLDQP9nL9bFqyS2+r+eXyt66/3FsvbzSUr5R/7mp/i
-Ucw6UwxI5g69ybR2BlLmEROFcmMDBOAENisgGQLodKcftslWZvB1JdxnwQ5hYIiz
-PtGo/KPaHbDRsSNU30R2be1B2MGyIrZTHN81Hdyhdyox5C315eXbyOD/5YDXC2Og
-/zOhD7osFRXql7PSorW+8oyWHhqPHWykYTe5hnMz15eWniN9gqRMgeKh0bpnX5UH
-oycR7hYQe7xFSkyyBNKr79X9DFHOUGoIMfmR2gyPZFwDwzqLID9ujWc9Otb+fVuI
-yV77zGHcizN300QyNQliBJIWENieJ0f7OyHj+OsdWwIDAQABo4GwMIGtMA8GA1Ud
-EwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1UdDgQWBBQahGK8SEwzJQTU7tD2
-A8QZRtGUazBuBgNVHSMEZzBlgBQahGK8SEwzJQTU7tD2A8QZRtGUa6FJpEcwRTEL
-MAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMT
-ElF1b1ZhZGlzIFJvb3QgQ0EgMoICBQkwDQYJKoZIhvcNAQEFBQADggIBAD4KFk2f
-BluornFdLwUvZ+YTRYPENvbzwCYMDbVHZF34tHLJRqUDGCdViXh9duqWNIAXINzn
-g/iN/Ae42l9NLmeyhP3ZRPx3UIHmfLTJDQtyU/h2BwdBR5YM++CCJpNVjP4iH2Bl
-fF/nJrP3MpCYUNQ3cVX2kiF495V5+vgtJodmVjB3pjd4M1IQWK4/YY7yarHvGH5K
-WWPKjaJW1acvvFYfzznB4vsKqBUsfU16Y8Zsl0Q80m/DShcK+JDSV6IZUaUtl0Ha
-B0+pUNqQjZRG4T7wlP0QADj1O+hA4bRuVhogzG9Yje0uRY/W6ZM/57Es3zrWIozc
-hLsib9D45MY56QSIPMO661V6bYCZJPVsAfv4l7CUW+v90m/xd2gNNWQjrLhVoQPR
-TUIZ3Ph1WVaj+ahJefivDrkRoHy3au000LYmYjgahwz46P0u05B/B5EqHdZ+XIWD
-mbA4CD/pXvk1B+TJYm5Xf6dQlfe6yJvmjqIBxdZmv3lh8zwc4bmCXF2gw+nYSL0Z
-ohEUGW6yhhtoPkg3Goi3XZZenMfvJ2II4pEZXNLxId26F0KCl3GBUzGpn/Z9Yr9y
-4aOTHcyKJloJONDO1w2AFrR4pTqHTI2KpdVGl/IsELm8VCLAAVBpQ570su9t+Oza
-8eOx79+Rj1QqCyXBJhnEUhAFZdWCEOrCMc0u
------END CERTIFICATE-----
-
-================================================================
-C: BM
-O: QuoVadis Limited
-CN: QuoVadis Root CA 3
------BEGIN CERTIFICATE-----
-MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0x
-GTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJv
-b3QgQ0EgMzAeFw0wNjExMjQxOTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNV
-BAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W
-YWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDM
-V0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNggDhoB
-4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUr
-H556VOijKTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd
-8lyyBTNvijbO0BNO/79KDDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9Cabwv
-vWhDFlaJKjdhkf2mrk7AyxRllDdLkgbvBNDInIjbC3uBr7E9KsRlOni27tyAsdLT
-mZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwpp5ijJUMv7/FfJuGITfhe
-btfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8nT8KKdjc
-T5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDt
-WAEXMJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZ
-c6tsgLjoC2SToJyMGf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A
-4iLItLRkT9a6fUg+qGkM17uGcclzuD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYD
-VR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHTBgkrBgEEAb5YAAMwgcUwgZMG
-CCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmljYXRlIGNvbnN0
-aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0
-aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVu
-dC4wLQYIKwYBBQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2Nw
-czALBgNVHQ8EBAMCAQYwHQYDVR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4G
-A1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4ywLQoUmkRzBFMQswCQYDVQQGEwJC
-TTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UEAxMSUXVvVmFkaXMg
-Um9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZVqyM0
-7ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSem
-d1o417+shvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd
-+LJ2w/w4E6oM3kJpK27zPOuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B
-4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadN
-t54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp8kokUvd0/bpO5qgdAm6x
-DYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBCbjPsMZ57
-k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6s
-zHXug/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0j
-Wy10QJLZYxkNc91pvGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeT
-mJlglFwjz1onl14LBQaTNx47aTbrqZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK
-4SVhM7JZG+Ju1zdXtg2pEto=
------END CERTIFICATE-----
-
-================================================================
-C: BM
-O: QuoVadis Limited
-OU: Root Certification Authority
-CN: QuoVadis Root Certification Authority
------BEGIN CERTIFICATE-----
-MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJC
-TTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0
-aWZpY2F0aW9uIEF1dGhvcml0eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0
-aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAzMTkxODMzMzNaFw0yMTAzMTcxODMz
-MzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUw
-IwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQDEyVR
-dW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG
-9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTRvM16z/Yp
-li4kVEAkOPcahdxYTMukJ0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2D
-rOpm2RgbaIr1VxqYuvXtdj182d6UajtLF8HVj71lODqV0D1VNk7feVcxKh7YWWVJ
-WCCYfqtffp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeLYzcS19Dsw3sgQUSj7cug
-F+FxZc4dZjH3dgEZyH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWenAScOospU
-xbF6lR1xHkopigPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCC
-Ak4wPQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVv
-dmFkaXNvZmZzaG9yZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREw
-ggENMIIBCQYJKwYBBAG+WAABMIH7MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlhbmNl
-IG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmljYXRlIGJ5IGFueSBwYXJ0eSBh
-c3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJsZSBzdGFuZGFy
-ZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJh
-Y3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYI
-KwYBBQUHAgEWFmh0dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3T
-KbkGGew5Oanwl4Rqy+/fMIGuBgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rq
-y+/foYGEpIGBMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1p
-dGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYD
-VQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6tlCL
-MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSk
-fnIYj9lofFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf8
-7C9TqnN7Az10buYWnuulLsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1R
-cHhXHTMe/QKZnAzNCgVPx7uOpHX6Sm2xgI4JVrmcGmD+XcHXetwReNDWXcG31a0y
-mQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi5upZIof4l/UO/erMkqQW
-xFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi5nrQNiOK
-SnQ2+Q==
------END CERTIFICATE-----
-
-================================================================
-C: CH
-O: SwissSign AG
-CN: SwissSign Gold CA - G2
------BEGIN CERTIFICATE-----
-MIIFujCCA6KgAwIBAgIJALtAHEP1Xk+wMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNV
-BAYTAkNIMRUwEwYDVQQKEwxTd2lzc1NpZ24gQUcxHzAdBgNVBAMTFlN3aXNzU2ln
-biBHb2xkIENBIC0gRzIwHhcNMDYxMDI1MDgzMDM1WhcNMzYxMDI1MDgzMDM1WjBF
-MQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dpc3NTaWduIEFHMR8wHQYDVQQDExZT
-d2lzc1NpZ24gR29sZCBDQSAtIEcyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
-CgKCAgEAr+TufoskDhJuqVAtFkQ7kpJcyrhdhJJCEyq8ZVeCQD5XJM1QiyUqt2/8
-76LQwB8CJEoTlo8jE+YoWACjR8cGp4QjK7u9lit/VcyLwVcfDmJlD909Vopz2q5+
-bbqBHH5CjCA12UNNhPqE21Is8w4ndwtrvxEvcnifLtg+5hg3Wipy+dpikJKVyh+c
-6bM8K8vzARO/Ws/BtQpgvd21mWRTuKCWs2/iJneRjOBiEAKfNA+k1ZIzUd6+jbqE
-emA8atufK+ze3gE/bk3lUIbLtK/tREDFylqM2tIrfKjuvqblCqoOpd8FUrdVxyJd
-MmqXl2MT28nbeTZ7hTpKxVKJ+STnnXepgv9VHKVxaSvRAiTysybUa9oEVeXBCsdt
-MDeQKuSeFDNeFhdVxVu1yzSJkvGdJo+hB9TGsnhQ2wwMC3wLjEHXuendjIj3o02y
-MszYF9rNt85mndT9Xv+9lz4pded+p2JYryU0pUHHPbwNUMoDAw8IWh+Vc3hiv69y
-FGkOpeUDDniOJihC8AcLYiAQZzlG+qkDzAQ4embvIIO1jEpWjpEA/I5cgt6IoMPi
-aG59je883WX0XaxR7ySArqpWl2/5rX3aYT+YdzylkbYcjCbaZaIJbcHiVOO5ykxM
-gI93e2CaHt+28kgeDrpOVG2Y4OGiGqJ3UM/EY5LsRxmd6+ZrzsECAwEAAaOBrDCB
-qTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUWyV7
-lqRlUX64OfPAeGZe6Drn8O4wHwYDVR0jBBgwFoAUWyV7lqRlUX64OfPAeGZe6Drn
-8O4wRgYDVR0gBD8wPTA7BglghXQBWQECAQEwLjAsBggrBgEFBQcCARYgaHR0cDov
-L3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBACe6
-45R88a7A3hfm5djV9VSwg/S7zV4Fe0+fdWavPOhWfvxyeDgD2StiGwC5+OlgzczO
-UYrHUDFu4Up+GC9pWbY9ZIEr44OE5iKHjn3g7gKZYbge9LgriBIWhMIxkziWMaa5
-O1M/wySTVltpkuzFwbs4AOPsF6m43Md8AYOfMke6UiI0HTJ6CVanfCU2qT1L2sCC
-bwq7EsiHSycR+R4tx5M/nttfJmtS2S6K8RTGRI0Vqbe/vd6mGu6uLftIdxf+u+yv
-GPUqUfA5hJeVbG4bwyvEdGB5JbAKJ9/fXtI5z0V9QkvfsywexcZdylU6oJxpmo/a
-77KwPJ+HbBIrZXAVUjEaJM9vMSNQH4xPjyPDdEFjHFWoFN0+4FFQz/EbMFYOkrCC
-hdiDyyJkvC24JdVUorgG6q2SpCSgwYa1ShNqR88uC1aVVMvOmttqtKay20EIhid3
-92qgQmwLOM7XdVAyksLfKzAiSNDVQTglXaTpXZ/GlHXQRf0wl0OPkKsKx4ZzYEpp
-Ld6leNcG2mqeSz53OiATIgHQv2ieY2BrNU0LbbqhPcCT4H8js1WtciVORvnSFu+w
-ZMEBnunKoGqYDs/YYPIvSbjkQuE4NRb0yG5P94FW6LqjviOvrv1vA+ACOzB2+htt
-Qc8Bsem4yWb02ybzOqR08kkkW8mw0FfB+j564ZfJ
------END CERTIFICATE-----
-
-================================================================
-C: CH
-O: SwissSign AG
-CN: SwissSign Platinum CA - G2
------BEGIN CERTIFICATE-----
-MIIFwTCCA6mgAwIBAgIITrIAZwwDXU8wDQYJKoZIhvcNAQEFBQAwSTELMAkGA1UE
-BhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzEjMCEGA1UEAxMaU3dpc3NTaWdu
-IFBsYXRpbnVtIENBIC0gRzIwHhcNMDYxMDI1MDgzNjAwWhcNMzYxMDI1MDgzNjAw
-WjBJMQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dpc3NTaWduIEFHMSMwIQYDVQQD
-ExpTd2lzc1NpZ24gUGxhdGludW0gQ0EgLSBHMjCCAiIwDQYJKoZIhvcNAQEBBQAD
-ggIPADCCAgoCggIBAMrfogLi2vj8Bxax3mCq3pZcZB/HL37PZ/pEQtZ2Y5Wu669y
-IIpFR4ZieIbWIDkm9K6j/SPnpZy1IiEZtzeTIsBQnIJ71NUERFzLtMKfkr4k2Htn
-IuJpX+UFeNSH2XFwMyVTtIc7KZAoNppVRDBopIOXfw0enHb/FZ1glwCNioUD7IC+
-6ixuEFGSzH7VozPY1kneWCqv9hbrS3uQMpe5up1Y8fhXSQQeol0GcN1x2/ndi5ob
-jM89o03Oy3z2u5yg+gnOI2Ky6Q0f4nIoj5+saCB9bzuohTEJfwvH6GXp43gOCWcw
-izSC+13gzJ2BbWLuCB4ELE6b7P6pT1/9aXjvCR+htL/68++QHkwFix7qepF6w9fl
-+zC8bBsQWJj3Gl/QKTIDE0ZNYWqFTFJ0LwYfexHihJfGmfNtf9dng34TaNhxKFrY
-zt3oEBSa/m0jh26OWnA81Y0JAKeqvLAxN23IhBQeW71FYyBrS3SMvds6DsHPWhaP
-pZjydomyExI7C3d3rLvlPClKknLKYRorXkzig3R3+jVIeoVNjZpTxN94ypeRSCtF
-KwH3HBqi7Ri6Cr2D+m+8jVeTO9TUps4e8aCxzqv9KyiaTxvXw3LbpMS/XUz13XuW
-ae5ogObnmLo2t/5u7Su9IPhlGdpVCX4l3P5hYnL5fhgC72O00Puv5TtjjGePAgMB
-AAGjgawwgakwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0O
-BBYEFFCvzAeHFUdvOMW0ZdHelarp35zMMB8GA1UdIwQYMBaAFFCvzAeHFUdvOMW0
-ZdHelarp35zMMEYGA1UdIAQ/MD0wOwYJYIV0AVkBAQEBMC4wLAYIKwYBBQUHAgEW
-IGh0dHA6Ly9yZXBvc2l0b3J5LnN3aXNzc2lnbi5jb20vMA0GCSqGSIb3DQEBBQUA
-A4ICAQAIhab1Fgz8RBrBY+D5VUYI/HAcQiiWjrfFwUF1TglxeeVtlspLpYhg0DB0
-uMoI3LQwnkAHFmtllXcBrqS3NQuB2nEVqXQXOHtYyvkv+8Bldo1bAbl93oI9ZLi+
-FHSjClTTLJUYFzX1UWs/j6KWYTl4a0vlpqD4U99REJNi54Av4tHgvI42Rncz7Lj7
-jposiU0xEQ8mngS7twSNC/K5/FqdOxa3L8iYq/6KUFkuozv8KV2LwUvJ4ooTHbG/
-u0IdUt1O2BReEMYxB+9xJ/cbOQncguqLs5WGXv312l0xpuAxtpTmREl0xRbl9x8D
-YSjFyMsSoEJL+WuICI20MhjzdZ/EfwBPBZWcoxcCw7NTm6ogOSkrZvqdr16zktK1
-puEa+S1BaYEUtLS17Yk9zvupnTVCRLEcFHOBzyoBNZox1S2PbYTfgE1X4z/FhHXa
-icYwu+uPyyIIoK6q8QNsOktNCaUOcsZWayFCTiMlFGiudgp8DAdwZPmaL/YFOSbG
-DI8Zf0NebvRbFS/bYV3mZy8/CJT5YLSYMdp08YSTcU1f+2BY0fvEwW2JorsgH51x
-kcsymxM9Pn2SUjWskpSi0xjCfMfqr3YFFt1nJ8J+HAciIfNAChs0B0QTwoRqjt8Z
-Wr9/6x3iGjjRXK9HkmuAtTClyY3YqzGBH9/CZjfTk6mFhnll0g==
------END CERTIFICATE-----
-
-================================================================
-C: CH
-O: SwissSign AG
-CN: SwissSign Silver CA - G2
------BEGIN CERTIFICATE-----
-MIIFvTCCA6WgAwIBAgIITxvUL1S7L0swDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UE
-BhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWdu
-IFNpbHZlciBDQSAtIEcyMB4XDTA2MTAyNTA4MzI0NloXDTM2MTAyNTA4MzI0Nlow
-RzELMAkGA1UEBhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMY
-U3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A
-MIICCgKCAgEAxPGHf9N4Mfc4yfjDmUO8x/e8N+dOcbpLj6VzHVxumK4DV644N0Mv
-Fz0fyM5oEMF4rhkDKxD6LHmD9ui5aLlV8gREpzn5/ASLHvGiTSf5YXu6t+WiE7br
-YT7QbNHm+/pe7R20nqA1W6GSy/BJkv6FCgU+5tkL4k+73JU3/JHpMjUi0R86TieF
-nbAVlDLaYQ1HTWBCrpJH6INaUFjpiou5XaHc3ZlKHzZnu0jkg7Y360g6rw9njxcH
-6ATK72oxh9TAtvmUcXtnZLi2kUpCe2UuMGoM9ZDulebyzYLs2aFK7PayS+VFheZt
-eJMELpyCbTapxDFkH4aDCyr0NQp4yVXPQbBH6TCfmb5hqAaEuSh6XzjZG6k4sIN/
-c8HDO0gqgg8hm7jMqDXDhBuDsz6+pJVpATqJAHgE2cn0mRmrVn5bi4Y5FZGkECwJ
-MoBgs5PAKrYYC51+jUnyEEp/+dVGLxmSo5mnJqy7jDzmDrxHB9xzUfFwZC8I+bRH
-HTBsROopN4WSaGa8gzj+ezku01DwH/teYLappvonQfGbGHLy9YR0SslnxFSuSGTf
-jNFusB3hB48IHpmccelM2KX3RxIfdNFRnobzwqIjQAtz20um53MGjMGg6cFZrEb6
-5i/4z3GcRm25xBWNOHkDRUjvxF3XCO6HOSKGsg0PWEP3calILv3q1h8CAwEAAaOB
-rDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU
-F6DNweRBtjpbO8tFnb0cwpj6hlgwHwYDVR0jBBgwFoAUF6DNweRBtjpbO8tFnb0c
-wpj6hlgwRgYDVR0gBD8wPTA7BglghXQBWQEDAQEwLjAsBggrBgEFBQcCARYgaHR0
-cDovL3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIB
-AHPGgeAn0i0P4JUw4ppBf1AsX19iYamGamkYDHRJ1l2E6kFSGG9YrVBWIGrGvShp
-WJHckRE1qTodvBqlYJ7YH39FkWnZfrt4csEGDyrOj4VwYaygzQu4OSlWhDJOhrs9
-xCrZ1x9y7v5RoSJBsXECYxqCsGKrXlcSH9/L3XWgwF15kIwb4FDm3jH+mHtwX6WQ
-2K34ArZv02DdQEsixT2tOnqfGhpHkXkzuoLcMmkDlm4fS/Bx/uNncqCxv1yL5PqZ
-IseEuRuNI5c/7SXgz2W79WEE790eslpBIlqhn10s6FvJbakMDHiqYMZWjwFaDGi8
-aRl5xB9+lwW/xekkUV7U1UtT7dkjWjYDZaPBA61BMPNGG4WQr2W11bHkFlt4dR2X
-em1ZqSqPe97Dh4kQmUlzeMg9vVE1dCrV8X5pGyq7O70luJpaPXJhkGaH7gzWTdQR
-dAtq/gsD/KNVV4n+SsuuWxcFyPKNIzFTONItaj+CuY0IavdeQXRuwxF+B6wpYJE/
-OMpXEA29MC/HpeZBoNquBYeaoKRlbEwJDIm6uNO5wJOKMPqN5ZprFQFOZ6raYlY+
-hAhm0sQ2fac+EPyI4NSA5QC9qvNOBqN6avlicuMJT+ubDgEj8Z+7fNzcbBGXJbLy
-tGMU0gYqZ4yD9c7qB9iaah7s5Aq7KkzrCWA5zspi2C5u
------END CERTIFICATE-----
-
-================================================================
-C: CH
-O: WISeKey
-OU: Copyright (c) 2005
-OU: OISTE Foundation Endorsed
-CN: OISTE WISeKey Global Root GA CA
------BEGIN CERTIFICATE-----
-MIID8TCCAtmgAwIBAgIQQT1yx/RrH4FDffHSKFTfmjANBgkqhkiG9w0BAQUFADCB
-ijELMAkGA1UEBhMCQ0gxEDAOBgNVBAoTB1dJU2VLZXkxGzAZBgNVBAsTEkNvcHly
-aWdodCAoYykgMjAwNTEiMCAGA1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNl
-ZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9iYWwgUm9vdCBHQSBDQTAeFw0w
-NTEyMTExNjAzNDRaFw0zNzEyMTExNjA5NTFaMIGKMQswCQYDVQQGEwJDSDEQMA4G
-A1UEChMHV0lTZUtleTEbMBkGA1UECxMSQ29weXJpZ2h0IChjKSAyMDA1MSIwIAYD
-VQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBX
-SVNlS2V5IEdsb2JhbCBSb290IEdBIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
-MIIBCgKCAQEAy0+zAJs9Nt350UlqaxBJH+zYK7LG+DKBKUOVTJoZIyEVRd7jyBxR
-VVuuk+g3/ytr6dTqvirdqFEr12bDYVxgAsj1znJ7O7jyTmUIms2kahnBAbtzptf2
-w93NvKSLtZlhuAGio9RN1AU9ka34tAhxZK9w8RxrfvbDd50kc3vkDIzh2TbhmYsF
-mQvtRTEJysIA2/dyoJaqlYfQjse2YXMNdmaM3Bu0Y6Kff5MTMPGhJ9vZ/yxViJGg
-4E8HsChWjBgbl0SOid3gF27nKu+POQoxhILYQBRJLnpB5Kf+42TMwVlxSywhp1t9
-4B3RLoGbw9ho972WG6xwsRYUC9tguSYBBQIDAQABo1EwTzALBgNVHQ8EBAMCAYYw
-DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUswN+rja8sHnR3JQmthG+IbJphpQw
-EAYJKwYBBAGCNxUBBAMCAQAwDQYJKoZIhvcNAQEFBQADggEBAEuh/wuHbrP5wUOx
-SPMowB0uyQlB+pQAHKSkq0lPjz0e701vvbyk9vImMMkQyh2I+3QZH4VFvbBsUfk2
-ftv1TDI6QU9bR8/oCy22xBmddMVHxjtqD6wU2zz0c5ypBd8A3HR4+vg1YFkCExh8
-vPtNsCBtQ7tgMHpnM1zFmdH4LTlSc/uMqpclXHLZCB6rTjzjgTGfA6b7wP4piFXa
-hNVQA7bihKOmNqoROgHhGEvWRGizPflTdISzRpFGlgC3gCy24eMQ4tui5yiPAZZi
-Fj4A4xylNoEYokxSdsARo27mHbrjWr42U8U+dY+GaSlYU7Wcu2+fXMUY7N0v4ZjJ
-/L7fCg0=
------END CERTIFICATE-----
-
-================================================================
-C: CN
-O: CNNIC
-CN: CNNIC ROOT
------BEGIN CERTIFICATE-----
-MIIDVTCCAj2gAwIBAgIESTMAATANBgkqhkiG9w0BAQUFADAyMQswCQYDVQQGEwJD
-TjEOMAwGA1UEChMFQ05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1QwHhcNMDcwNDE2
-MDcwOTE0WhcNMjcwNDE2MDcwOTE0WjAyMQswCQYDVQQGEwJDTjEOMAwGA1UEChMF
-Q05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1QwggEiMA0GCSqGSIb3DQEBAQUAA4IB
-DwAwggEKAoIBAQDTNfc/c3et6FtzF8LRb+1VvG7q6KR5smzDo+/hn7E7SIX1mlwh
-IhAsxYLO2uOabjfhhyzcuQxauohV3/2q2x8x6gHx3zkBwRP9SFIhxFXf2tizVHa6
-dLG3fdfA6PZZxU3Iva0fFNrfWEQlMhkqx35+jq44sDB7R3IJMfAw28Mbdim7aXZO
-V/kbZKKTVrdvmW7bCgScEeOAH8tjlBAKqeFkgjH5jCftppkA9nCTGPihNIaj3XrC
-GHn2emU1z5DrvTOTn1OrczvmmzQgLx3vqR1jGqCA2wMv+SYahtKNu6m+UjqHZ0gN
-v7Sg2Ca+I19zN38m5pIEo3/PIKe38zrKy5nLAgMBAAGjczBxMBEGCWCGSAGG+EIB
-AQQEAwIABzAfBgNVHSMEGDAWgBRl8jGtKvf33VKWCscCwQ7vptU7ETAPBgNVHRMB
-Af8EBTADAQH/MAsGA1UdDwQEAwIB/jAdBgNVHQ4EFgQUZfIxrSr3991SlgrHAsEO
-76bVOxEwDQYJKoZIhvcNAQEFBQADggEBAEs17szkrr/Dbq2flTtLP1se31cpolnK
-OOK5Gv+e5m4y3R6u6jW39ZORTtpC4cMXYFDy0VwmuYK36m3knITnA3kXr5g9lNvH
-ugDnuL8BV8F3RTIMO/G0HAiw/VGgod2aHRM2mm23xzy54cXZF/qD1T0VoDy7Hgvi
-yJA/qIYM/PmLXoXLT1tLYhFHxUV8BS9BsZ4QaRuZluBVeftOhpm4lNqGOGqTo+fL
-buXf6iFViZx9fX+Y9QCJ7uOEwFyWtcVG6kbghVW2G8kS1sHNzYDzAgE8yGnLRUhj
-2JTQ7IUOO04RZfSCjKY9ri4ilAnIXOo8gV0WKgOXFlUJ24pBgp5mmxE=
------END CERTIFICATE-----
-
-================================================================
-C: CN
-O: China Internet Network Information Center
-CN: China Internet Network Information Center EV Certificates Root
------BEGIN CERTIFICATE-----
-MIID9zCCAt+gAwIBAgIESJ8AATANBgkqhkiG9w0BAQUFADCBijELMAkGA1UEBhMC
-Q04xMjAwBgNVBAoMKUNoaW5hIEludGVybmV0IE5ldHdvcmsgSW5mb3JtYXRpb24g
-Q2VudGVyMUcwRQYDVQQDDD5DaGluYSBJbnRlcm5ldCBOZXR3b3JrIEluZm9ybWF0
-aW9uIENlbnRlciBFViBDZXJ0aWZpY2F0ZXMgUm9vdDAeFw0xMDA4MzEwNzExMjVa
-Fw0zMDA4MzEwNzExMjVaMIGKMQswCQYDVQQGEwJDTjEyMDAGA1UECgwpQ2hpbmEg
-SW50ZXJuZXQgTmV0d29yayBJbmZvcm1hdGlvbiBDZW50ZXIxRzBFBgNVBAMMPkNo
-aW5hIEludGVybmV0IE5ldHdvcmsgSW5mb3JtYXRpb24gQ2VudGVyIEVWIENlcnRp
-ZmljYXRlcyBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAm35z
-7r07eKpkQ0H1UN+U8i6yjUqORlTSIRLIOTJCBumD1Z9S7eVnAztUwYyZmczpwA//
-DdmEEbK40ctb3B75aDFk4Zv6dOtouSCV98YPjUesWgbdYavi7NifFy2cyjw1l1Vx
-zUOFsUcW9SxTgHbP0wBkvUCZ3czY28Sf1hNfQYOL+Q2HklY0bBoQCxfVWhyXWIQ8
-hBouXJE0bhlffxdpxWXvayHG1VA6v2G5BY3vbzQ6sm8UY78WO5upKv23KzhmBsUs
-4qpnHkWnjQRmQvaPK++IIGmPMowUc9orhpFjIpryp9vOiYurXccUwVswah+xt54u
-gQEC7c+WXmPbqOY4twIDAQABo2MwYTAfBgNVHSMEGDAWgBR8cks5x8DbYqVPm6oY
-NJKiyoOCWTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4E
-FgQUfHJLOcfA22KlT5uqGDSSosqDglkwDQYJKoZIhvcNAQEFBQADggEBACrDx0M3
-j92tpLIM7twUbY8opJhJywyA6vPtI2Z1fcXTIWd50XPFtQO3WKwMVC/GVhMPMdoG
-52U7HW8228gd+f2ABsqjPWYWqJ1MFn3AlUa1UeTiH9fqBk1jjZaM7+czV0I664zB
-echNdn3e9rG3geCg+aF4RhcaVpjwTj2rHO3sOdwHSPdj/gauwqRcalsyiMXHM4Ws
-ZkJHwlgkmeHlPuV1LI5D1l08eB6olYIpUNHRFrrvwb562bTYzB5MRuF3sTGrvSrI
-zo9uoV1/A3U05K2JRVRevq4opbs/eHnrc7MKDf2+yfdWrPa37S+bISnHOLaVxATy
-wy39FCqQmbkHzJ8=
------END CERTIFICATE-----
-
-================================================================
-C: CO
-O: Sociedad Cameral de Certificación Digital - Certicámara S.A.
-CN: AC RaÃz Certicámara S.A.
------BEGIN CERTIFICATE-----
-MIIGZjCCBE6gAwIBAgIPB35Sk3vgFeNX8GmMy+wMMA0GCSqGSIb3DQEBBQUAMHsx
-CzAJBgNVBAYTAkNPMUcwRQYDVQQKDD5Tb2NpZWRhZCBDYW1lcmFsIGRlIENlcnRp
-ZmljYWNpw7NuIERpZ2l0YWwgLSBDZXJ0aWPDoW1hcmEgUy5BLjEjMCEGA1UEAwwa
-QUMgUmHDrXogQ2VydGljw6FtYXJhIFMuQS4wHhcNMDYxMTI3MjA0NjI5WhcNMzAw
-NDAyMjE0MjAyWjB7MQswCQYDVQQGEwJDTzFHMEUGA1UECgw+U29jaWVkYWQgQ2Ft
-ZXJhbCBkZSBDZXJ0aWZpY2FjacOzbiBEaWdpdGFsIC0gQ2VydGljw6FtYXJhIFMu
-QS4xIzAhBgNVBAMMGkFDIFJhw616IENlcnRpY8OhbWFyYSBTLkEuMIICIjANBgkq
-hkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAq2uJo1PMSCMI+8PPUZYILrgIem08kBeG
-qentLhM0R7LQcNzJPNCNyu5LF6vQhbCnIwTLqKL85XXbQMpiiY9QngE9JlsYhBzL
-fDe3fezTf3MZsGqy2IiKLUV0qPezuMDU2s0iiXRNWhU5cxh0T7XrmafBHoi0wpOQ
-Y5fzp6cSsgkiBzPZkc0OnB8OIMfuuzONj8LSWKdf/WU34ojC2I+GdV75LaeHM/J4
-Ny+LvB2GNzmxlPLYvEqcgxhaBvzz1NS6jBUJJfD5to0EfhcSM2tXSExP2yYe68yQ
-54v5aHxwD6Mq0Do43zeX4lvegGHTgNiRg0JaTASJaBE8rF9ogEHMYELODVoqDA+b
-MMCm8Ibbq0nXl21Ii/kDwFJnmxL3wvIumGVC2daa49AZMQyth9VXAnow6IYm+48j
-ilSH5L887uvDdUhfHjlvgWJsxS3EF1QZtzeNnDeRyPYL1epjb4OsOMLzP96a++Ej
-YfDIJss2yKHzMI+ko6Kh3VOz3vCaMh+DkXkwwakfU5tTohVTP92dsxA7SH2JD/zt
-A/X7JWR1DhcZDY8AFmd5ekD8LVkH2ZD6mq093ICK5lw1omdMEWux+IBkAC1vImHF
-rEsm5VoQgpukg3s0956JkSCXjrdCx2bD0Omk1vUgjcTDlaxECp1bczwmPS9KvqfJ
-pxAe+59QafMCAwEAAaOB5jCB4zAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE
-AwIBBjAdBgNVHQ4EFgQU0QnQ6dfOeXRU+Tows/RtLAMDG2gwgaAGA1UdIASBmDCB
-lTCBkgYEVR0gADCBiTArBggrBgEFBQcCARYfaHR0cDovL3d3dy5jZXJ0aWNhbWFy
-YS5jb20vZHBjLzBaBggrBgEFBQcCAjBOGkxMaW1pdGFjaW9uZXMgZGUgZ2FyYW50
-7WFzIGRlIGVzdGUgY2VydGlmaWNhZG8gc2UgcHVlZGVuIGVuY29udHJhciBlbiBs
-YSBEUEMuMA0GCSqGSIb3DQEBBQUAA4ICAQBclLW4RZFNjmEfAygPU3zmpFmps4p6
-xbD/CHwso3EcIRNnoZUSQDWDg4902zNc8El2CoFS3UnUmjIz75uny3XlesuXEpBc
-unvFm9+7OSPI/5jOCk0iAUgHforA1SBClETvv3eiiWdIG0ADBaGJ7M9i4z0ldma/
-Jre7Ir5v/zlXdLp6yQGVwZVR6Kss+LGGIOk/yzVb0hfpKv6DExdA7ohiZVvVO2Dp
-ezy4ydV/NgIlqmjCMRW3MGXrfx1IebHPOeJCgBbT9ZMj/EyXyVo3bHwi2ErN0o42
-gzmRkBDI8ck1fj+404HGIGQatlDCIaR43NAvO2STdPCWkPHv+wlaNECW8DYSwaN0
-jJN+Qd53i+yG2dIPPy3RzECiiWZIHiCznCNZc6lEc7wkeZBWN7PGKX6jD/EpOe9+
-XCgycDWs2rjIdWb8m0w5R44bb5tNAlQiM+9hup4phO9OSzNHdpdqy35f/RWmnkJD
-W2ZaiogN9xa5P1FlK2Zqi9E4UqLWRhH6/JocdJ6PlwsCT2TG9WjTSy3/pDceiz+/
-RL5hRqGEPQgnTIEgd4kI6mdAXmwIUV80WoyWaM3X94nCHNMyAK9Sy9NgWyo6R35r
-MDOhYil/SrnhLecUIw4OGEfhefwVVdCx/CVxY3UzHCMrr1zZ7Ud3YA47Dx7SwNxk
-BYn8eNZcLCZDqQ==
------END CERTIFICATE-----
-
-================================================================
-C: DE
-O: D-Trust GmbH
-CN: D-TRUST Root Class 3 CA 2 2009
------BEGIN CERTIFICATE-----
-MIIEMzCCAxugAwIBAgIDCYPzMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNVBAYTAkRF
-MRUwEwYDVQQKDAxELVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBD
-bGFzcyAzIENBIDIgMjAwOTAeFw0wOTExMDUwODM1NThaFw0yOTExMDUwODM1NTha
-ME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxELVRydXN0IEdtYkgxJzAlBgNVBAMM
-HkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTCCASIwDQYJKoZIhvcNAQEB
-BQADggEPADCCAQoCggEBANOySs96R+91myP6Oi/WUEWJNTrGa9v+2wBoqOADER03
-UAifTUpolDWzU9GUY6cgVq/eUXjsKj3zSEhQPgrfRlWLJ23DEE0NkVJD2IfgXU42
-tSHKXzlABF9bfsyjxiupQB7ZNoTWSPOSHjRGICTBpFGOShrvUD9pXRl/RcPHAY9R
-ySPocq60vFYJfxLLHLGvKZAKyVXMD9O0Gu1HNVpK7ZxzBCHQqr0ME7UAyiZsxGsM
-lFqVlNpQmvH/pStmMaTJOKDfHR+4CS7zp+hnUquVH+BGPtikw8paxTGA6Eian5Rp
-/hnd2HN8gcqW3o7tszIFZYQ05ub9VxC1X3a/L7AQDcUCAwEAAaOCARowggEWMA8G
-A1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFP3aFMSfMN4hvR5COfyrYyNJ4PGEMA4G
-A1UdDwEB/wQEAwIBBjCB0wYDVR0fBIHLMIHIMIGAoH6gfIZ6bGRhcDovL2RpcmVj
-dG9yeS5kLXRydXN0Lm5ldC9DTj1ELVRSVVNUJTIwUm9vdCUyMENsYXNzJTIwMyUy
-MENBJTIwMiUyMDIwMDksTz1ELVRydXN0JTIwR21iSCxDPURFP2NlcnRpZmljYXRl
-cmV2b2NhdGlvbmxpc3QwQ6BBoD+GPWh0dHA6Ly93d3cuZC10cnVzdC5uZXQvY3Js
-L2QtdHJ1c3Rfcm9vdF9jbGFzc18zX2NhXzJfMjAwOS5jcmwwDQYJKoZIhvcNAQEL
-BQADggEBAH+X2zDI36ScfSF6gHDOFBJpiBSVYEQBrLLpME+bUMJm2H6NMLVwMeni
-acfzcNsgFYbQDfC+rAF1hM5+n02/t2A7nPPKHeJeaNijnZflQGDSNiH+0LS4F9p0
-o3/U37CYAqxva2ssJSRyoWXuJVrl5jLn8t+rSfrzkGkj2wTZ51xY/GXUl77M/C4K
-zCUqNQT4YJEVdT1B/yMfGchs64JTBKbkTCJNjYy6zltz7GRUUG3RnFX7acM2w4y8
-PIWmawomDeCTmGCufsYkl4phX5GOZpIJhzbNi5stPvZR1FDUWSi9g/LMKHtThm3Y
-Johw1+qRzT65ysCQblrGXnRl11z+o+I=
------END CERTIFICATE-----
-
-================================================================
-C: DE
-O: D-Trust GmbH
-CN: D-TRUST Root Class 3 CA 2 EV 2009
------BEGIN CERTIFICATE-----
-MIIEQzCCAyugAwIBAgIDCYP0MA0GCSqGSIb3DQEBCwUAMFAxCzAJBgNVBAYTAkRF
-MRUwEwYDVQQKDAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBD
-bGFzcyAzIENBIDIgRVYgMjAwOTAeFw0wOTExMDUwODUwNDZaFw0yOTExMDUwODUw
-NDZaMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxELVRydXN0IEdtYkgxKjAoBgNV
-BAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAwOTCCASIwDQYJKoZI
-hvcNAQEBBQADggEPADCCAQoCggEBAJnxhDRwui+3MKCOvXwEz75ivJn9gpfSegpn
-ljgJ9hBOlSJzmY3aFS3nBfwZcyK3jpgAvDw9rKFs+9Z5JUut8Mxk2og+KbgPCdM0
-3TP1YtHhzRnp7hhPTFiu4h7WDFsVWtg6uMQYZB7jM7K1iXdODL/ZlGsTl28So/6Z
-qQTMFexgaDbtCHu39b+T7WYxg4zGcTSHThfqr4uRjRxWQa4iN1438h3Z0S0NL2lR
-p75mpoo6Kr3HGrHhFPC+Oh25z1uxav60sUYgovseO3Dvk5h9jHOW8sXvhXCtKSb8
-HgQ+HKDYD8tSg2J87otTlZCpV6LqYQXY+U3EJ/pure3511H3a6UCAwEAAaOCASQw
-ggEgMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNOUikxiEyoZLsyvcop9Ntea
-HNxnMA4GA1UdDwEB/wQEAwIBBjCB3QYDVR0fBIHVMIHSMIGHoIGEoIGBhn9sZGFw
-Oi8vZGlyZWN0b3J5LmQtdHJ1c3QubmV0L0NOPUQtVFJVU1QlMjBSb290JTIwQ2xh
-c3MlMjAzJTIwQ0ElMjAyJTIwRVYlMjAyMDA5LE89RC1UcnVzdCUyMEdtYkgsQz1E
-RT9jZXJ0aWZpY2F0ZXJldm9jYXRpb25saXN0MEagRKBChkBodHRwOi8vd3d3LmQt
-dHJ1c3QubmV0L2NybC9kLXRydXN0X3Jvb3RfY2xhc3NfM19jYV8yX2V2XzIwMDku
-Y3JsMA0GCSqGSIb3DQEBCwUAA4IBAQA07XtaPKSUiO8aEXUHL7P+PPoeUSbrh/Yp
-3uDx1MYkCenBz1UbtDDZzhr+BlGmFaQt77JLvyAoJUnRpjZ3NOhk31KxEcdzes05
-nsKtjHEh8lprr988TlWvsoRlFIm5d8sqMb7Po23Pb0iUMkZv53GMoKaEGTcH8gNF
-CSuGdXzfX2lXANtu2KZyIktQ1HWYVt+3GP9DQ1CuekR78HlR10M9p9OB0/DJT7na
-xpeG0ILD5EJt/rDiZE4OJudANCa1CInXCGNjOCd1HjPqbqjdn5lPdE2BiYBL3ZqX
-KVwvvoFBuYz/6n1gBp7N1z3TLqMVvKjmJuVvw9y4AyHqnxbxLFS1
------END CERTIFICATE-----
-
-================================================================
-C: DE
-O: Deutsche Telekom AG
-OU: T-TeleSec Trust Center
-CN: Deutsche Telekom Root CA 2
------BEGIN CERTIFICATE-----
-MIIDnzCCAoegAwIBAgIBJjANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJERTEc
-MBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxlU2Vj
-IFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290IENB
-IDIwHhcNOTkwNzA5MTIxMTAwWhcNMTkwNzA5MjM1OTAwWjBxMQswCQYDVQQGEwJE
-RTEcMBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxl
-U2VjIFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290
-IENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrC6M14IspFLEU
-ha88EOQ5bzVdSq7d6mGNlUn0b2SjGmBmpKlAIoTZ1KXleJMOaAGtuU1cOs7TuKhC
-QN/Po7qCWWqSG6wcmtoIKyUn+WkjR/Hg6yx6m/UTAtB+NHzCnjwAWav12gz1Mjwr
-rFDa1sPeg5TKqAyZMg4ISFZbavva4VhYAUlfckE8FQYBjl2tqriTtM2e66foai1S
-NNs671x1Udrb8zH57nGYMsRUFUQM+ZtV7a3fGAigo4aKSe5TBY8ZTNXeWHmb0moc
-QqvF1afPaA+W5OFhmHZhyJF81j4A4pFQh+GdCuatl9Idxjp9y7zaAzTVjlsB9WoH
-txa2bkp/AgMBAAGjQjBAMB0GA1UdDgQWBBQxw3kbuvVT1xfgiXotF2wKsyudMzAP
-BgNVHRMECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOC
-AQEAlGRZrTlk5ynrE/5aw4sTV8gEJPB0d8Bg42f76Ymmg7+Wgnxu1MM9756Abrsp
-tJh6sTtU6zkXR34ajgv8HzFZMQSyzhfzLMdiNlXiItiJVbSYSKpk+tYcNthEeFpa
-IzpXl/V6ME+un2pMSyuOoAPjPuCp1NJ70rOo4nI8rZ7/gFnkm0W09juwzTkZmDLl
-6iFhkOQxIY40sfcvNUqFENrnijchvllj4PKFiDFT1FQUhXB59C4Gdyd1Lx+4ivn+
-xbrYNuSD7Odlt79jWvNGr4GUN9RBjNYj1h7P9WgbRGOiWrqnNVmh5XAFmw4jV5mU
-Cm26OWMohpLzGITY+9HPBVZkVw==
------END CERTIFICATE-----
-
-================================================================
-C: DE
-O: T-Systems Enterprise Services GmbH
-OU: T-Systems Trust Center
-CN: T-TeleSec GlobalRoot Class 3
------BEGIN CERTIFICATE-----
-MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUx
-KzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAd
-BgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNl
-YyBHbG9iYWxSb290IENsYXNzIDMwHhcNMDgxMDAxMTAyOTU2WhcNMzMxMDAxMjM1
-OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnBy
-aXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50
-ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwggEiMA0G
-CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC9dZPwYiJvJK7genasfb3ZJNW4t/zN
-8ELg63iIVl6bmlQdTQyK9tPPcPRStdiTBONGhnFBSivwKixVA9ZIw+A5OO3yXDw/
-RLyTPWGrTs0NvvAgJ1gORH8EGoel15YUNpDQSXuhdfsaa3Ox+M6pCSzyU9XDFES4
-hqX2iys52qMzVNn6chr3IhUciJFrf2blw2qAsCTz34ZFiP0Zf3WHHx+xGwpzJFu5
-ZeAsVMhg02YXP+HMVDNzkQI6pn97djmiH5a2OK61yJN0HZ65tOVgnS9W0eDrXltM
-EnAMbEQgqxHY9Bn20pxSN+f6tsIxO0rUFJmtxxr1XV/6B7h8DR/Wgx6zAgMBAAGj
-QjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS1
-A/d2O2GCahKqGFPrAyGUv/7OyjANBgkqhkiG9w0BAQsFAAOCAQEAVj3vlNW92nOy
-WL6ukK2YJ5f+AbGwUgC4TeQbIXQbfsDuXmkqJa9c1h3a0nnJ85cp4IaH3gRZD/FZ
-1GSFS5mvJQQeyUapl96Cshtwn5z2r3Ex3XsFpSzTucpH9sry9uetuUg/vBa3wW30
-6gmv7PO15wWeph6KU1HWk4HMdJP2udqmJQV0eVp+QD6CSyYRMG7hP0HHRwA11fXT
-91Q+gT3aSWqas+8QPebrb9HIIkfLzM8BMZLZGOMivgkeGj5asuRrDFR6fUNOuIml
-e9eiPZaGzPImNC1qkp2aGtAw4l1OBLBfiyB+d8E9lYLRRpo7PHi4b6HQDWSieB4p
-TpPDpFQUWw==
------END CERTIFICATE-----
-
-================================================================
-C: DE
-O: TC TrustCenter GmbH
-OU: TC TrustCenter Class 2 CA
-CN: TC TrustCenter Class 2 CA II
------BEGIN CERTIFICATE-----
-MIIEqjCCA5KgAwIBAgIOLmoAAQACH9dSISwRXDswDQYJKoZIhvcNAQEFBQAwdjEL
-MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNV
-BAsTGVRDIFRydXN0Q2VudGVyIENsYXNzIDIgQ0ExJTAjBgNVBAMTHFRDIFRydXN0
-Q2VudGVyIENsYXNzIDIgQ0EgSUkwHhcNMDYwMTEyMTQzODQzWhcNMjUxMjMxMjI1
-OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1c3RDZW50ZXIgR21i
-SDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQTElMCMGA1UEAxMc
-VEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQAD
-ggEPADCCAQoCggEBAKuAh5uO8MN8h9foJIIRszzdQ2Lu+MNF2ujhoF/RKrLqk2jf
-tMjWQ+nEdVl//OEd+DFwIxuInie5e/060smp6RQvkL4DUsFJzfb95AhmC1eKokKg
-uNV/aVyQMrKXDcpK3EY+AlWJU+MaWss2xgdW94zPEfRMuzBwBJWl9jmM/XOBCH2J
-XjIeIqkiRUuwZi4wzJ9l/fzLganx4Duvo4bRierERXlQXa7pIXSSTYtZgo+U4+lK
-8edJsBTj9WLL1XK9H7nSn6DNqPoByNkN39r8R52zyFTfSUrxIan+GE7uSNQZu+99
-5OKdy1u2bv/jzVrndIIFuoAlOMvkaZ6vQaoahPUCAwEAAaOCATQwggEwMA8GA1Ud
-EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTjq1RMgKHbVkO3
-kUrL84J6E1wIqzCB7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRy
-dXN0Y2VudGVyLmRlL2NybC92Mi90Y19jbGFzc18yX2NhX0lJLmNybIaBn2xkYXA6
-Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBUcnVzdENlbnRlciUyMENsYXNz
-JTIwMiUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21iSCxPVT1yb290
-Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u
-TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEAjNfffu4bgBCzg/XbEeprS6iS
-GNn3Bzn1LL4GdXpoUxUc6krtXvwjshOg0wn/9vYua0Fxec3ibf2uWWuFHbhOIprt
-ZjluS5TmVfwLG4t3wVMTZonZKNaL80VKY7f9ewthXbhtvsPcW3nS7Yblok2+XnR8
-au0WOB9/WIFaGusyiC2y8zl3gK9etmF1KdsjTYjKUCjLhdLTEKJZbtOTVAB6okaV
-hgWcqRmY5TFyDADiZ9lA4CQze28suVyrZZ0srHbqNZn1l7kPJOzHdiEoZa5X6AeI
-dUpWoNIFOqTmjZKILPPy4cHGYdtBxceb9w4aUUXCYWvcZCcXjFq32nQozZfkvQ==
------END CERTIFICATE-----
-
-================================================================
-C: DE
-O: TC TrustCenter GmbH
-OU: TC TrustCenter Class 3 CA
-CN: TC TrustCenter Class 3 CA II
------BEGIN CERTIFICATE-----
-MIIEqjCCA5KgAwIBAgIOSkcAAQAC5aBd1j8AUb8wDQYJKoZIhvcNAQEFBQAwdjEL
-MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNV
-BAsTGVRDIFRydXN0Q2VudGVyIENsYXNzIDMgQ0ExJTAjBgNVBAMTHFRDIFRydXN0
-Q2VudGVyIENsYXNzIDMgQ0EgSUkwHhcNMDYwMTEyMTQ0MTU3WhcNMjUxMjMxMjI1
-OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1c3RDZW50ZXIgR21i
-SDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQTElMCMGA1UEAxMc
-VEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQAD
-ggEPADCCAQoCggEBALTgu1G7OVyLBMVMeRwjhjEQY0NVJz/GRcekPewJDRoeIMJW
-Ht4bNwcwIi9v8Qbxq63WyKthoy9DxLCyLfzDlml7forkzMA5EpBCYMnMNWju2l+Q
-Vl/NHE1bWEnrDgFPZPosPIlY2C8u4rBo6SI7dYnWRBpl8huXJh0obazovVkdKyT2
-1oQDZogkAHhg8fir/gKya/si+zXmFtGt9i4S5Po1auUZuV3bOx4a+9P/FRQI2Alq
-ukWdFHlgfa9Aigdzs5OW03Q0jTo3Kd5c7PXuLjHCINy+8U9/I1LZW+Jk2ZyqBwi1
-Rb3R0DHBq1SfqdLDYmAD8bs5SpJKPQq5ncWg/jcCAwEAAaOCATQwggEwMA8GA1Ud
-EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTUovyfs8PYA9NX
-XAek0CSnwPIA1DCB7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRy
-dXN0Y2VudGVyLmRlL2NybC92Mi90Y19jbGFzc18zX2NhX0lJLmNybIaBn2xkYXA6
-Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBUcnVzdENlbnRlciUyMENsYXNz
-JTIwMyUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21iSCxPVT1yb290
-Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u
-TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEANmDkcPcGIEPZIxpC8vijsrlN
-irTzwppVMXzEO2eatN9NDoqTSheLG43KieHPOh6sHfGcMrSOWXaiQYUlN6AT0PV8
-TtXqluJucsG7Kv5sbviRmEb8yRtXW+rIGjs/sFGYPAfaLFkB2otE6OF0/ado3VS6
-g0bsyEa1+K+XwDsJHI/OcpY9M1ZwvJbL2NV9IJqDnxrcOfHFcqMRA/07QlIp2+gB
-95tejNaNhk4Z+rwcvsUhpYeeeC422wlxo3I0+GzjBgnyXlal092Y+tTmBvTwtiBj
-S+opvaqCZh77gaqnN60TGOaSw4HBM7uIHqHn4rS9MWwOUT1v+5ZWgOI2F9Hc5A==
------END CERTIFICATE-----
-
-================================================================
-C: DE
-O: TC TrustCenter GmbH
-OU: TC TrustCenter Universal CA
-CN: TC TrustCenter Universal CA I
------BEGIN CERTIFICATE-----
-MIID3TCCAsWgAwIBAgIOHaIAAQAC7LdggHiNtgYwDQYJKoZIhvcNAQEFBQAweTEL
-MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxJDAiBgNV
-BAsTG1RDIFRydXN0Q2VudGVyIFVuaXZlcnNhbCBDQTEmMCQGA1UEAxMdVEMgVHJ1
-c3RDZW50ZXIgVW5pdmVyc2FsIENBIEkwHhcNMDYwMzIyMTU1NDI4WhcNMjUxMjMx
-MjI1OTU5WjB5MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1c3RDZW50ZXIg
-R21iSDEkMCIGA1UECxMbVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBMSYwJAYD
-VQQDEx1UQyBUcnVzdENlbnRlciBVbml2ZXJzYWwgQ0EgSTCCASIwDQYJKoZIhvcN
-AQEBBQADggEPADCCAQoCggEBAKR3I5ZEr5D0MacQ9CaHnPM42Q9e3s9B6DGtxnSR
-JJZ4Hgmgm5qVSkr1YnwCqMqs+1oEdjneX/H5s7/zA1hV0qq34wQi0fiU2iIIAI3T
-fCZdzHd55yx4Oagmcw6iXSVphU9VDprvxrlE4Vc93x9UIuVvZaozhDrzznq+VZeu
-jRIPFDPiUHDDSYcTvFHe15gSWu86gzOSBnWLknwSaHtwag+1m7Z3W0hZneTvWq3z
-wZ7U10VOylY0Ibw+F1tvdwxIAUMpsN0/lm7mlaoMwCC2/T42J5zjXM9OgdwZu5GQ
-fezmlwQek8wiSdeXhrYTCjxDI3d+8NzmzSQfO4ObNDqDNOMCAwEAAaNjMGEwHwYD
-VR0jBBgwFoAUkqR1LKSevoFE63n8isWVpesQdXMwDwYDVR0TAQH/BAUwAwEB/zAO
-BgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFJKkdSyknr6BROt5/IrFlaXrEHVzMA0G
-CSqGSIb3DQEBBQUAA4IBAQAo0uCG1eb4e/CX3CJrO5UUVg8RMKWaTzqwOuAGy2X1
-7caXJ/4l8lfmXpWMPmRgFVp/Lw0BxbFg/UU1z/CyvwbZ71q+s2IhtNerNXxTPqYn
-8aEt2hojnczd7Dwtnic0XQ/CNnm8yUpiLe1r2X1BQ3y2qsrtYbE3ghUJGooWMNjs
-ydZHcnhLEEYUjl8Or+zHL6sQ17bxbuyGssLoDZJz3KL0Dzq/YSMQiZxIQG5wALPT
-ujdEWBF6AmqI8Dc08BnprNRlc/ZpjGSUOnmFKbAWKwyCPwacx/0QK54PLLae4xW/
-2TYcuiUaUj0a7CIMHOCkoj3w6DnPgcB77V0fb8XQC9eY
------END CERTIFICATE-----
-
-================================================================
-C: DE
-ST: Baden-Wuerttemberg (BW)
-L: Stuttgart
-O: Deutscher Sparkassen Verlag GmbH
-CN: S-TRUST Authentication and Encryption Root CA 2005:PN
------BEGIN CERTIFICATE-----
-MIIEezCCA2OgAwIBAgIQNxkY5lNUfBq1uMtZWts1tzANBgkqhkiG9w0BAQUFADCB
-rjELMAkGA1UEBhMCREUxIDAeBgNVBAgTF0JhZGVuLVd1ZXJ0dGVtYmVyZyAoQlcp
-MRIwEAYDVQQHEwlTdHV0dGdhcnQxKTAnBgNVBAoTIERldXRzY2hlciBTcGFya2Fz
-c2VuIFZlcmxhZyBHbWJIMT4wPAYDVQQDEzVTLVRSVVNUIEF1dGhlbnRpY2F0aW9u
-IGFuZCBFbmNyeXB0aW9uIFJvb3QgQ0EgMjAwNTpQTjAeFw0wNTA2MjIwMDAwMDBa
-Fw0zMDA2MjEyMzU5NTlaMIGuMQswCQYDVQQGEwJERTEgMB4GA1UECBMXQmFkZW4t
-V3VlcnR0ZW1iZXJnIChCVykxEjAQBgNVBAcTCVN0dXR0Z2FydDEpMCcGA1UEChMg
-RGV1dHNjaGVyIFNwYXJrYXNzZW4gVmVybGFnIEdtYkgxPjA8BgNVBAMTNVMtVFJV
-U1QgQXV0aGVudGljYXRpb24gYW5kIEVuY3J5cHRpb24gUm9vdCBDQSAyMDA1OlBO
-MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2bVKwdMz6tNGs9HiTNL1
-toPQb9UY6ZOvJ44TzbUlNlA0EmQpoVXhOmCTnijJ4/Ob4QSwI7+Vio5bG0F/WsPo
-TUzVJBY+h0jUJ67m91MduwwA7z5hca2/OnpYH5Q9XIHV1W/fuJvS9eXLg3KSwlOy
-ggLrra1fFi2SU3bxibYs9cEv4KdKb6AwajLrmnQDaHgTncovmwsdvs91DSaXm8f1
-XgqfeN+zvOyauu9VjxuapgdjKRdZYgkqeQd3peDRF2npW932kKvimAoA0SVtnteF
-hy+S8dF2g08LOlk3KC8zpxdQ1iALCvQm+Z845y2kuJuJja2tyWp9iRe79n+Ag3rm
-7QIDAQABo4GSMIGPMBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgEG
-MCkGA1UdEQQiMCCkHjAcMRowGAYDVQQDExFTVFJvbmxpbmUxLTIwNDgtNTAdBgNV
-HQ4EFgQUD8oeXHngovMpttKFswtKtWXsa1IwHwYDVR0jBBgwFoAUD8oeXHngovMp
-ttKFswtKtWXsa1IwDQYJKoZIhvcNAQEFBQADggEBAK8B8O0ZPCjoTVy7pWMciDMD
-pwCHpB8gq9Yc4wYfl35UvbfRssnV2oDsF9eK9XvCAPbpEW+EoFolMeKJ+aQAPzFo
-LtU96G7m1R08P7K9n3frndOMusDXtk3sU5wPBG7qNWdX4wple5A64U8+wwCSersF
-iXOMy6ZNwPv2AtawB6MDwidAnwzkhYItr5pCHdDHjfhA7p0GVxzZotiAFP7hYy0y
-h9WUUpY6RsZxlj33mA6ykaqP2vROJAA5VeitF7nTNCtKqUDMFypVZUF0Qn71wK/I
-k63yGFs9iQzbRzkk+OBM8h+wPQrKBU6JIRrjKpms/H+h8Q8bHz2eBIPdltkdOpQ=
------END CERTIFICATE-----
-
-================================================================
-C: DK
-O: TDC
-CN: TDC OCES CA
------BEGIN CERTIFICATE-----
-MIIFGTCCBAGgAwIBAgIEPki9xDANBgkqhkiG9w0BAQUFADAxMQswCQYDVQQGEwJE
-SzEMMAoGA1UEChMDVERDMRQwEgYDVQQDEwtUREMgT0NFUyBDQTAeFw0wMzAyMTEw
-ODM5MzBaFw0zNzAyMTEwOTA5MzBaMDExCzAJBgNVBAYTAkRLMQwwCgYDVQQKEwNU
-REMxFDASBgNVBAMTC1REQyBPQ0VTIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
-MIIBCgKCAQEArGL2YSCyz8DGhdfjeebM7fI5kqSXLmSjhFuHnEz9pPPEXyG9VhDr
-2y5h7JNp46PMvZnDBfwGuMo2HP6QjklMxFaaL1a8z3sM8W9Hpg1DTeLpHTk0zY0s
-2RKY+ePhwUp8hjjEqcRhiNJerxomTdXkoCJHhNlktxmW/OwZ5LKXJk5KTMuPJItU
-GBxIYXvViGjaXbXqzRowwYCDdlCqT9HU3Tjw7xb04QxQBr/q+3pJoSgrHPb8FTKj
-dGqPqcNiKXEx5TukYBdedObaE+3pHx8b0bJoc8YQNHVGEBDjkAB2QMuLt0MJIf+r
-TpPGWOmlgtt3xDqZsXKVSQTwtyv6e1mO3QIDAQABo4ICNzCCAjMwDwYDVR0TAQH/
-BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwgewGA1UdIASB5DCB4TCB3gYIKoFQgSkB
-AQEwgdEwLwYIKwYBBQUHAgEWI2h0dHA6Ly93d3cuY2VydGlmaWthdC5kay9yZXBv
-c2l0b3J5MIGdBggrBgEFBQcCAjCBkDAKFgNUREMwAwIBARqBgUNlcnRpZmlrYXRl
-ciBmcmEgZGVubmUgQ0EgdWRzdGVkZXMgdW5kZXIgT0lEIDEuMi4yMDguMTY5LjEu
-MS4xLiBDZXJ0aWZpY2F0ZXMgZnJvbSB0aGlzIENBIGFyZSBpc3N1ZWQgdW5kZXIg
-T0lEIDEuMi4yMDguMTY5LjEuMS4xLjARBglghkgBhvhCAQEEBAMCAAcwgYEGA1Ud
-HwR6MHgwSKBGoESkQjBAMQswCQYDVQQGEwJESzEMMAoGA1UEChMDVERDMRQwEgYD
-VQQDEwtUREMgT0NFUyBDQTENMAsGA1UEAxMEQ1JMMTAsoCqgKIYmaHR0cDovL2Ny
-bC5vY2VzLmNlcnRpZmlrYXQuZGsvb2Nlcy5jcmwwKwYDVR0QBCQwIoAPMjAwMzAy
-MTEwODM5MzBagQ8yMDM3MDIxMTA5MDkzMFowHwYDVR0jBBgwFoAUYLWF7FZkfhIZ
-J2cdUBVLc647+RIwHQYDVR0OBBYEFGC1hexWZH4SGSdnHVAVS3OuO/kSMB0GCSqG
-SIb2fQdBAAQQMA4bCFY2LjA6NC4wAwIEkDANBgkqhkiG9w0BAQUFAAOCAQEACrom
-JkbTc6gJ82sLMJn9iuFXehHTuJTXCRBuo7E4A9G28kNBKWKnctj7fAXmMXAnVBhO
-inxO5dHKjHiIzxvTkIvmI/gLDjNDfZziChmPyQE+dF10yYscA+UYyAFMP8uXBV2Y
-caaYb7Z8vTd/vuGTJW1v8AqtFxjhA7wHKcitJuj4YfD9IQl+mo6paH1IYnK9AOoB
-mbgGglGBTvH1tJFUuSN6AJqfXY3gPGS5GhKSKseCRHI53OI8xthV9RVOyAUO28bQ
-YqbsFbS1AoLbrIyigfCbmTH1ICCoiGEKB5+U/NDXG8wuF/MEJ3Zn61SD/aSQfgY9
-BKNDLdr8C2LqL19iUw==
------END CERTIFICATE-----
-
-================================================================
-C: DK
-O: TDC Internet
-OU: TDC Internet Root CA
------BEGIN CERTIFICATE-----
-MIIEKzCCAxOgAwIBAgIEOsylTDANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJE
-SzEVMBMGA1UEChMMVERDIEludGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQg
-Um9vdCBDQTAeFw0wMTA0MDUxNjMzMTdaFw0yMTA0MDUxNzAzMTdaMEMxCzAJBgNV
-BAYTAkRLMRUwEwYDVQQKEwxUREMgSW50ZXJuZXQxHTAbBgNVBAsTFFREQyBJbnRl
-cm5ldCBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxLhA
-vJHVYx/XmaCLDEAedLdInUaMArLgJF/wGROnN4NrXceO+YQwzho7+vvOi20jxsNu
-Zp+Jpd/gQlBn+h9sHvTQBda/ytZO5GhgbEaqHF1j4QeGDmUApy6mcca8uYGoOn0a
-0vnRrEvLznWv3Hv6gXPU/Lq9QYjUdLP5Xjg6PEOo0pVOd20TDJ2PeAG3WiAfAzc1
-4izbSysseLlJ28TQx5yc5IogCSEWVmb/Bexb4/DPqyQkXsN/cHoSxNK1EKC2IeGN
-eGlVRGn1ypYcNIUXJXfi9i8nmHj9eQY6otZaQ8H/7AQ77hPv01ha/5Lr7K7a8jcD
-R0G2l8ktCkEiu7vmpwIDAQABo4IBJTCCASEwEQYJYIZIAYb4QgEBBAQDAgAHMGUG
-A1UdHwReMFwwWqBYoFakVDBSMQswCQYDVQQGEwJESzEVMBMGA1UEChMMVERDIElu
-dGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQgUm9vdCBDQTENMAsGA1UEAxME
-Q1JMMTArBgNVHRAEJDAigA8yMDAxMDQwNTE2MzMxN1qBDzIwMjEwNDA1MTcwMzE3
-WjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUbGQBx/2FbazI2p5QCIUItTxWqFAw
-HQYDVR0OBBYEFGxkAcf9hW2syNqeUAiFCLU8VqhQMAwGA1UdEwQFMAMBAf8wHQYJ
-KoZIhvZ9B0EABBAwDhsIVjUuMDo0LjADAgSQMA0GCSqGSIb3DQEBBQUAA4IBAQBO
-Q8zR3R0QGwZ/t6T609lN+yOfI1Rb5osvBCiLtSdtiaHsmGnc540mgwV5dOy0uaOX
-wTUA/RXaOYE6lTGQ3pfphqiZdwzlWqCE/xIWrG64jcN7ksKsLtB9KOy282A4aW8+
-2ARVPp7MVdK6/rtHBNcK2RYKNCn1WBPVT8+PVkuzHu7TmHnaCB4Mb7j4Fifvwm89
-9qNLPg7kbWzbO0ESm70NRyN/PErQr8Cv9u8btRXE64PECV90i9kR+8JWsTz4cMo0
-jUNAE4z9mQNUecYu6oah9jrUCbz0vGbMPVjQV0kK7iXiQe4T+Zs4NNEA9X7nlB38
-aQNiuJkFBT1reBK9sG9l
------END CERTIFICATE-----
-
-================================================================
-C: EE
-O: AS Sertifitseerimiskeskus
-CN: EE Certification Centre Root CA
-emailAddress: pki@sk.ee
------BEGIN CERTIFICATE-----
-MIIEAzCCAuugAwIBAgIQVID5oHPtPwBMyonY43HmSjANBgkqhkiG9w0BAQUFADB1
-MQswCQYDVQQGEwJFRTEiMCAGA1UECgwZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1
-czEoMCYGA1UEAwwfRUUgQ2VydGlmaWNhdGlvbiBDZW50cmUgUm9vdCBDQTEYMBYG
-CSqGSIb3DQEJARYJcGtpQHNrLmVlMCIYDzIwMTAxMDMwMTAxMDMwWhgPMjAzMDEy
-MTcyMzU5NTlaMHUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKDBlBUyBTZXJ0aWZpdHNl
-ZXJpbWlza2Vza3VzMSgwJgYDVQQDDB9FRSBDZXJ0aWZpY2F0aW9uIENlbnRyZSBS
-b290IENBMRgwFgYJKoZIhvcNAQkBFglwa2lAc2suZWUwggEiMA0GCSqGSIb3DQEB
-AQUAA4IBDwAwggEKAoIBAQDIIMDs4MVLqwd4lfNE7vsLDP90jmG7sWLqI9iroWUy
-euuOF0+W2Ap7kaJjbMeMTC55v6kF/GlclY1i+blw7cNRfdCT5mzrMEvhvH2/UpvO
-bntl8jixwKIy72KyaOBhU8E2lf/slLo2rpwcpzIP5Xy0xm90/XsY6KxX7QYgSzIw
-WFv9zajmofxwvI6Sc9uXp3whrj3B9UiHbCe9nyV0gVWw93X2PaRka9ZP585ArQ/d
-MtO8ihJTmMmJ+xAdTX7Nfh9WDSFwhfYggx/2uh8Ej+p3iDXE/+pOoYtNP2MbRMNE
-1CV2yreN1x5KZmTNXMWcg+HCCIia7E6j8T4cLNlsHaFLAgMBAAGjgYowgYcwDwYD
-VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBLyWj7qVhy/
-zQas8fElyalL1BSZMEUGA1UdJQQ+MDwGCCsGAQUFBwMCBggrBgEFBQcDAQYIKwYB
-BQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYIKwYBBQUHAwkwDQYJKoZIhvcNAQEF
-BQADggEBAHv25MANqhlHt01Xo/6tu7Fq1Q+e2+RjxY6hUFaTlrg4wCQiZrxTFGGV
-v9DHKpY5P30osxBAIWrEr7BSdxjhlthWXePdNl4dp1BUoMUq5KqMlIpPnTX/dqQG
-E5Gion0ARD9V04I8GtVbvFZMIi5GQ4okQC3zErg7cBqklrkar4dBGmoYDQZPxz5u
-uSlNDUmJEYcyW+ZLBMjkXOZ0c5RdFpgTlf7727FE5TpwrDdr5rMzcijJs1eg9gIW
-iAYLtqZLICjU3j2LrTcFU3T+bsy8QxdxXvnFzBqpYe73dgzzcvRyrc9yAjYHR8/v
-GVCJYMzpJJUPwssd8m92kMfMdcGWxZ0=
------END CERTIFICATE-----
-
-================================================================
-C: ES
-CN: Autoridad de Certificacion Firmaprofesional CIF A62634068
------BEGIN CERTIFICATE-----
-MIIGFDCCA/ygAwIBAgIIU+w77vuySF8wDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UE
-BhMCRVMxQjBABgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1h
-cHJvZmVzaW9uYWwgQ0lGIEE2MjYzNDA2ODAeFw0wOTA1MjAwODM4MTVaFw0zMDEy
-MzEwODM4MTVaMFExCzAJBgNVBAYTAkVTMUIwQAYDVQQDDDlBdXRvcmlkYWQgZGUg
-Q2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBBNjI2MzQwNjgwggIi
-MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKlmuO6vj78aI14H9M2uDDUtd9
-thDIAl6zQyrET2qyyhxdKJp4ERppWVevtSBC5IsP5t9bpgOSL/UR5GLXMnE42QQM
-cas9UX4PB99jBVzpv5RvwSmCwLTaUbDBPLutN0pcyvFLNg4kq7/DhHf9qFD0sefG
-L9ItWY16Ck6WaVICqjaY7Pz6FIMMNx/Jkjd/14Et5cS54D40/mf0PmbR0/RAz15i
-NA9wBj4gGFrO93IbJWyTdBSTo3OxDqqHECNZXyAFGUftaI6SEspd/NYrspI8IM/h
-X68gvqB2f3bl7BqGYTM+53u0P6APjqK5am+5hyZvQWyIplD9amML9ZMWGxmPsu2b
-m8mQ9QEM3xk9Dz44I8kvjwzRAv4bVdZO0I08r0+k8/6vKtMFnXkIoctXMbScyJCy
-Z/QYFpM6/EfY0XiWMR+6KwxfXZmtY4laJCB22N/9q06mIqqdXuYnin1oKaPnirja
-EbsXLZmdEyRG98Xi2J+Of8ePdG1asuhy9azuJBCtLxTa/y2aRnFHvkLfuwHb9H/T
-KI8xWVvTyQKmtFLKbpf7Q8UIJm+K9Lv9nyiqDdVF8xM6HdjAeI9BZzwelGSuewvF
-6NkBiDkal4ZkQdU7hwxu+g/GvUgUvzlN1J5Bto+WHWOWk9mVBngxaJ43BjuAiUVh
-OSPHG0SjFeUc+JIwuwIDAQABo4HvMIHsMBIGA1UdEwEB/wQIMAYBAf8CAQEwDgYD
-VR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRlzeurNR4APn7VdMActHNHDhpkLzCBpgYD
-VR0gBIGeMIGbMIGYBgRVHSAAMIGPMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmZp
-cm1hcHJvZmVzaW9uYWwuY29tL2NwczBcBggrBgEFBQcCAjBQHk4AUABhAHMAZQBv
-ACAAZABlACAAbABhACAAQgBvAG4AYQBuAG8AdgBhACAANAA3ACAAQgBhAHIAYwBl
-AGwAbwBuAGEAIAAwADgAMAAxADcwDQYJKoZIhvcNAQEFBQADggIBABd9oPm03cXF
-661LJLWhAqvdpYhKsg9VSytXjDvlMd3+xDLx51tkljYyGOylMnfX40S2wBEqgLk9
-am58m9Ot/MPWo+ZkKXzR4Tgegiv/J2Wv+xYVxC5xhOW1//qkR71kMrv2JYSiJ0L1
-ILDCExARzRAVukKQKtJE4ZYm6zFIEv0q2skGz3QeqUvVhyj5eTSSPi5E6PaPT481
-PyWzOdxjKpBrIF/EUhJOlywqrJ2X3kjyo2bbwtKDlaZmp54lD+kLM5FlClrD2VQS
-3a/DTg4fJl4N3LON7NWBcN7STyQF82xO9UxJZo3R/9ILJUFI/lGExkKvgATP0H5k
-SeTy36LssUzAKh3ntLFlosS88Zj0qnAHY7S42jtM+kAiMFsRpvAFDsYCA0irhpuF
-3dvd6qJ2gHN99ZwExEWN57kci57q13XRcrHedUTnQn3iV2t93Jm8PYMo6oCTjcVM
-ZcFwgbg4/EMxsvYDNEeyrPsiBsse3RdHHF9mudMaotoRsaS8I8nkvof/uZS2+F0g
-StRf571oe2XyFR7SOqkt6dhrJKyXWERHrVkY8SFlcN7ONGCoQPHzPKTDKCOM/icz
-Q0CgFzzr6juwcqajuUpLXhZI9LK8yIySxZ2frHI2vDSANGupi5LAuBft7HZT9SQB
-jLMi6Et8Vcad+qMUu2WFbm5PEn4KPJ2V
------END CERTIFICATE-----
-
-================================================================
-C: ES
-L: C/ Muntaner 244 Barcelona
-CN: Autoridad de Certificacion Firmaprofesional CIF A62634068
-emailAddress: ca@firmaprofesional.com
------BEGIN CERTIFICATE-----
-MIIEVzCCAz+gAwIBAgIBATANBgkqhkiG9w0BAQUFADCBnTELMAkGA1UEBhMCRVMx
-IjAgBgNVBAcTGUMvIE11bnRhbmVyIDI0NCBCYXJjZWxvbmExQjBABgNVBAMTOUF1
-dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2
-MjYzNDA2ODEmMCQGCSqGSIb3DQEJARYXY2FAZmlybWFwcm9mZXNpb25hbC5jb20w
-HhcNMDExMDI0MjIwMDAwWhcNMTMxMDI0MjIwMDAwWjCBnTELMAkGA1UEBhMCRVMx
-IjAgBgNVBAcTGUMvIE11bnRhbmVyIDI0NCBCYXJjZWxvbmExQjBABgNVBAMTOUF1
-dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2
-MjYzNDA2ODEmMCQGCSqGSIb3DQEJARYXY2FAZmlybWFwcm9mZXNpb25hbC5jb20w
-ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDnIwNvbyOlXnjOlSztlB5u
-Cp4Bx+ow0Syd3Tfom5h5VtP8c9/Qit5Vj1H5WuretXDE7aTt/6MNbg9kUDGvASdY
-rv5sp0ovFy3Tc9UTHI9ZpTQsHVQERc1ouKDAA6XPhUJHlShbz++AbOCQl4oBPB3z
-hxAwJkh91/zpnZFx/0GaqUC1N5wpIE8fUuOgfRNtVLcK3ulqTgesrBlf3H5idPay
-BQC6haD9HThuy1q7hryUZzM1gywfI834yJFxzJeL764P3CkDG8A563DtwW4O2GcL
-iam8NeTvtjS0pbbELaW+0MOUJEjb35bTALVmGotmBQ/dPz/LP6pemkr4tErvlTcb
-AgMBAAGjgZ8wgZwwKgYDVR0RBCMwIYYfaHR0cDovL3d3dy5maXJtYXByb2Zlc2lv
-bmFsLmNvbTASBgNVHRMBAf8ECDAGAQH/AgEBMCsGA1UdEAQkMCKADzIwMDExMDI0
-MjIwMDAwWoEPMjAxMzEwMjQyMjAwMDBaMA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4E
-FgQUMwugZtHq2s7eYpMEKFK1FH84aLcwDQYJKoZIhvcNAQEFBQADggEBAEdz/o0n
-VPD11HecJ3lXV7cVVuzH2Fi3AQL0M+2TUIiefEaxvT8Ub/GzR0iLjJcG1+p+o1wq
-u00vR+L4OQbJnC4xGgN49Lw4xiKLMzHwFgQEffl25EvXwOaD7FnMP97/T2u3Z36m
-hoEyIwOdyPdfwUpgpZKpsaSgYMN4h7Mi8yrrW6ntBas3D7Hi05V2Y1Z0jFhyGzfl
-ZKG+TQyTmAyX9odtsz/ny4Cm7YjHX1BiAuiZdBbQ5rQ58SfLyEDW44YQqSMSkuBp
-QWOnryULwMWSyx6Yo1q6xTMPoJcB3X/ge9YGVM+h4k0460tQtcsm9MracEpqoeJ5
-quGnM/b9Sh/22WA=
------END CERTIFICATE-----
-
-================================================================
-C: ES
-O: Agencia Catalana de Certificacio (NIF Q-0801176-I)
-OU: Serveis Publics de Certificacio
-OU: Vegeu https://www.catcert.net/verarrel (c)03
-OU: Jerarquia Entitats de Certificacio Catalanes
-CN: EC-ACC
------BEGIN CERTIFICATE-----
-MIIFVjCCBD6gAwIBAgIQ7is969Qh3hSoYqwE893EATANBgkqhkiG9w0BAQUFADCB
-8zELMAkGA1UEBhMCRVMxOzA5BgNVBAoTMkFnZW5jaWEgQ2F0YWxhbmEgZGUgQ2Vy
-dGlmaWNhY2lvIChOSUYgUS0wODAxMTc2LUkpMSgwJgYDVQQLEx9TZXJ2ZWlzIFB1
-YmxpY3MgZGUgQ2VydGlmaWNhY2lvMTUwMwYDVQQLEyxWZWdldSBodHRwczovL3d3
-dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbCAoYykwMzE1MDMGA1UECxMsSmVyYXJxdWlh
-IEVudGl0YXRzIGRlIENlcnRpZmljYWNpbyBDYXRhbGFuZXMxDzANBgNVBAMTBkVD
-LUFDQzAeFw0wMzAxMDcyMzAwMDBaFw0zMTAxMDcyMjU5NTlaMIHzMQswCQYDVQQG
-EwJFUzE7MDkGA1UEChMyQWdlbmNpYSBDYXRhbGFuYSBkZSBDZXJ0aWZpY2FjaW8g
-KE5JRiBRLTA4MDExNzYtSSkxKDAmBgNVBAsTH1NlcnZlaXMgUHVibGljcyBkZSBD
-ZXJ0aWZpY2FjaW8xNTAzBgNVBAsTLFZlZ2V1IGh0dHBzOi8vd3d3LmNhdGNlcnQu
-bmV0L3ZlcmFycmVsIChjKTAzMTUwMwYDVQQLEyxKZXJhcnF1aWEgRW50aXRhdHMg
-ZGUgQ2VydGlmaWNhY2lvIENhdGFsYW5lczEPMA0GA1UEAxMGRUMtQUNDMIIBIjAN
-BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsyLHT+KXQpWIR4NA9h0X84NzJB5R
-85iKw5K4/0CQBXCHYMkAqbWUZRkiFRfCQ2xmRJoNBD45b6VLeqpjt4pEndljkYRm
-4CgPukLjbo73FCeTae6RDqNfDrHrZqJyTxIThmV6PttPB/SnCWDaOkKZx7J/sxaV
-HMf5NLWUhdWZXqBIoH7nF2W4onW4HvPlQn2v7fOKSGRdghST2MDk/7NQcvJ29rNd
-QlB50JQ+awwAvthrDk4q7D7SzIKiGGUzE3eeml0aE9jD2z3Il3rucO2n5nzbcc8t
-lGLfbdb1OL4/pYUKGbio2Al1QnDE6u/LDsg0qBIimAy4E5S2S+zw0JDnJwIDAQAB
-o4HjMIHgMB0GA1UdEQQWMBSBEmVjX2FjY0BjYXRjZXJ0Lm5ldDAPBgNVHRMBAf8E
-BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUoMOLRKo3pUW/l4Ba0fF4
-opvpXY0wfwYDVR0gBHgwdjB0BgsrBgEEAfV4AQMBCjBlMCwGCCsGAQUFBwIBFiBo
-dHRwczovL3d3dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbDA1BggrBgEFBQcCAjApGidW
-ZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbCAwDQYJKoZIhvcN
-AQEFBQADggEBAKBIW4IB9k1IuDlVNZyAelOZ1Vr/sXE7zDkJlF7W2u++AVtd0x7Y
-/X1PzaBB4DSTv8vihpw3kpBWHNzrKQXlxJ7HNd+KDM3FIUPpqojlNcAZQmNaAl6k
-SBg6hW/cnbw/nZzBh7h6YQjpdwt/cKt63dmXLGQehb+8dJahw3oS7AwaboMMPOhy
-Rp/7SNVel+axofjk70YllJyJ22k4vuxcDlbHZVHlUIiIv0LVKz3l+bqeLrPK9HOS
-Agu+TGbrIP65y7WZf+a2E/rKS03Z7lNGBjvGTq2TWoF+bCpLagVFjPIhpDGQh2xl
-nJ2lYJU6Un/10asIbvPuW/mIPX64b24D5EI=
------END CERTIFICATE-----
-
-================================================================
-C: ES
-O: Generalitat Valenciana
-OU: PKIGVA
-CN: Root CA Generalitat Valenciana
------BEGIN CERTIFICATE-----
-MIIGizCCBXOgAwIBAgIEO0XlaDANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJF
-UzEfMB0GA1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UECxMGUEtJ
-R1ZBMScwJQYDVQQDEx5Sb290IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmEwHhcN
-MDEwNzA2MTYyMjQ3WhcNMjEwNzAxMTUyMjQ3WjBoMQswCQYDVQQGEwJFUzEfMB0G
-A1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UECxMGUEtJR1ZBMScw
-JQYDVQQDEx5Sb290IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmEwggEiMA0GCSqG
-SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDGKqtXETcvIorKA3Qdyu0togu8M1JAJke+
-WmmmO3I2F0zo37i7L3bhQEZ0ZQKQUgi0/6iMweDHiVYQOTPvaLRfX9ptI6GJXiKj
-SgbwJ/BXufjpTjJ3Cj9BZPPrZe52/lSqfR0grvPXdMIKX/UIKFIIzFVd0g/bmoGl
-u6GzwZTNVOAydTGRGmKy3nXiz0+J2ZGQD0EbtFpKd71ng+CT516nDOeB0/RSrFOy
-A8dEJvt55cs0YFAQexvba9dHq198aMpunUEDEO5rmXteJajCq+TA81yc477OMUxk
-Hl6AovWDfgzWyoxVjr7gvkkHD6MkQXpYHYTqWBLI4bft75PelAgxAgMBAAGjggM7
-MIIDNzAyBggrBgEFBQcBAQQmMCQwIgYIKwYBBQUHMAGGFmh0dHA6Ly9vY3NwLnBr
-aS5ndmEuZXMwEgYDVR0TAQH/BAgwBgEB/wIBAjCCAjQGA1UdIASCAiswggInMIIC
-IwYKKwYBBAG/VQIBADCCAhMwggHoBggrBgEFBQcCAjCCAdoeggHWAEEAdQB0AG8A
-cgBpAGQAYQBkACAAZABlACAAQwBlAHIAdABpAGYAaQBjAGEAYwBpAPMAbgAgAFIA
-YQDtAHoAIABkAGUAIABsAGEAIABHAGUAbgBlAHIAYQBsAGkAdABhAHQAIABWAGEA
-bABlAG4AYwBpAGEAbgBhAC4ADQAKAEwAYQAgAEQAZQBjAGwAYQByAGEAYwBpAPMA
-bgAgAGQAZQAgAFAAcgDhAGMAdABpAGMAYQBzACAAZABlACAAQwBlAHIAdABpAGYA
-aQBjAGEAYwBpAPMAbgAgAHEAdQBlACAAcgBpAGcAZQAgAGUAbAAgAGYAdQBuAGMA
-aQBvAG4AYQBtAGkAZQBuAHQAbwAgAGQAZQAgAGwAYQAgAHAAcgBlAHMAZQBuAHQA
-ZQAgAEEAdQB0AG8AcgBpAGQAYQBkACAAZABlACAAQwBlAHIAdABpAGYAaQBjAGEA
-YwBpAPMAbgAgAHMAZQAgAGUAbgBjAHUAZQBuAHQAcgBhACAAZQBuACAAbABhACAA
-ZABpAHIAZQBjAGMAaQDzAG4AIAB3AGUAYgAgAGgAdAB0AHAAOgAvAC8AdwB3AHcA
-LgBwAGsAaQAuAGcAdgBhAC4AZQBzAC8AYwBwAHMwJQYIKwYBBQUHAgEWGWh0dHA6
-Ly93d3cucGtpLmd2YS5lcy9jcHMwHQYDVR0OBBYEFHs100DSHHgZZu90ECjcPk+y
-eAT8MIGVBgNVHSMEgY0wgYqAFHs100DSHHgZZu90ECjcPk+yeAT8oWykajBoMQsw
-CQYDVQQGEwJFUzEfMB0GA1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0G
-A1UECxMGUEtJR1ZBMScwJQYDVQQDEx5Sb290IENBIEdlbmVyYWxpdGF0IFZhbGVu
-Y2lhbmGCBDtF5WgwDQYJKoZIhvcNAQEFBQADggEBACRhTvW1yEICKrNcda3Fbcrn
-lD+laJWIwVTAEGmiEi8YPyVQqHxK6sYJ2fR1xkDar1CdPaUWu20xxsdzCkj+IHLt
-b8zog2EWRpABlUt9jppSCS/2bxzkoXHPjCpaF3ODR00PNvsETUlR4hTJZGH71BTg
-9J63NI8KJr2XXPR5OkowGcytT6CYirQxlyric21+eLj4iIlPsSKRZEv1UN4D2+XF
-ducTZnV+ZfsBn5OHiJ35Rld8TWCvmHMTI6QgkYH60GFmuH3Rr9ZvHmw96RH9qfmC
-IoaZM3Fa6hlXPZHNqcCjbgcTpsnt+GijnsNacgmHKNHEc8RzGF9QdRYxn7fofMM=
------END CERTIFICATE-----
-
-================================================================
-C: ES
-O: IZENPE S.A.
-CN: Izenpe.com
------BEGIN CERTIFICATE-----
-MIIF8TCCA9mgAwIBAgIQALC3WhZIX7/hy/WL1xnmfTANBgkqhkiG9w0BAQsFADA4
-MQswCQYDVQQGEwJFUzEUMBIGA1UECgwLSVpFTlBFIFMuQS4xEzARBgNVBAMMCkl6
-ZW5wZS5jb20wHhcNMDcxMjEzMTMwODI4WhcNMzcxMjEzMDgyNzI1WjA4MQswCQYD
-VQQGEwJFUzEUMBIGA1UECgwLSVpFTlBFIFMuQS4xEzARBgNVBAMMCkl6ZW5wZS5j
-b20wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDJ03rKDx6sp4boFmVq
-scIbRTJxldn+EFvMr+eleQGPicPK8lVx93e+d5TzcqQsRNiekpsUOqHnJJAKClaO
-xdgmlOHZSOEtPtoKct2jmRXagaKH9HtuJneJWK3W6wyyQXpzbm3benhB6QiIEn6H
-LmYRY2xU+zydcsC8Lv/Ct90NduM61/e0aL6i9eOBbsFGb12N4E3GVFWJGjMxCrFX
-uaOKmMPsOzTFlUFpfnXCPCDFYbpRR6AgkJOhkEvzTnyFRVSa0QUmQbC1TR0zvsQD
-yCV8wXDbO/QJLVQnSKwv4cSsPsjLkkxTOTcj7NMB+eAJRE1NZMDhDVqHIrytG6P+
-JrUV86f8hBnp7KGItERphIPzidF0BqnMC9bC3ieFUCbKF7jJeodWLBoBHmy+E60Q
-rLUk9TiRodZL2vG70t5HtfG8gfZZa88ZU+mNFctKy6lvROUbQc/hhqfK0GqfvEyN
-BjNaooXlkDWgYlwWTvDjovoDGrQscbNYLN57C9saD+veIR8GdwYDsMnvmfzAuU8L
-hij+0rnq49qlw0dpEuDb8PYZi+17cNcC1u2HGCgsBCRMd+RIihrGO5rUD8r6ddIB
-QFqNeb+Lz0vPqhbBleStTIo+F5HUsWLlguWABKQDfo2/2n+iD5dPDNMN+9fR5XJ+
-HMh3/1uaD7euBUbl8agW7EekFwIDAQABo4H2MIHzMIGwBgNVHREEgagwgaWBD2lu
-Zm9AaXplbnBlLmNvbaSBkTCBjjFHMEUGA1UECgw+SVpFTlBFIFMuQS4gLSBDSUYg
-QTAxMzM3MjYwLVJNZXJjLlZpdG9yaWEtR2FzdGVpeiBUMTA1NSBGNjIgUzgxQzBB
-BgNVBAkMOkF2ZGEgZGVsIE1lZGl0ZXJyYW5lbyBFdG9yYmlkZWEgMTQgLSAwMTAx
-MCBWaXRvcmlhLUdhc3RlaXowDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
-AQYwHQYDVR0OBBYEFB0cZQ6o8iV7tJHP5LGx5r1VdGwFMA0GCSqGSIb3DQEBCwUA
-A4ICAQB4pgwWSp9MiDrAyw6lFn2fuUhfGI8NYjb2zRlrrKvV9pF9rnHzP7MOeIWb
-laQnIUdCSnxIOvVFfLMMjlF4rJUT3sb9fbgakEyrkgPH7UIBzg/YsfqikuFgba56
-awmqxinuaElnMIAkejEWOVt+8Rwu3WwJrfIxwYJOubv5vr8qhT/AQKM6WfxZSzwo
-JNu0FXWuDYi6LnPAvViH5ULy617uHjAimcs30cQhbIHsvm0m5hzkQiCeR7Csg1lw
-LDXWrzY0tM07+DKo7+N4ifuNRSzanLh+QBxh5z6ikixL8s36mLYp//Pye6kfLqCT
-VyvehQP5aTfLnnhqBbTFMXiJ7HqnheG5ezzevh55hM6fcA5ZwjUukCox2eRFekGk
-LhObNA5me0mrZJfQRsN5nXJQY6aYWwa9SG3YOYNw6DXwBdGqvOPbyALqfP2C2sJb
-UjWumDqtujWTI6cfSN01RpiyEGjkpTHCClguGYEQyVB1/OpaFs4R1+7vUIgtYf8/
-QnMFlEPVjjxOAToZpR9GTnfQXeWBIiGH/pR9hNiTrdZoQ0iy2+tzJOeRf1SktoA+
-naM8THLCV8Sg1Mw4J87VBp6iSNnpn86CcDaTmjvfliHjWbcM2pE38P1ZWrOZyGls
-QyYBNWNgVYkDOnXYukrZVP/u3oDYLdE41V4tC5h9Pmzb/CaIxw==
------END CERTIFICATE-----
-
-================================================================
-C: EU
-L: Madrid (see current address at www.camerfirma.com/address)
-serialNumber: A82743287
-O: AC Camerfirma S.A.
-CN: Chambers of Commerce Root - 2008
------BEGIN CERTIFICATE-----
-MIIHTzCCBTegAwIBAgIJAKPaQn6ksa7aMA0GCSqGSIb3DQEBBQUAMIGuMQswCQYD
-VQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0
-IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3
-MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xKTAnBgNVBAMTIENoYW1iZXJz
-IG9mIENvbW1lcmNlIFJvb3QgLSAyMDA4MB4XDTA4MDgwMTEyMjk1MFoXDTM4MDcz
-MTEyMjk1MFowga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNlZSBj
-dXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29tL2FkZHJlc3MpMRIw
-EAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVyZmlybWEgUy5BLjEp
-MCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDgwggIiMA0G
-CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCvAMtwNyuAWko6bHiUfaN/Gh/2NdW9
-28sNRHI+JrKQUrpjOyhYb6WzbZSm891kDFX29ufyIiKAXuFixrYp4YFs8r/lfTJq
-VKAyGVn+H4vXPWCGhSRv4xGzdz4gljUha7MI2XAuZPeEklPWDrCQiorjh40G072Q
-DuKZoRuGDtqaCrsLYVAGUvGef3bsyw/QHg3PmTA9HMRFEFis1tPo1+XqxQEHd9ZR
-5gN/ikilTWh1uem8nk4ZcfUyS5xtYBkL+8ydddy/Js2Pk3g5eXNeJQ7KXOt3EgfL
-ZEFHcpOrUMPrCXZkNNI5t3YRCQ12RcSprj1qr7V9ZS+UWBDsXHyvfuK2GNnQm05a
-Sd+pZgvMPMZ4fKecHePOjlO+Bd5gD2vlGts/4+EhySnB8esHnFIbAURRPHsl18Tl
-UlRdJQfKFiC4reRB7noI/plvg6aRArBsNlVq5331lubKgdaX8ZSD6e2wsWsSaR6s
-+12pxZjptFtYer49okQ6Y1nUCyXeG0+95QGezdIp1Z8XGQpvvwyQ0wlf2eOKNcx5
-Wk0ZN5K3xMGtr/R5JJqyAQuxr1yW84Ay+1w9mPGgP0revq+ULtlVmhduYJ1jbLhj
-ya6BXBg14JC7vjxPNyK5fuvPnnchpj04gftI2jE9K+OJ9dC1vX7gUMQSibMjmhAx
-hduub+84Mxh2EQIDAQABo4IBbDCCAWgwEgYDVR0TAQH/BAgwBgEB/wIBDDAdBgNV
-HQ4EFgQU+SSsD7K1+HnA+mCIG8TZTQKeFxkwgeMGA1UdIwSB2zCB2IAU+SSsD7K1
-+HnA+mCIG8TZTQKeFxmhgbSkgbEwga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpN
-YWRyaWQgKHNlZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29t
-L2FkZHJlc3MpMRIwEAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVy
-ZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAt
-IDIwMDiCCQCj2kJ+pLGu2jAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRV
-HSAAMCowKAYIKwYBBQUHAgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20w
-DQYJKoZIhvcNAQEFBQADggIBAJASryI1wqM58C7e6bXpeHxIvj99RZJe6dqxGfwW
-PJ+0W2aeaufDuV2I6A+tzyMP3iU6XsxPpcG1Lawk0lgH3qLPaYRgM+gQDROpI9CF
-5Y57pp49chNyM/WqfcZjHwj0/gF/JM8rLFQJ3uIrbZLGOU8W6jx+ekbURWpGqOt1
-glanq6B8aBMz9p0w8G8nOSQjKpD9kCk18pPfNKXG9/jvjA9iSnyu0/VU+I22mlaH
-FoI6M6taIgj3grrqLuBHmrS1RaMFO9ncLkVAO+rcf+g769HsJtg1pDDFOqxXnrN2
-pSB7+R5KBWIBpih1YJeSDW4+TTdDDZIVnBgizVGZoCkaPF+KMjNbMMeJL0eYD6MD
-xvbxrN8y8NmBGuScvfaAFPDRLLmF9dijscilIeUcE5fuDr3fKanvNFNb0+RqE4QG
-tjICxFKuItLcsiFCGtpA8CnJ7AoMXOLQusxI0zcKzBIKinmwPQN/aUv0NCB9szTq
-jktk9T79syNnFQ0EuPAtwQlRPLJsFfClI9eDdOTlLsn+mCdCxqvGnrDQWzilm1De
-fhiYtUU79nm06PcaewaD+9CL2rvHvRirCG88gGtAPxkZumWK5r7VXNM21+9AUiRg
-OGcEMeyP84LG3rlV8zsxkVrctQgVrXYlCg17LofiDKYGvCYQbTed7N14jHyAxfDZ
-d0jQ
------END CERTIFICATE-----
-
-================================================================
-C: EU
-L: Madrid (see current address at www.camerfirma.com/address)
-serialNumber: A82743287
-O: AC Camerfirma S.A.
-CN: Global Chambersign Root - 2008
------BEGIN CERTIFICATE-----
-MIIHSTCCBTGgAwIBAgIJAMnN0+nVfSPOMA0GCSqGSIb3DQEBBQUAMIGsMQswCQYD
-VQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0
-IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3
-MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAlBgNVBAMTHkdsb2JhbCBD
-aGFtYmVyc2lnbiBSb290IC0gMjAwODAeFw0wODA4MDExMjMxNDBaFw0zODA3MzEx
-MjMxNDBaMIGsMQswCQYDVQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUgY3Vy
-cmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAG
-A1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAl
-BgNVBAMTHkdsb2JhbCBDaGFtYmVyc2lnbiBSb290IC0gMjAwODCCAiIwDQYJKoZI
-hvcNAQEBBQADggIPADCCAgoCggIBAMDfVtPkOpt2RbQT2//BthmLN0EYlVJH6xed
-KYiONWwGMi5HYvNJBL99RDaxccy9Wglz1dmFRP+RVyXfXjaOcNFccUMd2drvXNL7
-G706tcuto8xEpw2uIRU/uXpbknXYpBI4iRmKt4DS4jJvVpyR1ogQC7N0ZJJ0YPP2
-zxhPYLIj0Mc7zmFLmY/CDNBAspjcDahOo7kKrmCgrUVSY7pmvWjg+b4aqIG7HkF4
-ddPB/gBVsIdU6CeQNR1MM62X/JcumIS/LMmjv9GYERTtY/jKmIhYF5ntRQOXfjyG
-HoiMvvKRhI9lNNgATH23MRdaKXoKGCQwoze1eqkBfSbW+Q6OWfH9GzO1KTsXO0G2
-Id3UwD2ln58fQ1DJu7xsepeY7s2MH/ucUa6LcL0nn3HAa6x9kGbo1106DbDVwo3V
-yJ2dwW3Q0L9R5OP4wzg2rtandeavhENdk5IMagfeOx2YItaswTXbo6Al/3K1dh3e
-beksZixShNBFks4c5eUzHdwHU1SjqoI7mjcv3N2gZOnm3b2u/GSFHTynyQbehP9r
-6GsaPMWis0L7iwk+XwhSx2LE1AVxv8Rk5Pihg+g+EpuoHtQ2TS9x9o0o9oOpE9Jh
-wZG7SMA0j0GMS0zbaRL/UJScIINZc+18ofLx/d33SdNDWKBWY8o9PeU1VlnpDsog
-zCtLkykPAgMBAAGjggFqMIIBZjASBgNVHRMBAf8ECDAGAQH/AgEMMB0GA1UdDgQW
-BBS5CcqcHtvTbDprru1U8VuTBjUuXjCB4QYDVR0jBIHZMIHWgBS5CcqcHtvTbDpr
-ru1U8VuTBjUuXqGBsqSBrzCBrDELMAkGA1UEBhMCRVUxQzBBBgNVBAcTOk1hZHJp
-ZCAoc2VlIGN1cnJlbnQgYWRkcmVzcyBhdCB3d3cuY2FtZXJmaXJtYS5jb20vYWRk
-cmVzcykxEjAQBgNVBAUTCUE4Mjc0MzI4NzEbMBkGA1UEChMSQUMgQ2FtZXJmaXJt
-YSBTLkEuMScwJQYDVQQDEx5HbG9iYWwgQ2hhbWJlcnNpZ24gUm9vdCAtIDIwMDiC
-CQDJzdPp1X0jzjAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCow
-KAYIKwYBBQUHAgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZI
-hvcNAQEFBQADggIBAICIf3DekijZBZRG/5BXqfEv3xoNa/p8DhxJJHkn2EaqbylZ
-UohwEurdPfWbU1Rv4WCiqAm57OtZfMY18dwY6fFn5a+6ReAJ3spED8IXDneRRXoz
-X1+WLGiLwUePmJs9wOzL9dWCkoQ10b42OFZyMVtHLaoXpGNR6woBrX/sdZ7LoR/x
-fxKxueRkf2fWIyr0uDldmOghp+G9PUIadJpwr2hsUF1Jz//7Dl3mLEfXgTpZALVz
-a2Mg9jFFCDkO9HB+QHBaP9BrQql0PSgvAm11cpUJjUhjxsYjV5KTXjXBjfkK9yyd
-Yhz2rXzdpjEetrHHfoUm+qRqtdpjMNHvkzeyZi99Bffnt0uYlDXA2TopwZ2yUDMd
-SqlapskD7+3056huirRXhOukP9DuqqqHW2Pok+JrqNS4cnhrG+055F3Lm6qH1U9O
-AP7Zap88MQ8oAgF9mOinsKJknnn4SPIVqczmyETrP3iZ8ntxPjzxmKfFGBI/5rso
-M0LpRQp8bfKGeS/Fghl9CYl8slR2iK7ewfPM4W7bMdaTrpmg7yVqc5iJWzouE4ge
-v8CSlDQb4ye3ix5vQv/n6TebUB0tovkC7stYWDpxvGjjqsGvHCgfotwjZT+B6q6Z
-09gwzxMNTxXJhLynSC34MCN32EZLeW32jO06f2ARePTpm67VVMB0gNELQp/B
------END CERTIFICATE-----
-
-================================================================
-C: EU
-O: AC Camerfirma SA CIF A82743287
-OU: http://www.chambersign.org
-CN: Chambers of Commerce Root
------BEGIN CERTIFICATE-----
-MIIEvTCCA6WgAwIBAgIBADANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJFVTEn
-MCUGA1UEChMeQUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQL
-ExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEiMCAGA1UEAxMZQ2hhbWJlcnMg
-b2YgQ29tbWVyY2UgUm9vdDAeFw0wMzA5MzAxNjEzNDNaFw0zNzA5MzAxNjEzNDRa
-MH8xCzAJBgNVBAYTAkVVMScwJQYDVQQKEx5BQyBDYW1lcmZpcm1hIFNBIENJRiBB
-ODI3NDMyODcxIzAhBgNVBAsTGmh0dHA6Ly93d3cuY2hhbWJlcnNpZ24ub3JnMSIw
-IAYDVQQDExlDaGFtYmVycyBvZiBDb21tZXJjZSBSb290MIIBIDANBgkqhkiG9w0B
-AQEFAAOCAQ0AMIIBCAKCAQEAtzZV5aVdGDDg2olUkfzIx1L4L1DZ77F1c2VHfRtb
-unXF/KGIJPov7coISjlUxFF6tdpg6jg8gbLL8bvZkSM/SAFwdakFKq0fcfPJVD0d
-BmpAPrMMhe5cG3nCYsS4No41XQEMIwRHNaqbYE6gZj3LJgqcQKH0XZi/caulAGgq
-7YN6D6IUtdQis4CwPAxaUWktWBiP7Zme8a7ileb2R6jWDA+wWFjbw2Y3npuRVDM3
-0pQcakjJyfKl2qUMI/cjDpwyVV5xnIQFUZot/eZOKjRa3spAN2cMVCFVd9oKDMyX
-roDclDZK9D7ONhMeU+SsTjoF7Nuucpw4i9A5O4kKPnf+dQIBA6OCAUQwggFAMBIG
-A1UdEwEB/wQIMAYBAf8CAQwwPAYDVR0fBDUwMzAxoC+gLYYraHR0cDovL2NybC5j
-aGFtYmVyc2lnbi5vcmcvY2hhbWJlcnNyb290LmNybDAdBgNVHQ4EFgQU45T1sU3p
-26EpW1eLTXYGduHRooowDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIA
-BzAnBgNVHREEIDAegRxjaGFtYmVyc3Jvb3RAY2hhbWJlcnNpZ24ub3JnMCcGA1Ud
-EgQgMB6BHGNoYW1iZXJzcm9vdEBjaGFtYmVyc2lnbi5vcmcwWAYDVR0gBFEwTzBN
-BgsrBgEEAYGHLgoDATA+MDwGCCsGAQUFBwIBFjBodHRwOi8vY3BzLmNoYW1iZXJz
-aWduLm9yZy9jcHMvY2hhbWJlcnNyb290Lmh0bWwwDQYJKoZIhvcNAQEFBQADggEB
-AAxBl8IahsAifJ/7kPMa0QOx7xP5IV8EnNrJpY0nbJaHkb5BkAFyk+cefV/2icZd
-p0AJPaxJRUXcLo0waLIJuvvDL8y6C98/d3tGfToSJI6WjzwFCm/SlCgdbQzALogi
-1djPHRPH8EjX1wWnz8dHnjs8NMiAT9QUu/wNUPf6s+xCX6ndbcj0dc97wXImsQEc
-XCz9ek60AcUFV7nnPKoF2YjpB0ZBzu9Bga5Y34OirsrXdx/nADydb47kMgkdTXg0
-eDQ8lJsm7U9xxhl6vSAiSFr+S30Dt+dYvsYyTnQeaN2oaFuzPu5ifdmA6Ap1erfu
-tGWaIZDgqtCYvDi1czyL+Nw=
------END CERTIFICATE-----
-
-================================================================
-C: EU
-O: AC Camerfirma SA CIF A82743287
-OU: http://www.chambersign.org
-CN: Global Chambersign Root
------BEGIN CERTIFICATE-----
-MIIExTCCA62gAwIBAgIBADANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJFVTEn
-MCUGA1UEChMeQUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQL
-ExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEgMB4GA1UEAxMXR2xvYmFsIENo
-YW1iZXJzaWduIFJvb3QwHhcNMDMwOTMwMTYxNDE4WhcNMzcwOTMwMTYxNDE4WjB9
-MQswCQYDVQQGEwJFVTEnMCUGA1UEChMeQUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgy
-NzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEgMB4G
-A1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwggEgMA0GCSqGSIb3DQEBAQUA
-A4IBDQAwggEIAoIBAQCicKLQn0KuWxfH2H3PFIP8T8mhtxOviteePgQKkotgVvq0
-Mi+ITaFgCPS3CU6gSS9J1tPfnZdan5QEcOw/Wdm3zGaLmFIoCQLfxS+EjXqXd7/s
-QJ0lcqu1PzKY+7e3/HKE5TWH+VX6ox8Oby4o3Wmg2UIQxvi1RMLQQ3/bvOSiPGpV
-eAp3qdjqGTK3L/5cPxvusZjsyq16aUXjlg9V9ubtdepl6DJWk0aJqCWKZQbua795
-B9Dxt6/tLE2Su8CoX6dnfQTyFQhwrJLWfQTSM/tMtgsL+xrJxI0DqX5c8lCrEqWh
-z0hQpe/SyBoT+rB/sYIcd2oPX9wLlY/vQ37mRQklAgEDo4IBUDCCAUwwEgYDVR0T
-AQH/BAgwBgEB/wIBDDA/BgNVHR8EODA2MDSgMqAwhi5odHRwOi8vY3JsLmNoYW1i
-ZXJzaWduLm9yZy9jaGFtYmVyc2lnbnJvb3QuY3JsMB0GA1UdDgQWBBRDnDafsJ4w
-TcbOX60Qq+UDpfqpFDAOBgNVHQ8BAf8EBAMCAQYwEQYJYIZIAYb4QgEBBAQDAgAH
-MCoGA1UdEQQjMCGBH2NoYW1iZXJzaWducm9vdEBjaGFtYmVyc2lnbi5vcmcwKgYD
-VR0SBCMwIYEfY2hhbWJlcnNpZ25yb290QGNoYW1iZXJzaWduLm9yZzBbBgNVHSAE
-VDBSMFAGCysGAQQBgYcuCgEBMEEwPwYIKwYBBQUHAgEWM2h0dHA6Ly9jcHMuY2hh
-bWJlcnNpZ24ub3JnL2Nwcy9jaGFtYmVyc2lnbnJvb3QuaHRtbDANBgkqhkiG9w0B
-AQUFAAOCAQEAPDtwkfkEVCeR4e3t/mh/YV3lQWVPMvEYBZRqHN4fcNs+ezICNLUM
-bKGKfKX0j//U2K0X1S0E0T9YgOKBWYi+wONGkyT+kL0mojAt6JcmVzWJdJYY9hXi
-ryQZVgICsroPFOrGimbBhkVVi76SvpykBMdJPJ7oKXqJ1/6v/2j1pReQvayZzKWG
-VwlnRtvWFsJG8eSpUPWP0ZIV018+xgBJOm5YstHRJw0lyDL4IBHNfTIzSJRUTN3c
-ecQwn+uOuFW114hcxWokPbLTBQNRxgfvzBRydD1ucs4YKIxKoHflCStFREest2d/
-AYoFWpO+ocH/+OcOZ6RHSXZddZAa9SaP8A==
------END CERTIFICATE-----
-
-================================================================
-C: FI
-O: Sonera
-CN: Sonera Class1 CA
------BEGIN CERTIFICATE-----
-MIIDIDCCAgigAwIBAgIBJDANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEP
-MA0GA1UEChMGU29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MxIENBMB4XDTAx
-MDQwNjEwNDkxM1oXDTIxMDQwNjEwNDkxM1owOTELMAkGA1UEBhMCRkkxDzANBgNV
-BAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJhIENsYXNzMSBDQTCCASIwDQYJKoZI
-hvcNAQEBBQADggEPADCCAQoCggEBALWJHytPZwp5/8Ue+H887dF+2rDNbS82rDTG
-29lkFwhjMDMiikzujrsPDUJVyZ0upe/3p4zDq7mXy47vPxVnqIJyY1MPQYx9EJUk
-oVqlBvqSV536pQHydekfvFYmUk54GWVYVQNYwBSujHxVX3BbdyMGNpfzJLWaRpXk
-3w0LBUXl0fIdgrvGE+D+qnr9aTCU89JFhfzyMlsy3uhsXR/LpCJ0sICOXZT3BgBL
-qdReLjVQCfOAl/QMF6452F/NM8EcyonCIvdFEu1eEpOdY6uCLrnrQkFEy0oaAIIN
-nvmLVz5MxxftLItyM19yejhW1ebZrgUaHXVFsculJRwSVzb9IjcCAwEAAaMzMDEw
-DwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQIR+IMi/ZTiFIwCwYDVR0PBAQDAgEG
-MA0GCSqGSIb3DQEBBQUAA4IBAQCLGrLJXWG04bkruVPRsoWdd44W7hE928Jj2VuX
-ZfsSZ9gqXLar5V7DtxYvyOirHYr9qxp81V9jz9yw3Xe5qObSIjiHBxTZ/75Wtf0H
-DjxVyhbMp6Z3N/vbXB9OWQaHowND9Rart4S9Tu+fMTfwRvFAttEMpWT4Y14h21VO
-TzF2nBBhjrZTOqMRvq9tfB69ri3iDGnHhVNoomG6xT60eVR4ngrHAr5i0RGCS2Uv
-kVrCqIexVmiUefkl98HVrhq4uz2PqYo4Ffdz0Fpg0YCw8NzVUM1O7pJIae2yIx4w
-zMiUyLb1O4Z/P6Yun/Y+LLWSlj7fLJOK/4GMDw9ZIRlXvVWa
------END CERTIFICATE-----
-
-================================================================
-C: FI
-O: Sonera
-CN: Sonera Class2 CA
------BEGIN CERTIFICATE-----
-MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEP
-MA0GA1UEChMGU29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAx
-MDQwNjA3Mjk0MFoXDTIxMDQwNjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNV
-BAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJhIENsYXNzMiBDQTCCASIwDQYJKoZI
-hvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE+hY3/Ei9vX+ALTU74W+o
-Z6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gXGM2RX/uJ4+q/Tl18GybTdXnt
-5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7Jp12W5dCsv+u8E7s
-3TmVToMGf+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCWctRUz2Ej
-vOr7nQKV0ba5cTppCD8PtOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu
-8nYybieDwnPz3BjotJPqdURrBGAgcVeHnfO+oJAjPYok4doh28MCAwEAAaMzMDEw
-DwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITTXjwwCwYDVR0PBAQDAgEG
-MA0GCSqGSIb3DQEBBQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt0jSv9zil
-zqsWuasvfDXLrNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/
-3DEIcbCdjdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvD
-FNr450kkkdAdavphOe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6
-Tk6ezAyNlNzZRZxe7EJQY670XcSxEtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2
-ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLHllpwrN9M
------END CERTIFICATE-----
-
-================================================================
-C: FR
-O: Certinomis
-OU: 0002 433998903
-CN: Certinomis - Autorité Racine
------BEGIN CERTIFICATE-----
-MIIFnDCCA4SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJGUjET
-MBEGA1UEChMKQ2VydGlub21pczEXMBUGA1UECxMOMDAwMiA0MzM5OTg5MDMxJjAk
-BgNVBAMMHUNlcnRpbm9taXMgLSBBdXRvcml0w6kgUmFjaW5lMB4XDTA4MDkxNzA4
-Mjg1OVoXDTI4MDkxNzA4Mjg1OVowYzELMAkGA1UEBhMCRlIxEzARBgNVBAoTCkNl
-cnRpbm9taXMxFzAVBgNVBAsTDjAwMDIgNDMzOTk4OTAzMSYwJAYDVQQDDB1DZXJ0
-aW5vbWlzIC0gQXV0b3JpdMOpIFJhY2luZTCCAiIwDQYJKoZIhvcNAQEBBQADggIP
-ADCCAgoCggIBAJ2Fn4bT46/HsmtuM+Cet0I0VZ35gb5j2CN2DpdUzZlMGvE5x4jY
-F1AMnmHawE5V3udauHpOd4cN5bjr+p5eex7Ezyh0x5P1FMYiKAT5kcOrJ3NqDi5N
-8y4oH3DfVS9O7cdxbwlyLu3VMpfQ8Vh30WC8Tl7bmoT2R2FFK/ZQpn9qcSdIhDWe
-rP5pqZ56XjUl+rSnSTV3lqc2W+HN3yNw2F1MpQiD8aYkOBOo7C+ooWfHpi2GR+6K
-/OybDnT0K0kCe5B1jPyZOQE51kqJ5Z52qz6WKDgmi92NjMD2AR5vpTESOH2VwnHu
-7XSu5DaiQ3XV8QCb4uTXzEIDS3h65X27uK4uIJPT5GHfceF2Z5c/tt9qc1pkIuVC
-28+BA5PY9OMQ4HL2AHCs8MF6DwV/zzRpRbWT5BnbUhYjBYkOjUjkJW+zeL9i9Qf6
-lSTClrLooyPCXQP8w9PlfMl1I9f09bze5N/NgL+RiH2nE7Q5uiy6vdFrzPOlKO1E
-nn1So2+WLhl+HPNbxxaOu2B9d2ZHVIIAEWBsMsGoOBvrbpgT1u449fCfDu/+MYHB
-0iSVL1N6aaLwD4ZFjliCK0wi1F6g530mJ0jfJUaNSih8hp75mxpZuWW/Bd22Ql09
-5gBIgl4g9xGC3srYn+Y3RyYe63j3YcNBZFgCQfna4NH4+ej9Uji29YnfAgMBAAGj
-WzBZMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBQN
-jLZh2kS40RR9w759XkjwzspqsDAXBgNVHSAEEDAOMAwGCiqBegFWAgIAAQEwDQYJ
-KoZIhvcNAQEFBQADggIBACQ+YAZ+He86PtvqrxyaLAEL9MW12Ukx9F1BjYkMTv9s
-ov3/4gbIOZ/xWqndIlgVqIrTseYyCYIDbNc/CMf4uboAbbnW/FIyXaR/pDGUu7ZM
-OH8oMDX/nyNTt7buFHAAQCvaR6s0fl6nVjBhK4tDrP22iCj1a7Y+YEq6QpA0Z43q
-619FVDsXrIvkxmUP7tCMXWY5zjKn2BCXwH40nJ+U8/aGH88bc62UeYdocMMzpXDn
-2NU4lG9jeeu/Cg4I58UvD0KgKxRA/yHgBcUn4YQRE7rWhh1BCxMjidPJC+iKunqj
-o3M3NYB9Ergzd0A4wPpeMNLytqOx1qKVl4GbUu1pTP+A5FPbVFsDbVRfsbjvJL1v
-nxHDx2TCDyhihWZeGnuyt++uNckZM6i4J9szVb9o4XVIRFb7zdNIu0eJOqxp9YDG
-5ERQL1TEqkPFMTFYvZbF6nVsmnWxTfj3l/+WFvKXTej28xH5On2KOG4Ey+HTRRWq
-pdEdnV1j6CTmNhTih60bWfVEm/vXd3wfAXBioSAaosUaKPQhA+4u2cGA6rnZgtZb
-dsLLO7XSAPCjDuGtbkD326C00EauFddEwk01+dIL8hf2rGbVJLJP0RyZwG71fet0
-BLj5TXcJ17TPBzAJ8bgAVtkXFhYKK4bfjwEZGuW7gmP/vgt2Fl43N+bYdJeimUV5
------END CERTIFICATE-----
-
-================================================================
-C: FR
-O: Certplus
-CN: Class 2 Primary CA
------BEGIN CERTIFICATE-----
-MIIDkjCCAnqgAwIBAgIRAIW9S/PY2uNp9pTXX8OlRCMwDQYJKoZIhvcNAQEFBQAw
-PTELMAkGA1UEBhMCRlIxETAPBgNVBAoTCENlcnRwbHVzMRswGQYDVQQDExJDbGFz
-cyAyIFByaW1hcnkgQ0EwHhcNOTkwNzA3MTcwNTAwWhcNMTkwNzA2MjM1OTU5WjA9
-MQswCQYDVQQGEwJGUjERMA8GA1UEChMIQ2VydHBsdXMxGzAZBgNVBAMTEkNsYXNz
-IDIgUHJpbWFyeSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANxQ
-ltAS+DXSCHh6tlJw/W/uz7kRy1134ezpfgSN1sxvc0NXYKwzCkTsA18cgCSR5aiR
-VhKC9+Ar9NuuYS6JEI1rbLqzAr3VNsVINyPi8Fo3UjMXEuLRYE2+L0ER4/YXJQyL
-kcAbmXuZVg2v7tK8R1fjeUl7NIknJITesezpWE7+Tt9avkGtrAjFGA7v0lPubNCd
-EgETjdyAYveVqUSISnFOYFWe2yMZeVYHDD9jC1yw4r5+FfyUM1hBOHTE4Y+L3yas
-H7WLO7dDWWuwJKZtkIvEcupdM5i3y95ee++U8Rs+yskhwcWYAqqi9lt3m/V+llU0
-HGdpwPFC40es/CgcZlUCAwEAAaOBjDCBiTAPBgNVHRMECDAGAQH/AgEKMAsGA1Ud
-DwQEAwIBBjAdBgNVHQ4EFgQU43Mt38sOKAze3bOkynm4jrvoMIkwEQYJYIZIAYb4
-QgEBBAQDAgEGMDcGA1UdHwQwMC4wLKAqoCiGJmh0dHA6Ly93d3cuY2VydHBsdXMu
-Y29tL0NSTC9jbGFzczIuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQCnVM+IRBnL39R/
-AN9WM2K191EBkOvDP9GIROkkXe/nFL0gt5o8AP5tn9uQ3Nf0YtaLcF3n5QRIqWh8
-yfFC82x/xXp8HVGIutIKPidd3i1RTtMTZGnkLuPT55sJmabglZvOGtd/vjzOUrMR
-FcEPF80Du5wlFbqidon8BvEY0JNLDnyCt6X09l/+7UCmnYR0ObncHoUW2ikbhiMA
-ybuJfm6AiB4vFLQDJKgybwOaRywwvlbGp0ICcBvqQNi6BQNwB6SW//1IMwrh3KWB
-kJtN3X3n57LNXMhqlfil9o3EXXgIvnsG1knPGTZQIy4I5p4FTUcY1Rbpsda2ENW7
-l7+ijrRU
------END CERTIFICATE-----
-
-================================================================
-C: FR
-O: Dhimyotis
-CN: Certigna
------BEGIN CERTIFICATE-----
-MIIDqDCCApCgAwIBAgIJAP7c4wEPyUj/MA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNV
-BAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hMB4X
-DTA3MDYyOTE1MTMwNVoXDTI3MDYyOTE1MTMwNVowNDELMAkGA1UEBhMCRlIxEjAQ
-BgNVBAoMCURoaW15b3RpczERMA8GA1UEAwwIQ2VydGlnbmEwggEiMA0GCSqGSIb3
-DQEBAQUAA4IBDwAwggEKAoIBAQDIaPHJ1tazNHUmgh7stL7qXOEm7RFHYeGifBZ4
-QCHkYJ5ayGPhxLGWkv8YbWkj4Sti993iNi+RB7lIzw7sebYs5zRLcAglozyHGxny
-gQcPOJAZ0xH+hrTy0V4eHpbNgGzOOzGTtvKg0KmVEn2lmsxryIRWijOp5yIVUxbw
-zBfsV1/pogqYCd7jX5xv3EjjhQsVWqa6n6xI4wmy9/Qy3l40vhx4XUJbzg4ij02Q
-130yGLMLLGq/jj8UEYkgDncUtT2UCIf3JR7VsmAA7G8qKCVuKj4YYxclPz5EIBb2
-JsglrgVKtOdjLPOMFlN+XPsRGgjBRmKfIrjxwo1p3Po6WAbfAgMBAAGjgbwwgbkw
-DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUGu3+QTmQtCRZvgHyUtVF9lo53BEw
-ZAYDVR0jBF0wW4AUGu3+QTmQtCRZvgHyUtVF9lo53BGhOKQ2MDQxCzAJBgNVBAYT
-AkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hggkA/tzj
-AQ/JSP8wDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG
-9w0BAQUFAAOCAQEAhQMeknH2Qq/ho2Ge6/PAD/Kl1NqV5ta+aDY9fm4fTIrv0Q8h
-bV6lUmPOEvjvKtpv6zf+EwLHyzs+ImvaYS5/1HI93TDhHkxAGYwP15zRgzB7mFnc
-fca5DClMoTOi62c6ZYTTluLtdkVwj7Ur3vkj1kluPBS1xp81HlDQwY9qcEQCYsuu
-HWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY1gkIl2PlwS6w
-t0QmwCbAr1UwnjvVNioZBPRcHv/PLLf/0P2HQBHVESO7SMAhqaQoLf0V+LBOK/Qw
-WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg==
------END CERTIFICATE-----
-
-================================================================
-C: FR
-ST: France
-L: Paris
-O: PM/SGDN
-OU: DCSSI
-CN: IGC/A
-emailAddress: igca@sgdn.pm.gouv.fr
------BEGIN CERTIFICATE-----
-MIIEAjCCAuqgAwIBAgIFORFFEJQwDQYJKoZIhvcNAQEFBQAwgYUxCzAJBgNVBAYT
-AkZSMQ8wDQYDVQQIEwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQ
-TS9TR0ROMQ4wDAYDVQQLEwVEQ1NTSTEOMAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG
-9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2LmZyMB4XDTAyMTIxMzE0MjkyM1oXDTIw
-MTAxNzE0MjkyMlowgYUxCzAJBgNVBAYTAkZSMQ8wDQYDVQQIEwZGcmFuY2UxDjAM
-BgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQTS9TR0ROMQ4wDAYDVQQLEwVEQ1NTSTEO
-MAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2
-LmZyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsh/R0GLFMzvABIaI
-s9z4iPf930Pfeo2aSVz2TqrMHLmh6yeJ8kbpO0px1R2OLc/mratjUMdUC24SyZA2
-xtgv2pGqaMVy/hcKshd+ebUyiHDKcMCWSo7kVc0dJ5S/znIq7Fz5cyD+vfcuiWe4
-u0dzEvfRNWk68gq5rv9GQkaiv6GFGvm/5P9JhfejcIYyHF2fYPepraX/z9E0+X1b
-F8bc1g4oa8Ld8fUzaJ1O/Id8NhLWo4DoQw1VYZTqZDdH6nfK0LJYBcNdfrGoRpAx
-Vs5wKpayMLh35nnAvSk7/ZR3TL0gzUEl4C7HG7vupARB0l2tEmqKm0f7yd1GQOGd
-PDPQtQIDAQABo3cwdTAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIBRjAVBgNV
-HSAEDjAMMAoGCCqBegF5AQEBMB0GA1UdDgQWBBSjBS8YYFDCiQrdKyFP/45OqDAx
-NjAfBgNVHSMEGDAWgBSjBS8YYFDCiQrdKyFP/45OqDAxNjANBgkqhkiG9w0BAQUF
-AAOCAQEABdwm2Pp3FURo/C9mOnTgXeQp/wYHE4RKq89toB9RlPhJy3Q2FLwV3duJ
-L92PoF189RLrn544pEfMs5bZvpwlqwN+Mw+VgQ39FuCIvjfwbF3QMZsyK10XZZOY
-YLxuj7GoPB7ZHPOpJkL5ZB3C55L29B5aqhlSXa/oovdgoPaN8In1buAKBQGVyYsg
-Crpa/JosPL3Dt8ldeCUFP1YUmwza+zpI/pdpXsoQhvdOlgQITeywvl3cO45Pwf2a
-NjSaTFR+FwNIlQgRHAdvhQh+XU3Endv7rs6y0bO4g2wdsrN58dhwmX7wEwLOXt1R
-0982gaEbeC9xs/FZTEYYKKuF0mBWWg==
------END CERTIFICATE-----
-
-================================================================
-C: GB
-O: Trustis Limited
-OU: Trustis FPS Root CA
------BEGIN CERTIFICATE-----
-MIIDZzCCAk+gAwIBAgIQGx+ttiD5JNM2a/fH8YygWTANBgkqhkiG9w0BAQUFADBF
-MQswCQYDVQQGEwJHQjEYMBYGA1UEChMPVHJ1c3RpcyBMaW1pdGVkMRwwGgYDVQQL
-ExNUcnVzdGlzIEZQUyBSb290IENBMB4XDTAzMTIyMzEyMTQwNloXDTI0MDEyMTEx
-MzY1NFowRTELMAkGA1UEBhMCR0IxGDAWBgNVBAoTD1RydXN0aXMgTGltaXRlZDEc
-MBoGA1UECxMTVHJ1c3RpcyBGUFMgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQAD
-ggEPADCCAQoCggEBAMVQe547NdDfxIzNjpvto8A2mfRC6qc+gIMPpqdZh8mQRUN+
-AOqGeSoDvT03mYlmt+WKVoaTnGhLaASMk5MCPjDSNzoiYYkchU59j9WvezX2fihH
-iTHcDnlkH5nSW7r+f2C/revnPDgpai/lkQtV/+xvWNUtyd5MZnGPDNcE2gfmHhjj
-vSkCqPoc4Vu5g6hBSLwacY3nYuUtsuvffM/bq1rKMfFMIvMFE/eC+XN5DL7XSxzA
-0RU8k0Fk0ea+IxciAIleH2ulrG6nS4zto3Lmr2NNL4XSFDWaLk6M6jKYKIahkQlB
-OrTh4/L68MkKokHdqeMDx4gVOxzUGpTXn2RZEm0CAwEAAaNTMFEwDwYDVR0TAQH/
-BAUwAwEB/zAfBgNVHSMEGDAWgBS6+nEleYtXQSUhhgtx67JkDoshZzAdBgNVHQ4E
-FgQUuvpxJXmLV0ElIYYLceuyZA6LIWcwDQYJKoZIhvcNAQEFBQADggEBAH5Y//01
-GX2cGE+esCu8jowU/yyg2kdbw++BLa8F6nRIW/M+TgfHbcWzk88iNVy2P3UnXwmW
-zaD+vkAMXBJV+JOCyinpXj9WV4s4NvdFGkwozZ5BuO1WTISkQMi4sKUraXAEasP4
-1BIy+Q7DsdwyhEQsb8tGD+pmQQ9P8Vilpg0ND2HepZ5dfWWhPBfnqFVO76DH7cZE
-f1T1o+CP8HxVIo8ptoGj4W1OLBuAZ+ytIJ8MYmHVl/9D7S3B2l0pKoU/rGXuhg8F
-jZBf3+6f9L/uHfuY5H+QK4R4EA5sSVPvFVtlRkpdr7r7OnIdzfYliB6XzCGcKQEN
-ZetX2fNXlrtIzYE=
------END CERTIFICATE-----
-
-================================================================
-C: GB
-ST: Greater Manchester
-L: Salford
-O: Comodo CA Limited
-CN: AAA Certificate Services
------BEGIN CERTIFICATE-----
-MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEb
-MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow
-GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmlj
-YXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVowezEL
-MAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE
-BwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNVBAMM
-GEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP
-ADCCAQoCggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQua
-BtDFcCLNSS1UY8y2bmhGC1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe
-3M/vg4aijJRPn2jymJBGhCfHdr/jzDUsi14HZGWCwEiwqJH5YZ92IFCokcdmtet4
-YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszWY19zjNoFmag4qMsXeDZR
-rOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjHYpy+g8cm
-ez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQU
-oBEKIz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF
-MAMBAf8wewYDVR0fBHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20v
-QUFBQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29t
-b2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2VzLmNybDANBgkqhkiG9w0BAQUF
-AAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm7l3sAg9g1o1Q
-GE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz
-Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2
-G9w84FoVxp7Z8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsi
-l2D4kF501KKaU73yqWjgom7C12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3
-smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg==
------END CERTIFICATE-----
-
-================================================================
-C: GB
-ST: Greater Manchester
-L: Salford
-O: Comodo CA Limited
-CN: Secure Certificate Services
------BEGIN CERTIFICATE-----
-MIIEPzCCAyegAwIBAgIBATANBgkqhkiG9w0BAQUFADB+MQswCQYDVQQGEwJHQjEb
-MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow
-GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEkMCIGA1UEAwwbU2VjdXJlIENlcnRp
-ZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVow
-fjELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G
-A1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxJDAiBgNV
-BAMMG1NlY3VyZSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEB
-BQADggEPADCCAQoCggEBAMBxM4KK0HDrc4eCQNUd5MvJDkKQ+d40uaG6EfQlhfPM
-cm3ye5drswfxdySRXyWP9nQ95IDC+DwN879A6vfIUtFyb+/Iq0G4bi4XKpVpDM3S
-HpR7LZQdqnXXs5jLrLxkU0C8j6ysNstcrbvd4JQX7NFc0L/vpZXJkMWwrPsbQ996
-CF23uPJAGysnnlDOXmWCiIxe004MeuoIkbY2qitC++rCoznl2yY4rYsK7hljxxwk
-3wN42ubqwUcaCwtGCd0C/N7Lh1/XMGNooa7cMqG6vv5Eq2i2pRcV/b3Vp6ea5EQz
-6YiO/O1R65NxTq0B50SOqy3LqP4BSUjwwN3HaNiS/j0CAwEAAaOBxzCBxDAdBgNV
-HQ4EFgQUPNiTiMLAggnMAZkGkyDpnnAJY08wDgYDVR0PAQH/BAQDAgEGMA8GA1Ud
-EwEB/wQFMAMBAf8wgYEGA1UdHwR6MHgwO6A5oDeGNWh0dHA6Ly9jcmwuY29tb2Rv
-Y2EuY29tL1NlY3VyZUNlcnRpZmljYXRlU2VydmljZXMuY3JsMDmgN6A1hjNodHRw
-Oi8vY3JsLmNvbW9kby5uZXQvU2VjdXJlQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmww
-DQYJKoZIhvcNAQEFBQADggEBAIcBbSMdflsXfcFhMs+P5/OKlFlm4J4oqF7Tt/Q0
-5qo5spcWxYJvMqTpjOev/e/C6LlLqqP05tqNZSH7uoDrJiiFGv45jN5bBAS0VPmj
-Z55B+glSzAVIqMk/IQQezkhr/IXownuvf7fM+F86/TXGDe+X3EyrEeFryzHRbPtI
-gKvcnDe4IRRLDXE97IMzbtFuMhbsmMcWi1mmNKsFVy2T96oTy9IT4rcuO81rUBcJ
-aD61JlfutuC23bkpgHl9j6PwpCikFcSF9CfUa7/lXORlAnZUtOM3ZiTTGWHIUhDl
-izeauan5Hb/qmZJhlv8BzaFfDbxxvA6sCx1HRR3B7Hzs/Sk=
------END CERTIFICATE-----
-
-================================================================
-C: GB
-ST: Greater Manchester
-L: Salford
-O: Comodo CA Limited
-CN: Trusted Certificate Services
------BEGIN CERTIFICATE-----
-MIIEQzCCAyugAwIBAgIBATANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJHQjEb
-MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow
-GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDElMCMGA1UEAwwcVHJ1c3RlZCBDZXJ0
-aWZpY2F0ZSBTZXJ2aWNlczAeFw0wNDAxMDEwMDAwMDBaFw0yODEyMzEyMzU5NTla
-MH8xCzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAO
-BgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoMEUNvbW9kbyBDQSBMaW1pdGVkMSUwIwYD
-VQQDDBxUcnVzdGVkIENlcnRpZmljYXRlIFNlcnZpY2VzMIIBIjANBgkqhkiG9w0B
-AQEFAAOCAQ8AMIIBCgKCAQEA33FvNlhTWvI2VFeAxHQIIO0Yfyod5jWaHiWsnOWW
-fnJSoBVC21ndZHoa0Lh73TkVvFVIxO06AOoxEbrycXQaZ7jPM8yoMa+j49d/vzMt
-TGo87IvDktJTdyR0nAducPy9C1t2ul/y/9c3S0pgePfw+spwtOpZqqPOSC+pw7IL
-fhdyFgymBwwbOM/JYrc/oJOlh0Hyt3BAd9i+FHzjqMB6juljatEPmsbS9Is6FARW
-1O24zG71++IsWL1/T2sr92AkWCTOJu80kTrV44HQsvAEAtdbtz6SrGsSivnkBbA7
-kUlcsutT6vifR4buv5XAwAaf0lteERv0xwQ1KdJVXOTt6wIDAQABo4HJMIHGMB0G
-A1UdDgQWBBTFe1i97doladL3WRaoszLAeydb9DAOBgNVHQ8BAf8EBAMCAQYwDwYD
-VR0TAQH/BAUwAwEB/zCBgwYDVR0fBHwwejA8oDqgOIY2aHR0cDovL2NybC5jb21v
-ZG9jYS5jb20vVHJ1c3RlZENlcnRpZmljYXRlU2VydmljZXMuY3JsMDqgOKA2hjRo
-dHRwOi8vY3JsLmNvbW9kby5uZXQvVHJ1c3RlZENlcnRpZmljYXRlU2VydmljZXMu
-Y3JsMA0GCSqGSIb3DQEBBQUAA4IBAQDIk4E7ibSvuIQSTI3S8NtwuleGFTQQuS9/
-HrCoiWChisJ3DFBKmwCL2Iv0QeLQg4pKHBQGsKNoBXAxMKdTmw7pSqBYaWcOrp32
-pSxBvzwGa+RZzG0Q8ZZvH9/0BAKkn0U+yNj6NkZEUD+Cl5EfKNsYEYwq5GWDVxIS
-jBc/lDb+XbDABHcTuPQV1T84zJQ6VdCsmPW6AF/ghhmBeC8owH7TzEIK9a5QoNE+
-xqFx7D+gIIxmOom0jtTYsU0lR+4viMi14QVFwL4Ucd56/Y57fU0IlqUSc/Atyjcn
-dBInTMu2l+nZrghtWjlA3QVHdWpaIbOjGM9O9y5Xt5hwXsjEeLBi
------END CERTIFICATE-----
-
-================================================================
-C: GB
-ST: Greater Manchester
-L: Salford
-O: COMODO CA Limited
-CN: COMODO Certification Authority
------BEGIN CERTIFICATE-----
-MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCB
-gTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G
-A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNV
-BAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEyMDEwMDAw
-MDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEbMBkGA1UECBMSR3Jl
-YXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFDT01P
-RE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0
-aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3
-UcEbVASY06m/weaKXTuH+7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI
-2GqGd0S7WWaXUF601CxwRM/aN5VCaTwwxHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8
-Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV4EajcNxo2f8ESIl33rXp
-+2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA1KGzqSX+
-DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5O
-nKVIrLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW
-/zAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6g
-PKA6hjhodHRwOi8vY3JsLmNvbW9kb2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9u
-QXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOCAQEAPpiem/Yb6dc5t3iuHXIY
-SdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CPOGEIqB6BCsAv
-IC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/
-RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4
-zJVSk/BwJVmcIGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5dd
-BA6+C4OmF4O5MBKgxTMVBbkN+8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IB
-ZQ==
------END CERTIFICATE-----
-
-================================================================
-C: GB
-ST: Greater Manchester
-L: Salford
-O: COMODO CA Limited
-CN: COMODO ECC Certification Authority
------BEGIN CERTIFICATE-----
-MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTEL
-MAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE
-BxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMT
-IkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDgwMzA2MDAw
-MDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdy
-ZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09N
-T0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlv
-biBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSR
-FtSrYpn1PlILBs5BAH+X4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0J
-cfRK9ChQtP6IHG4/bC8vCVlbpVsLM5niwz2J+Wos77LTBumjQjBAMB0GA1UdDgQW
-BBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/
-BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VGFAkK+qDm
-fQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdv
-GDeAU/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY=
------END CERTIFICATE-----
-
-================================================================
-C: GR
-O: Hellenic Academic and Research Institutions Cert. Authority
-CN: Hellenic Academic and Research Institutions RootCA 2011
------BEGIN CERTIFICATE-----
-MIIEMTCCAxmgAwIBAgIBADANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UEBhMCR1Ix
-RDBCBgNVBAoTO0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1
-dGlvbnMgQ2VydC4gQXV0aG9yaXR5MUAwPgYDVQQDEzdIZWxsZW5pYyBBY2FkZW1p
-YyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25zIFJvb3RDQSAyMDExMB4XDTExMTIw
-NjEzNDk1MloXDTMxMTIwMTEzNDk1MlowgZUxCzAJBgNVBAYTAkdSMUQwQgYDVQQK
-EztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25zIENl
-cnQuIEF1dGhvcml0eTFAMD4GA1UEAxM3SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJl
-c2VhcmNoIEluc3RpdHV0aW9ucyBSb290Q0EgMjAxMTCCASIwDQYJKoZIhvcNAQEB
-BQADggEPADCCAQoCggEBAKlTAOMupvaO+mDYLZU++CwqVE7NuYRhlFhPjz2L5EPz
-dYmNUeTDN9KKiE15HrcS3UN4SoqS5tdI1Q+kOilENbgH9mgdVc04UfCMJDGFr4PJ
-fel3r+0ae50X+bOdOFAPplp5kYCvN66m0zH7tSYJnTxa71HFK9+WXesyHgLacEns
-bgzImjeN9/E2YEsmLIKe0HjzDQ9jpFEw4fkrJxIH2Oq9GGKYsFk3fb7u8yBRQlqD
-75O6aRXxYp2fmTmCobd0LovUxQt7L/DICto9eQqakxylKHJzkUOap9FNhYS5qXSP
-FEDH3N6sQWRstBmbAmNtJGSPRLIl6s5ddAxjMlyNh+UCAwEAAaOBiTCBhjAPBgNV
-HRMBAf8EBTADAQH/MAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQUppFC/RNhSiOeCKQp
-5dgTBCPuQSUwRwYDVR0eBEAwPqA8MAWCAy5ncjAFggMuZXUwBoIELmVkdTAGggQu
-b3JnMAWBAy5ncjAFgQMuZXUwBoEELmVkdTAGgQQub3JnMA0GCSqGSIb3DQEBBQUA
-A4IBAQAf73lB4XtuP7KMhjdCSk4cNx6NZrokgclPEg8hwAOXhiVtXdMiKahsog2p
-6z0GW5k6x8zDmjR/qw7IThzh+uTczQ2+vyT+bOdrwg3IBp5OjWEopmr95fZi6hg8
-TqBTnbI6nOulnJEWtk2C4AwFSKls9cz4y51JtPACpf1wA+2KIaWuE4ZJwzNzvoc7
-dIsXRSZMFpGD/md9zU1jZ/rzAxKWeAaNsWftjj++n08C9bMJL/NMh98qy5V8Acys
-Nnq/onN694/BtZqhFLKPM58N7yLcZnuEvUUXBj08yrl3NI/K6s8/MT7jiOOASSXI
-l7WdmplNsDz4SgCbZN2fOUvRJ9e4
------END CERTIFICATE-----
-
-================================================================
-C: HK
-O: Hongkong Post
-CN: Hongkong Post Root CA 1
------BEGIN CERTIFICATE-----
-MIIDMDCCAhigAwIBAgICA+gwDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCSEsx
-FjAUBgNVBAoTDUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3Qg
-Um9vdCBDQSAxMB4XDTAzMDUxNTA1MTMxNFoXDTIzMDUxNTA0NTIyOVowRzELMAkG
-A1UEBhMCSEsxFjAUBgNVBAoTDUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdr
-b25nIFBvc3QgUm9vdCBDQSAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
-AQEArP84tulmAknjorThkPlAj3n54r15/gK97iSSHSL22oVyaf7XPwnU3ZG1ApzQ
-jVrhVcNQhrkpJsLj2aDxaQMoIIBFIi1WpztUlVYiWR8o3x8gPW2iNr4joLFutbEn
-PzlTCeqrauh0ssJlXI6/fMN4hM2eFvz1Lk8gKgifd/PFHsSaUmYeSF7jEAaPIpjh
-ZY4bXSNmO7ilMlHIhqqhqZ5/dpTCpmy3QfDVyAY45tQM4vM7TG1QjMSDJ8EThFk9
-nnV0ttgCXjqQesBCNnLsak3c78QA3xMYV18meMjWCnl3v/evt3a5pQuEF10Q6m/h
-q5URX208o1xNg1vysxmKgIsLhwIDAQABoyYwJDASBgNVHRMBAf8ECDAGAQH/AgED
-MA4GA1UdDwEB/wQEAwIBxjANBgkqhkiG9w0BAQUFAAOCAQEADkbVPK7ih9legYsC
-mEEIjEy82tvuJxuC52pF7BaLT4Wg87JwvVqWuspube5Gi27nKi6Wsxkz67SfqLI3
-7piol7Yutmcn1KZJ/RyTZXaeQi/cImyaT/JaFTmxcdcrUehtHJjA2Sr0oYJ71clB
-oiMBdDhViw+5LmeiIAQ32pwL0xch4I+XeTRvhEgCIDMb5jREn5Fw9IBehEPCKdJs
-EhTkYY2sEJCehFC78JZvRZ+K88psT/oROhUVRsPNH4NbLUES7VBnQRM9IauUiqpO
-fMGx+6fWtScvl6tu4B3i0RwsH0Ti/L6RoZz71ilTc4afU9hDDl3WY4JxHYB0yvbi
-AmvZWg==
------END CERTIFICATE-----
-
-================================================================
-C: HU
-L: Budapest
-O: Microsec Ltd.
-CN: Microsec e-Szigno Root CA 2009
-emailAddress: info@e-szigno.hu
------BEGIN CERTIFICATE-----
-MIIECjCCAvKgAwIBAgIJAMJ+QwRORz8ZMA0GCSqGSIb3DQEBCwUAMIGCMQswCQYD
-VQQGEwJIVTERMA8GA1UEBwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0
-ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUtU3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0G
-CSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5odTAeFw0wOTA2MTYxMTMwMThaFw0y
-OTEyMzAxMTMwMThaMIGCMQswCQYDVQQGEwJIVTERMA8GA1UEBwwIQnVkYXBlc3Qx
-FjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUtU3pp
-Z25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5o
-dTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOn4j/NjrdqG2KfgQvvP
-kd6mJviZpWNwrZuuyjNAfW2WbqEORO7hE52UQlKavXWFdCyoDh2Tthi3jCyoz/tc
-cbna7P7ofo/kLx2yqHWH2Leh5TvPmUpG0IMZfcChEhyVbUr02MelTTMuhTlAdX4U
-fIASmFDHQWe4oIBhVKZsTh/gnQ4H6cm6M+f+wFUoLAKApxn1ntxVUwOXewdI/5n7
-N4okxFnMUBBjjqqpGrCEGob5X7uxUG6k0QrM1XF+H6cbfPVTbiJfyyvm1HxdrtbC
-xkzlBQHZ7Vf8wSN5/PrIJIOV87VqUQHQd9bpEqH5GoP7ghu5sJf0dgYzQ0mg/wu1
-+rUCAwEAAaOBgDB+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0G
-A1UdDgQWBBTLD8bfQkPMPcu1SCOhGnqmKrs0aDAfBgNVHSMEGDAWgBTLD8bfQkPM
-Pcu1SCOhGnqmKrs0aDAbBgNVHREEFDASgRBpbmZvQGUtc3ppZ25vLmh1MA0GCSqG
-SIb3DQEBCwUAA4IBAQDJ0Q5eLtXMs3w+y/w9/w0olZMEyL/azXm4Q5DwpL7v8u8h
-mLzU1F0G9u5C7DBsoKqpyvGvivo/C3NqPuouQH4frlRheesuCDfXI/OMn74dseGk
-ddug4lQUsbocKaQY9hK6ohQU4zE1yED/t+AFdlfBHFny+L/k7SViXITwfn4fs775
-tyERzAMBVnCnEJIeGzSBHq2cGsMEPO0CYdYeBvNfOofyK/FFh+U9rNHHV4S9a67c
-2Pm2G2JwCz02yULyMtd6YebS2z3PyKnJm9zbWETXbzivf3jTo60adbocwTZ8jx5t
-HMN1Rq41Bab2XD0h7lbwyYIiLXpUq3DDfSJlgnCW
------END CERTIFICATE-----
-
-================================================================
-C: HU
-L: Budapest
-O: NetLock Kft.
-OU: TanúsÃtványkiadók (Certification Services)
-CN: NetLock Arany (Class Gold) FÅ‘tanúsÃtvány
------BEGIN CERTIFICATE-----
-MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQG
-EwJIVTERMA8GA1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3
-MDUGA1UECwwuVGFuw7pzw610dsOhbnlraWFkw7NrIChDZXJ0aWZpY2F0aW9uIFNl
-cnZpY2VzKTE1MDMGA1UEAwwsTmV0TG9jayBBcmFueSAoQ2xhc3MgR29sZCkgRsWR
-dGFuw7pzw610dsOhbnkwHhcNMDgxMjExMTUwODIxWhcNMjgxMjA2MTUwODIxWjCB
-pzELMAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MRUwEwYDVQQKDAxOZXRM
-b2NrIEtmdC4xNzA1BgNVBAsMLlRhbsO6c8OtdHbDoW55a2lhZMOzayAoQ2VydGlm
-aWNhdGlvbiBTZXJ2aWNlcykxNTAzBgNVBAMMLE5ldExvY2sgQXJhbnkgKENsYXNz
-IEdvbGQpIEbFkXRhbsO6c8OtdHbDoW55MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
-MIIBCgKCAQEAxCRec75LbRTDofTjl5Bu0jBFHjzuZ9lk4BqKf8owyoPjIMHj9DrT
-lF8afFttvzBPhCf2nx9JvMaZCpDyD/V/Q4Q3Y1GLeqVw/HpYzY6b7cNGbIRwXdrz
-AZAj/E4wqX7hJ2Pn7WQ8oLjJM2P+FpD/sLj916jAwJRDC7bVWaaeVtAkH3B5r9s5
-VA1lddkVQZQBr17s9o3x/61k/iCa11zr/qYfCGSji3ZVrR47KGAuhyXoqq8fxmRG
-ILdwfzzeSNuWU7c5d+Qa4scWhHaXWy+7GRWF+GmF9ZmnqfI0p6m2pgP8b4Y9VHx2
-BJtr+UBdADTHLpl1neWIA6pN+APSQnbAGwIDAKiLo0UwQzASBgNVHRMBAf8ECDAG
-AQH/AgEEMA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUzPpnk/C2uNClwB7zU/2M
-U9+D15YwDQYJKoZIhvcNAQELBQADggEBAKt/7hwWqZw8UQCgwBEIBaeZ5m8BiFRh
-bvG5GK1Krf6BQCOUL/t1fC8oS2IkgYIL9WHxHG64YTjrgfpioTtaYtOUZcTh5m2C
-+C8lcLIhJsFyUR+MLMOEkMNaj7rP9KdlpeuY0fsFskZ1FSNqb4VjMIDw1Z4fKRzC
-bLBQWV2QWzuoDTDPv31/zvGdg73JRm4gpvlhUbohL3u+pRVjodSVh/GeufOJ8z2F
-uLjbvrW5KfnaNwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2
-XjG4Kvte9nHfRCaexOYNkbQudZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E=
------END CERTIFICATE-----
-
-================================================================
-C: HU
-L: Budapest
-O: Microsec Ltd.
-OU: e-Szigno CA
-CN: Microsec e-Szigno Root CA
------BEGIN CERTIFICATE-----
-MIIHqDCCBpCgAwIBAgIRAMy4579OKRr9otxmpRwsDxEwDQYJKoZIhvcNAQEFBQAw
-cjELMAkGA1UEBhMCSFUxETAPBgNVBAcTCEJ1ZGFwZXN0MRYwFAYDVQQKEw1NaWNy
-b3NlYyBMdGQuMRQwEgYDVQQLEwtlLVN6aWdubyBDQTEiMCAGA1UEAxMZTWljcm9z
-ZWMgZS1Temlnbm8gUm9vdCBDQTAeFw0wNTA0MDYxMjI4NDRaFw0xNzA0MDYxMjI4
-NDRaMHIxCzAJBgNVBAYTAkhVMREwDwYDVQQHEwhCdWRhcGVzdDEWMBQGA1UEChMN
-TWljcm9zZWMgTHRkLjEUMBIGA1UECxMLZS1Temlnbm8gQ0ExIjAgBgNVBAMTGU1p
-Y3Jvc2VjIGUtU3ppZ25vIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
-ggEKAoIBAQDtyADVgXvNOABHzNuEwSFpLHSQDCHZU4ftPkNEU6+r+ICbPHiN1I2u
-uO/TEdyB5s87lozWbxXGd36hL+BfkrYn13aaHUM86tnsL+4582pnS4uCzyL4ZVX+
-LMsvfUh6PXX5qqAnu3jCBspRwn5mS6/NoqdNAoI/gqyFxuEPkEeZlApxcpMqyabA
-vjxWTHOSJ/FrtfX9/DAFYJLG65Z+AZHCabEeHXtTRbjcQR/Ji3HWVBTji1R4P770
-Yjtb9aPs1ZJ04nQw7wHb4dSrmZsqa/i9phyGI0Jf7Enemotb9HI6QMVJPqW+jqpx
-62z69Rrkav17fVVA71hu5tnVvCSrwe+3AgMBAAGjggQ3MIIEMzBnBggrBgEFBQcB
-AQRbMFkwKAYIKwYBBQUHMAGGHGh0dHBzOi8vcmNhLmUtc3ppZ25vLmh1L29jc3Aw
-LQYIKwYBBQUHMAKGIWh0dHA6Ly93d3cuZS1zemlnbm8uaHUvUm9vdENBLmNydDAP
-BgNVHRMBAf8EBTADAQH/MIIBcwYDVR0gBIIBajCCAWYwggFiBgwrBgEEAYGoGAIB
-AQEwggFQMCgGCCsGAQUFBwIBFhxodHRwOi8vd3d3LmUtc3ppZ25vLmh1L1NaU1ov
-MIIBIgYIKwYBBQUHAgIwggEUHoIBEABBACAAdABhAG4A+gBzAO0AdAB2AOEAbgB5
-ACAA6QByAHQAZQBsAG0AZQB6AOkAcwDpAGgAZQB6ACAA6QBzACAAZQBsAGYAbwBn
-AGEAZADhAHMA4QBoAG8AegAgAGEAIABTAHoAbwBsAGcA4QBsAHQAYQB0APMAIABT
-AHoAbwBsAGcA4QBsAHQAYQB0AOEAcwBpACAAUwB6AGEAYgDhAGwAeQB6AGEAdABh
-ACAAcwB6AGUAcgBpAG4AdAAgAGsAZQBsAGwAIABlAGwAagDhAHIAbgBpADoAIABo
-AHQAdABwADoALwAvAHcAdwB3AC4AZQAtAHMAegBpAGcAbgBvAC4AaAB1AC8AUwBa
-AFMAWgAvMIHIBgNVHR8EgcAwgb0wgbqggbeggbSGIWh0dHA6Ly93d3cuZS1zemln
-bm8uaHUvUm9vdENBLmNybIaBjmxkYXA6Ly9sZGFwLmUtc3ppZ25vLmh1L0NOPU1p
-Y3Jvc2VjJTIwZS1Temlnbm8lMjBSb290JTIwQ0EsT1U9ZS1Temlnbm8lMjBDQSxP
-PU1pY3Jvc2VjJTIwTHRkLixMPUJ1ZGFwZXN0LEM9SFU/Y2VydGlmaWNhdGVSZXZv
-Y2F0aW9uTGlzdDtiaW5hcnkwDgYDVR0PAQH/BAQDAgEGMIGWBgNVHREEgY4wgYuB
-EGluZm9AZS1zemlnbm8uaHWkdzB1MSMwIQYDVQQDDBpNaWNyb3NlYyBlLVN6aWdu
-w7MgUm9vdCBDQTEWMBQGA1UECwwNZS1TemlnbsOzIEhTWjEWMBQGA1UEChMNTWlj
-cm9zZWMgS2Z0LjERMA8GA1UEBxMIQnVkYXBlc3QxCzAJBgNVBAYTAkhVMIGsBgNV
-HSMEgaQwgaGAFMegSXUWYYTbMUuE0vE3QJDvTtz3oXakdDByMQswCQYDVQQGEwJI
-VTERMA8GA1UEBxMIQnVkYXBlc3QxFjAUBgNVBAoTDU1pY3Jvc2VjIEx0ZC4xFDAS
-BgNVBAsTC2UtU3ppZ25vIENBMSIwIAYDVQQDExlNaWNyb3NlYyBlLVN6aWdubyBS
-b290IENBghEAzLjnv04pGv2i3GalHCwPETAdBgNVHQ4EFgQUx6BJdRZhhNsxS4TS
-8TdAkO9O3PcwDQYJKoZIhvcNAQEFBQADggEBANMTnGZjWS7KXHAM/IO8VbH0jgds
-ZifOwTsgqRy7RlRw7lrMoHfqaEQn6/Ip3Xep1fvj1KcExJW4C+FEaGAHQzAxQmHl
-7tnlJNUb3+FKG6qfx1/4ehHqE5MAyopYse7tDk2016g2JnzgOsHVV4Lxdbb9iV/a
-86g4nzUGCM4ilb7N1fy+W955a9x6qWVmvrElWl/tftOsRm1M9DKHtCAE4Gx4sHfR
-hUZLphK3dehKyVZs15KrnfVJONJPU+NVkBHbmJbGSfI+9J8b4PeI3CVimUTYc78/
-MPMMNz7UwiiAc7EBt51alhQBS6kRnSlqLtBdgcDPsiBDxwPgN05dCtxZICU=
------END CERTIFICATE-----
-
-================================================================
-C: HU
-L: Budapest
-O: NetLock Halozatbiztonsagi Kft.
-OU: Tanusitvanykiadok
-CN: NetLock Expressz (Class C) Tanusitvanykiado
------BEGIN CERTIFICATE-----
-MIIFTzCCBLigAwIBAgIBaDANBgkqhkiG9w0BAQQFADCBmzELMAkGA1UEBhMCSFUx
-ETAPBgNVBAcTCEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0
-b25zYWdpIEtmdC4xGjAYBgNVBAsTEVRhbnVzaXR2YW55a2lhZG9rMTQwMgYDVQQD
-EytOZXRMb2NrIEV4cHJlc3N6IChDbGFzcyBDKSBUYW51c2l0dmFueWtpYWRvMB4X
-DTk5MDIyNTE0MDgxMVoXDTE5MDIyMDE0MDgxMVowgZsxCzAJBgNVBAYTAkhVMREw
-DwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6dG9u
-c2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE0MDIGA1UEAxMr
-TmV0TG9jayBFeHByZXNzeiAoQ2xhc3MgQykgVGFudXNpdHZhbnlraWFkbzCBnzAN
-BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6+ywbGGKIyWvYCDj2Z/8kwvbXY2wobNA
-OoLO/XXgeDIDhlqGlZHtU/qdQPzm6N3ZW3oDvV3zOwzDUXmbrVWg6dADEK8KuhRC
-2VImESLH0iDMgqSaqf64gXadarfSNnU+sYYJ9m5tfk63euyucYT2BDMIJTLrdKwW
-RMbkQJMdf60CAwEAAaOCAp8wggKbMBIGA1UdEwEB/wQIMAYBAf8CAQQwDgYDVR0P
-AQH/BAQDAgAGMBEGCWCGSAGG+EIBAQQEAwIABzCCAmAGCWCGSAGG+EIBDQSCAlEW
-ggJNRklHWUVMRU0hIEV6ZW4gdGFudXNpdHZhbnkgYSBOZXRMb2NrIEtmdC4gQWx0
-YWxhbm9zIFN6b2xnYWx0YXRhc2kgRmVsdGV0ZWxlaWJlbiBsZWlydCBlbGphcmFz
-b2sgYWxhcGphbiBrZXN6dWx0LiBBIGhpdGVsZXNpdGVzIGZvbHlhbWF0YXQgYSBO
-ZXRMb2NrIEtmdC4gdGVybWVrZmVsZWxvc3NlZy1iaXp0b3NpdGFzYSB2ZWRpLiBB
-IGRpZ2l0YWxpcyBhbGFpcmFzIGVsZm9nYWRhc2FuYWsgZmVsdGV0ZWxlIGF6IGVs
-b2lydCBlbGxlbm9yemVzaSBlbGphcmFzIG1lZ3RldGVsZS4gQXogZWxqYXJhcyBs
-ZWlyYXNhIG1lZ3RhbGFsaGF0byBhIE5ldExvY2sgS2Z0LiBJbnRlcm5ldCBob25s
-YXBqYW4gYSBodHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIGNpbWVuIHZhZ3kg
-a2VyaGV0byBheiBlbGxlbm9yemVzQG5ldGxvY2submV0IGUtbWFpbCBjaW1lbi4g
-SU1QT1JUQU5UISBUaGUgaXNzdWFuY2UgYW5kIHRoZSB1c2Ugb2YgdGhpcyBjZXJ0
-aWZpY2F0ZSBpcyBzdWJqZWN0IHRvIHRoZSBOZXRMb2NrIENQUyBhdmFpbGFibGUg
-YXQgaHR0cHM6Ly93d3cubmV0bG9jay5uZXQvZG9jcyBvciBieSBlLW1haWwgYXQg
-Y3BzQG5ldGxvY2submV0LjANBgkqhkiG9w0BAQQFAAOBgQAQrX/XDDKACtiG8XmY
-ta3UzbM2xJZIwVzNmtkFLp++UOv0JhQQLdRmF/iewSf98e3ke0ugbLWrmldwpu2g
-pO0u9f38vf5NNwgMvOOWgyL1SRt/Syu0VMGAfJlOHdCM7tCs5ZL6dVb+ZKATj7i4
-Fp1hBWeAyNDYpQcCNJgEjTME1A==
------END CERTIFICATE-----
-
-================================================================
-C: HU
-L: Budapest
-O: NetLock Halozatbiztonsagi Kft.
-OU: Tanusitvanykiadok
-CN: NetLock Minositett Kozjegyzoi (Class QA) Tanusitvanykiado
-emailAddress: info@netlock.hu
------BEGIN CERTIFICATE-----
-MIIG0TCCBbmgAwIBAgIBezANBgkqhkiG9w0BAQUFADCByTELMAkGA1UEBhMCSFUx
-ETAPBgNVBAcTCEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0
-b25zYWdpIEtmdC4xGjAYBgNVBAsTEVRhbnVzaXR2YW55a2lhZG9rMUIwQAYDVQQD
-EzlOZXRMb2NrIE1pbm9zaXRldHQgS296amVneXpvaSAoQ2xhc3MgUUEpIFRhbnVz
-aXR2YW55a2lhZG8xHjAcBgkqhkiG9w0BCQEWD2luZm9AbmV0bG9jay5odTAeFw0w
-MzAzMzAwMTQ3MTFaFw0yMjEyMTUwMTQ3MTFaMIHJMQswCQYDVQQGEwJIVTERMA8G
-A1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFsb3phdGJpenRvbnNh
-Z2kgS2Z0LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxQjBABgNVBAMTOU5l
-dExvY2sgTWlub3NpdGV0dCBLb3pqZWd5em9pIChDbGFzcyBRQSkgVGFudXNpdHZh
-bnlraWFkbzEeMBwGCSqGSIb3DQEJARYPaW5mb0BuZXRsb2NrLmh1MIIBIjANBgkq
-hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx1Ilstg91IRVCacbvWy5FPSKAtt2/Goq
-eKvld/Bu4IwjZ9ulZJm53QE+b+8tmjwi8F3JV6BVQX/yQ15YglMxZc4e8ia6AFQe
-r7C8HORSjKAyr7c3sVNnaHRnUPYtLmTeriZ539+Zhqurf4XsoPuAzPS4DB6TRWO5
-3Lhbm+1bOdRfYrCnjnxmOCyqsQhjF2d9zL2z8cM/z1A57dEZgxXbhxInlrfa6uWd
-vLrqOU+L73Sa58XQ0uqGURzk/mQIKAR5BevKxXEOC++r6uwSEaEYBTJp0QwsGj0l
-mT+1fMptsK6ZmfoIYOcZwvK9UdPM0wKswREMgM6r3JSda6M5UzrWhQIDAMV9o4IC
-wDCCArwwEgYDVR0TAQH/BAgwBgEB/wIBBDAOBgNVHQ8BAf8EBAMCAQYwggJ1Bglg
-hkgBhvhCAQ0EggJmFoICYkZJR1lFTEVNISBFemVuIHRhbnVzaXR2YW55IGEgTmV0
-TG9jayBLZnQuIE1pbm9zaXRldHQgU3pvbGdhbHRhdGFzaSBTemFiYWx5emF0YWJh
-biBsZWlydCBlbGphcmFzb2sgYWxhcGphbiBrZXN6dWx0LiBBIG1pbm9zaXRldHQg
-ZWxla3Ryb25pa3VzIGFsYWlyYXMgam9naGF0YXMgZXJ2ZW55ZXN1bGVzZW5laywg
-dmFsYW1pbnQgZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUgYSBNaW5vc2l0ZXR0IFN6
-b2xnYWx0YXRhc2kgU3phYmFseXphdGJhbiwgYXogQWx0YWxhbm9zIFN6ZXJ6b2Rl
-c2kgRmVsdGV0ZWxla2JlbiBlbG9pcnQgZWxsZW5vcnplc2kgZWxqYXJhcyBtZWd0
-ZXRlbGUuIEEgZG9rdW1lbnR1bW9rIG1lZ3RhbGFsaGF0b2sgYSBodHRwczovL3d3
-dy5uZXRsb2NrLmh1L2RvY3MvIGNpbWVuIHZhZ3kga2VyaGV0b2sgYXogaW5mb0Bu
-ZXRsb2NrLm5ldCBlLW1haWwgY2ltZW4uIFdBUk5JTkchIFRoZSBpc3N1YW5jZSBh
-bmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGFyZSBzdWJqZWN0IHRvIHRo
-ZSBOZXRMb2NrIFF1YWxpZmllZCBDUFMgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3
-Lm5ldGxvY2suaHUvZG9jcy8gb3IgYnkgZS1tYWlsIGF0IGluZm9AbmV0bG9jay5u
-ZXQwHQYDVR0OBBYEFAlqYhaSsFq7VQ7LdTI6MuWyIckoMA0GCSqGSIb3DQEBBQUA
-A4IBAQCRalCc23iBmz+LQuM7/KbD7kPgz/PigDVJRXYC4uMvBcXxKufAQTPGtpvQ
-MznNwNuhrWw3AkxYQTvyl5LGSKjN5Yo5iWH5Upfpvfb5lHTocQ68d4bDBsxafEp+
-NFAwLvt/MpqNPfMgW/hqyobzMUwsWYACff44yTB1HLdV47yfuqhthCgFdbOLDcCR
-VCHnpgu0mfVRQdzNo0ci2ccBgcTcR08m6h/t280NmPSjnLRzMkqWmf68f8glWPhY
-83ZmiVSkpj7EUFy6iRiCdUgh0k8T6GB+B3bbELVR5qq5aKrN9p2QdRLqOBrKROi3
-macqaJVmlaut74nLYKkGEsaUR+ko
------END CERTIFICATE-----
-
-================================================================
-C: HU
-L: Budapest
-O: NetLock Halozatbiztonsagi Kft.
-OU: Tanusitvanykiadok
-CN: NetLock Uzleti (Class B) Tanusitvanykiado
------BEGIN CERTIFICATE-----
-MIIFSzCCBLSgAwIBAgIBaTANBgkqhkiG9w0BAQQFADCBmTELMAkGA1UEBhMCSFUx
-ETAPBgNVBAcTCEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0
-b25zYWdpIEtmdC4xGjAYBgNVBAsTEVRhbnVzaXR2YW55a2lhZG9rMTIwMAYDVQQD
-EylOZXRMb2NrIFV6bGV0aSAoQ2xhc3MgQikgVGFudXNpdHZhbnlraWFkbzAeFw05
-OTAyMjUxNDEwMjJaFw0xOTAyMjAxNDEwMjJaMIGZMQswCQYDVQQGEwJIVTERMA8G
-A1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFsb3phdGJpenRvbnNh
-Z2kgS2Z0LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxMjAwBgNVBAMTKU5l
-dExvY2sgVXpsZXRpIChDbGFzcyBCKSBUYW51c2l0dmFueWtpYWRvMIGfMA0GCSqG
-SIb3DQEBAQUAA4GNADCBiQKBgQCx6gTsIKAjwo84YM/HRrPVG/77uZmeBNwcf4xK
-gZjupNTKihe5In+DCnVMm8Bp2GQ5o+2So/1bXHQawEfKOml2mrriRBf8TKPV/riX
-iK+IA4kfpPIEPsgHC+b5sy96YhQJRhTKZPWLgLViqNhr1nGTLbO/CVRY7QbrqHvc
-Q7GhaQIDAQABo4ICnzCCApswEgYDVR0TAQH/BAgwBgEB/wIBBDAOBgNVHQ8BAf8E
-BAMCAAYwEQYJYIZIAYb4QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaCAk1G
-SUdZRUxFTSEgRXplbiB0YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFu
-b3MgU3pvbGdhbHRhdGFzaSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBh
-bGFwamFuIGtlc3p1bHQuIEEgaGl0ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExv
-Y2sgS2Z0LiB0ZXJtZWtmZWxlbG9zc2VnLWJpenRvc2l0YXNhIHZlZGkuIEEgZGln
-aXRhbGlzIGFsYWlyYXMgZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUgYXogZWxvaXJ0
-IGVsbGVub3J6ZXNpIGVsamFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFzIGxlaXJh
-c2EgbWVndGFsYWxoYXRvIGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGph
-biBhIGh0dHBzOi8vd3d3Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJo
-ZXRvIGF6IGVsbGVub3J6ZXNAbmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBP
-UlRBTlQhIFRoZSBpc3N1YW5jZSBhbmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmlj
-YXRlIGlzIHN1YmplY3QgdG8gdGhlIE5ldExvY2sgQ1BTIGF2YWlsYWJsZSBhdCBo
-dHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFpbCBhdCBjcHNA
-bmV0bG9jay5uZXQuMA0GCSqGSIb3DQEBBAUAA4GBAATbrowXr/gOkDFOzT4JwG06
-sPgzTEdM43WIEJessDgVkcYplswhwG08pXTP2IKlOcNl40JwuyKQ433bNXbhoLXa
-n3BukxowOR0w2y7jfLKRstE3Kfq51hdcR0/jHTjrn9V7lagonhVK0dHQKwCXoOKS
-NitjrFgBazMpUIaD8QFI
------END CERTIFICATE-----
-
-================================================================
-C: HU
-ST: Hungary
-L: Budapest
-O: NetLock Halozatbiztonsagi Kft.
-OU: Tanusitvanykiadok
-CN: NetLock Kozjegyzoi (Class A) Tanusitvanykiado
------BEGIN CERTIFICATE-----
-MIIGfTCCBWWgAwIBAgICAQMwDQYJKoZIhvcNAQEEBQAwga8xCzAJBgNVBAYTAkhV
-MRAwDgYDVQQIEwdIdW5nYXJ5MREwDwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMe
-TmV0TG9jayBIYWxvemF0Yml6dG9uc2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0
-dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9jayBLb3pqZWd5em9pIChDbGFzcyBB
-KSBUYW51c2l0dmFueWtpYWRvMB4XDTk5MDIyNDIzMTQ0N1oXDTE5MDIxOTIzMTQ0
-N1owga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQIEwdIdW5nYXJ5MREwDwYDVQQHEwhC
-dWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6dG9uc2FnaSBLZnQu
-MRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9jayBL
-b3pqZWd5em9pIChDbGFzcyBBKSBUYW51c2l0dmFueWtpYWRvMIIBIjANBgkqhkiG
-9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvHSMD7tM9DceqQWC2ObhbHDqeLVu0ThEDaiD
-zl3S1tWBxdRL51uUcCbbO51qTGL3cfNk1mE7PetzozfZz+qMkjvN9wfcZnSX9EUi
-3fRc4L9t875lM+QVOr/bmJBVOMTtplVjC7B4BPTjbsE/jvxReB+SnoPC/tmwqcm8
-WgD/qaiYdPv2LD4VOQ22BFWoDpggQrOxJa1+mm9dU7GrDPzr4PN6s6iz/0b2Y6LY
-Oph7tqyF/7AlT3Rj5xMHpQqPBffAZG9+pyeAlt7ULoZgx2srXnN7F+eRP2QM2Esi
-NCubMvJIH5+hCoR64sKtlz2O1cH5VqNQ6ca0+pii7pXmKgOM3wIDAQABo4ICnzCC
-ApswDgYDVR0PAQH/BAQDAgAGMBIGA1UdEwEB/wQIMAYBAf8CAQQwEQYJYIZIAYb4
-QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaCAk1GSUdZRUxFTSEgRXplbiB0
-YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFub3MgU3pvbGdhbHRhdGFz
-aSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBhbGFwamFuIGtlc3p1bHQu
-IEEgaGl0ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExvY2sgS2Z0LiB0ZXJtZWtm
-ZWxlbG9zc2VnLWJpenRvc2l0YXNhIHZlZGkuIEEgZGlnaXRhbGlzIGFsYWlyYXMg
-ZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUgYXogZWxvaXJ0IGVsbGVub3J6ZXNpIGVs
-amFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFzIGxlaXJhc2EgbWVndGFsYWxoYXRv
-IGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGphbiBhIGh0dHBzOi8vd3d3
-Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJoZXRvIGF6IGVsbGVub3J6
-ZXNAbmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBPUlRBTlQhIFRoZSBpc3N1
-YW5jZSBhbmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGlzIHN1YmplY3Qg
-dG8gdGhlIE5ldExvY2sgQ1BTIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5uZXRs
-b2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFpbCBhdCBjcHNAbmV0bG9jay5uZXQuMA0G
-CSqGSIb3DQEBBAUAA4IBAQBIJEb3ulZv+sgoA0BO5TE5ayZrU3/b39/zcT0mwBQO
-xmd7I6gMc90Bu8bKbjc5VdXHjFYgDigKDtIqpLBJUsY4B/6+CgmM0ZjPytoUMaFP
-0jn8DxEsQ8Pdq5PHVT5HfBgaANzze9jyf1JsIPQLX2lS9O74silg6+NJMSEN1rUQ
-QeJBCWziGppWS3cC9qCbmieH6FUpccKQn0V4GuEVZD3QDtigdp+uxdAu6tYPVuxk
-f1qbFFgBJ34TUMdrKuZoPL9coAob4Q566eKAw+np9v1sEZ7Q5SgnK1QyQhSCdeZK
-8CtmdWOMovsEPoMOmzbwGOQmIMOM8CgHrTwXZoi1/baI
------END CERTIFICATE-----
-
-================================================================
-C: IE
-O: Baltimore
-OU: CyberTrust
-CN: Baltimore CyberTrust Root
------BEGIN CERTIFICATE-----
-MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJ
-RTESMBAGA1UEChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYD
-VQQDExlCYWx0aW1vcmUgQ3liZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoX
-DTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMCSUUxEjAQBgNVBAoTCUJhbHRpbW9y
-ZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFsdGltb3JlIEN5YmVy
-VHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKMEuyKr
-mD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjr
-IZ3AQSsBUnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeK
-mpYcqWe4PwzV9/lSEy/CG9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSu
-XmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9XbIGevOF6uvUA65ehD5f/xXtabz5OTZy
-dc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjprl3RjM71oGDHweI12v/ye
-jl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoIVDaGezq1
-BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3
-DQEBBQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT92
-9hkTI7gQCvlYpNRhcL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3Wgx
-jkzSswF07r51XgdIGn9w/xZchMB5hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0
-Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsaY71k5h+3zvDyny67G7fyUIhz
-ksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9HRCwBXbsdtTLS
-R9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp
------END CERTIFICATE-----
-
-================================================================
-C: IL
-O: StartCom Ltd.
-CN: StartCom Certification Authority G2
------BEGIN CERTIFICATE-----
-MIIFYzCCA0ugAwIBAgIBOzANBgkqhkiG9w0BAQsFADBTMQswCQYDVQQGEwJJTDEW
-MBQGA1UEChMNU3RhcnRDb20gTHRkLjEsMCoGA1UEAxMjU3RhcnRDb20gQ2VydGlm
-aWNhdGlvbiBBdXRob3JpdHkgRzIwHhcNMTAwMTAxMDEwMDAxWhcNMzkxMjMxMjM1
-OTAxWjBTMQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRkLjEsMCoG
-A1UEAxMjU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgRzIwggIiMA0G
-CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2iTZbB7cgNr2Cu+EWIAOVeq8Oo1XJ
-JZlKxdBWQYeQTSFgpBSHO839sj60ZwNq7eEPS8CRhXBF4EKe3ikj1AENoBB5uNsD
-vfOpL9HG4A/LnooUCri99lZi8cVytjIl2bLzvWXFDSxu1ZJvGIsAQRSCb0AgJnoo
-D/Uefyf3lLE3PbfHkffiAez9lInhzG7TNtYKGXmu1zSCZf98Qru23QumNK9LYP5/
-Q0kGi4xDuFby2X8hQxfqp0iVAXV16iulQ5XqFYSdCI0mblWbq9zSOdIxHWDirMxW
-RST1HFSr7obdljKF+ExP6JV2tgXdNiNnvP8V4so75qbsO+wmETRIjfaAKxojAuuK
-HDp2KntWFhxyKrOq42ClAJ8Em+JvHhRYW6Vsi1g8w7pOOlz34ZYrPu8HvKTlXcxN
-nw3h3Kq74W4a7I/htkxNeXJdFzULHdfBR9qWJODQcqhaX2YtENwvKhOuJv4KHBnM
-0D4LnMgJLvlblnpHnOl68wVQdJVznjAJ85eCXuaPOQgeWeU1FEIT/wCc976qUM/i
-UUjXuG+v+E5+M5iSFGI6dWPPe/regjupuznixL0sAA7IF6wT700ljtizkC+p2il9
-Ha90OrInwMEePnWjFqmveiJdnxMaz6eg6+OGCtP95paV1yPIN93EfKo2rJgaErHg
-TuixO/XWb/Ew1wIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE
-AwIBBjAdBgNVHQ4EFgQUS8W0QGutHLOlHGVuRjaJhwUMDrYwDQYJKoZIhvcNAQEL
-BQADggIBAHNXPyzVlTJ+N9uWkusZXn5T50HsEbZH77Xe7XRcxfGOSeD8bpkTzZ+K
-2s06Ctg6Wgk/XzTQLwPSZh0avZyQN8gMjgdalEVGKua+etqhqaRpEpKwfTbURIfX
-UfEpY9Z1zRbkJ4kd+MIySP3bmdCPX1R0zKxnNBFi2QwKN4fRoxdIjtIXHfbX/dtl
-6/2o1PXWT6RbdejF0mCy2wl+JYt7ulKSnj7oxXehPOBKc2thz4bcQ///If4jXSRK
-9dNtD2IEBVeC2m6kMyV5Sy5UGYvMLD0w6dEG/+gyRr61M3Z3qAFdlsHB1b6uJcDJ
-HgoJIIihDsnzb02CVAAgp9KP5DlUFy6NHrgbuxu9mk47EDTcnIhT76IxW1hPkWLI
-wpqazRVdOKnWvvgTtZ8SafJQYqz7Fzf07rh1Z2AQ+4NQ+US1dZxAF7L+/XldblhY
-XzD8AK6vM8EOTmy6p6ahfzLbOOCxchcKK5HsamMm7YnUeMx0HgX4a/6ManY5Ka5l
-IxKVCCIcl85bBu4M4ru8H0ST9tg4RQUh7eStqxK2A6RCLi3ECToDZ2mEmuFZkIoo
-hdVddLHRDiBYmxOlsGOm7XtH/UVVMKTumtTm4ofvmMkyghEpIrwACjFeLQ/Ajulr
-so8uBtjRkcfGEvRM/TAXw8HaOFvjqermobp573PYtlNXLfbQ4ddI
------END CERTIFICATE-----
-
-================================================================
-C: IL
-O: StartCom Ltd.
-OU: Secure Digital Certificate Signing
-CN: StartCom Certification Authority
------BEGIN CERTIFICATE-----
-MIIHyTCCBbGgAwIBAgIBATANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJJTDEW
-MBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwg
-Q2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNh
-dGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0NjM2WhcNMzYwOTE3MTk0NjM2WjB9
-MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMi
-U2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3Rh
-cnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUA
-A4ICDwAwggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZk
-pMyONvg45iPwbm2xPN1yo4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rf
-OQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/C
-Ji/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/deMotHweXMAEtcnn6RtYT
-Kqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt2PZE4XNi
-HzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMM
-Av+Z6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w
-+2OqqGwaVLRcJXrJosmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+
-Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3
-Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVcUjyJthkqcwEKDwOzEmDyei+B
-26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT37uMdBNSSwID
-AQABo4ICUjCCAk4wDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAa4wHQYDVR0OBBYE
-FE4L7xqkQFulF2mHMMo0aEPQQa7yMGQGA1UdHwRdMFswLKAqoCiGJmh0dHA6Ly9j
-ZXJ0LnN0YXJ0Y29tLm9yZy9zZnNjYS1jcmwuY3JsMCugKaAnhiVodHRwOi8vY3Js
-LnN0YXJ0Y29tLm9yZy9zZnNjYS1jcmwuY3JsMIIBXQYDVR0gBIIBVDCCAVAwggFM
-BgsrBgEEAYG1NwEBATCCATswLwYIKwYBBQUHAgEWI2h0dHA6Ly9jZXJ0LnN0YXJ0
-Y29tLm9yZy9wb2xpY3kucGRmMDUGCCsGAQUFBwIBFilodHRwOi8vY2VydC5zdGFy
-dGNvbS5vcmcvaW50ZXJtZWRpYXRlLnBkZjCB0AYIKwYBBQUHAgIwgcMwJxYgU3Rh
-cnQgQ29tbWVyY2lhbCAoU3RhcnRDb20pIEx0ZC4wAwIBARqBl0xpbWl0ZWQgTGlh
-YmlsaXR5LCByZWFkIHRoZSBzZWN0aW9uICpMZWdhbCBMaW1pdGF0aW9ucyogb2Yg
-dGhlIFN0YXJ0Q29tIENlcnRpZmljYXRpb24gQXV0aG9yaXR5IFBvbGljeSBhdmFp
-bGFibGUgYXQgaHR0cDovL2NlcnQuc3RhcnRjb20ub3JnL3BvbGljeS5wZGYwEQYJ
-YIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilTdGFydENvbSBGcmVlIFNT
-TCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQUFAAOCAgEAFmyZ
-9GYMNPXQhV59CuzaEE44HF7fpiUFS5Eyweg78T3dRAlbB0mKKctmArexmvclmAk8
-jhvh3TaHK0u7aNM5Zj2gJsfyOZEdUauCe37Vzlrk4gNXcGmXCPleWKYK34wGmkUW
-FjgKXlf2Ysd6AgXmvB618p70qSmD+LIU424oh0TDkBreOKk8rENNZEXO3SipXPJz
-ewT4F+irsfMuXGRuczE6Eri8sxHkfY+BUZo7jYn0TZNmezwD7dOaHZrzZVD1oNB1
-ny+v8OqCQ5j4aZyJecRDjkZy42Q2Eq/3JR44iZB3fsNrarnDy0RLrHiQi+fHLB5L
-EUTINFInzQpdn4XBidUaePKVEFMy3YCEZnXZtWgo+2EuvoSoOMCZEoalHmdkrQYu
-L6lwhceWD3yJZfWOQ1QOq92lgDmUYMA0yZZwLKMS9R9Ie70cfmu3nZD0Ijuu+Pwq
-yvqCUqDvr0tVk+vBtfAii6w0TiYiBKGHLHVKt+V9E9e4DGTANtLJL4YSjCMJwRuC
-O3NJo2pXh5Tl1njFmUNj403gdy3hZZlyaQQaRwnmDwFWJPsfvw55qVguucQJAX6V
-um0ABj6y6koQOdjQK/W/7HW/lwLFCRsI3FU34oH7N4RDYiDK51ZLZer+bMEkkySh
-NOsF/5oirpt9P/FlUQqmMGqz9IgcgA38corog14=
------END CERTIFICATE-----
-
-================================================================
-C: IL
-O: StartCom Ltd.
-OU: Secure Digital Certificate Signing
-CN: StartCom Certification Authority
------BEGIN CERTIFICATE-----
-MIIHhzCCBW+gAwIBAgIBLTANBgkqhkiG9w0BAQsFADB9MQswCQYDVQQGEwJJTDEW
-MBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwg
-Q2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNh
-dGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0NjM3WhcNMzYwOTE3MTk0NjM2WjB9
-MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMi
-U2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3Rh
-cnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUA
-A4ICDwAwggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZk
-pMyONvg45iPwbm2xPN1yo4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rf
-OQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/C
-Ji/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/deMotHweXMAEtcnn6RtYT
-Kqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt2PZE4XNi
-HzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMM
-Av+Z6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w
-+2OqqGwaVLRcJXrJosmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+
-Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3
-Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVcUjyJthkqcwEKDwOzEmDyei+B
-26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT37uMdBNSSwID
-AQABo4ICEDCCAgwwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYD
-VR0OBBYEFE4L7xqkQFulF2mHMMo0aEPQQa7yMB8GA1UdIwQYMBaAFE4L7xqkQFul
-F2mHMMo0aEPQQa7yMIIBWgYDVR0gBIIBUTCCAU0wggFJBgsrBgEEAYG1NwEBATCC
-ATgwLgYIKwYBBQUHAgEWImh0dHA6Ly93d3cuc3RhcnRzc2wuY29tL3BvbGljeS5w
-ZGYwNAYIKwYBBQUHAgEWKGh0dHA6Ly93d3cuc3RhcnRzc2wuY29tL2ludGVybWVk
-aWF0ZS5wZGYwgc8GCCsGAQUFBwICMIHCMCcWIFN0YXJ0IENvbW1lcmNpYWwgKFN0
-YXJ0Q29tKSBMdGQuMAMCAQEagZZMaW1pdGVkIExpYWJpbGl0eSwgcmVhZCB0aGUg
-c2VjdGlvbiAqTGVnYWwgTGltaXRhdGlvbnMqIG9mIHRoZSBTdGFydENvbSBDZXJ0
-aWZpY2F0aW9uIEF1dGhvcml0eSBQb2xpY3kgYXZhaWxhYmxlIGF0IGh0dHA6Ly93
-d3cuc3RhcnRzc2wuY29tL3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgG
-CWCGSAGG+EIBDQQrFilTdGFydENvbSBGcmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1
-dGhvcml0eTANBgkqhkiG9w0BAQsFAAOCAgEAjo/n3JR5fPGFf59Jb2vKXfuM/gTF
-wWLRfUKKvFO3lANmMD+x5wqnUCBVJX92ehQN6wQOQOY+2IirByeDqXWmN3PH/UvS
-Ta0XQMhGvjt/UfzDtgUx3M2FIk5xt/JxXrAaxrqTi3iSSoX4eA+D/i+tLPfkpLst
-0OcNOrg+zvZ49q5HJMqjNTbOx8aHmNrs++myziebiMMEofYLWWivydsQD032ZGNc
-pRJvkrKTlMeIFw6Ttn5ii5B/q06f/ON1FE8qMt9bDeD1e5MNq6HPh+GlBEXoPBKl
-CcWw0bdT82AUuoVpaiF8H3VhFyAXe2w7QSlc4axa0c2Mm+tgHRns9+Ww2vl5GKVF
-P0lDV9LdJNUso/2RjSe15esUBppMeyG7Oq0wBhjA2MFrLH9ZXF2RsXAiV+uKa0hK
-1Q8p7MZAwC+ITGgBF3f0JBlPvfrhsiAhS90a2Cl9qrjeVOwhVYBsHvUwyKMQ5bLm
-KhQxw4UtjJixhlpPiVktucf3HMiKf8CdBUrmQk9io20ppB+Fq9vlgcitKj1MXVuE
-JnHEhV5xJMqlG2zYYdMa4FTbzrqpMrUi9nNBCV24F10OD5mQ1kfabwo6YigUZ4LZ
-8dCAWZvLMdibD4x3TrVoivJs9iQOLWxwxXPR3hTQcY+203sC9uO41Alua551hDnm
-fyWl8kgAwKQB2j8=
------END CERTIFICATE-----
-
-================================================================
-C: IT
-L: Milan
-O: Actalis S.p.A./03358520967
-CN: Actalis Authentication Root CA
------BEGIN CERTIFICATE-----
-MIIFuzCCA6OgAwIBAgIIVwoRl0LE48wwDQYJKoZIhvcNAQELBQAwazELMAkGA1UE
-BhMCSVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8w
-MzM1ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290
-IENBMB4XDTExMDkyMjExMjIwMloXDTMwMDkyMjExMjIwMlowazELMAkGA1UEBhMC
-SVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8wMzM1
-ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290IENB
-MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAp8bEpSmkLO/lGMWwUKNv
-UTufClrJwkg4CsIcoBh/kbWHuUA/3R1oHwiD1S0eiKD4j1aPbZkCkpAW1V8IbInX
-4ay8IMKx4INRimlNAJZaby/ARH6jDuSRzVju3PvHHkVH3Se5CAGfpiEd9UEtL0z9
-KK3giq0itFZljoZUj5NDKd45RnijMCO6zfB9E1fAXdKDa0hMxKufgFpbOr3JpyI/
-gCczWw63igxdBzcIy2zSekciRDXFzMwujt0q7bd9Zg1fYVEiVRvjRuPjPdA1Yprb
-rxTIW6HMiRvhMCb8oJsfgadHHwTrozmSBp+Z07/T6k9QnBn+locePGX2oxgkg4YQ
-51Q+qDp2JE+BIcXjDwL4k5RHILv+1A7TaLndxHqEguNTVHnd25zS8gebLra8Pu2F
-be8lEfKXGkJh90qX6IuxEAf6ZYGyojnP9zz/GPvG8VqLWeICrHuS0E4UT1lF9gxe
-KF+w6D9Fz8+vm2/7hNN3WpVvrJSEnu68wEqPSpP4RCHiMUVhUE4Q2OM1fEwZtN4F
-v6MGn8i1zeQf1xcGDXqVdFUNaBr8EBtiZJ1t4JWgw5QHVw0U5r0F+7if5t+L4sbn
-fpb2U8WANFAoWPASUHEXMLrmeGO89LKtmyuy/uE5jF66CyCU3nuDuP/jVo23Eek7
-jPKxwV2dpAtMK9myGPW1n0sCAwEAAaNjMGEwHQYDVR0OBBYEFFLYiDrIn3hm7Ynz
-ezhwlMkCAjbQMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUUtiIOsifeGbt
-ifN7OHCUyQICNtAwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQAL
-e3KHwGCmSUyIWOYdiPcUZEim2FgKDk8TNd81HdTtBjHIgT5q1d07GjLukD0R0i70
-jsNjLiNmsGe+b7bAEzlgqqI0JZN1Ut6nna0Oh4lScWoWPBkdg/iaKWW+9D+a2fDz
-WochcYBNy+A4mz+7+uAwTc+G02UQGRjRlwKxK3JCaKygvU5a2hi/a5iB0P2avl4V
-SM0RFbnAKVy06Ij3Pjaut2L9HmLecHgQHEhb2rykOLpn7VU+Xlff1ANATIGk0k9j
-pwlCCRT8AKnCgHNPLsBA2RF7SOp6AsDT6ygBJlh0wcBzIm2Tlf05fbsq4/aC4yyX
-X04fkZT6/iyj2HYauE2yOE+b+h1IYHkm4vP9qdCa6HCPSXrW5b0KDtst842/6+Ok
-fcvHlXHo2qN8xcL4dJIEG4aspCJTQLas/kx2z/uUMsA1n3Y/buWQbqCmJqK4LL7R
-K4X9p2jIugErsWx0Hbhzlefut8cl8ABMALJ+tguLHPPAUJ4lueAI3jZm/zel0btU
-ZCzJJ7VLkn5l/9Mt4blOvH+kQSGQQXemOR/qnuOf0GZvBeyqdn6/axag67XH/JJU
-LysRJyU3eExRarDzzFhdFPFqSBX/wge2sY0PjlxQRrM9vwGYT7JZVEc+NHt4bVaT
-LnPqZih4zR0Uv6CPLy64Lo7yFIrM6bV8+2ydDKXhlg==
------END CERTIFICATE-----
-
-================================================================
-C: JP
-O: Japan Certification Services, Inc.
-CN: SecureSign RootCA11
------BEGIN CERTIFICATE-----
-MIIDbTCCAlWgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJKUDEr
-MCkGA1UEChMiSmFwYW4gQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcywgSW5jLjEcMBoG
-A1UEAxMTU2VjdXJlU2lnbiBSb290Q0ExMTAeFw0wOTA0MDgwNDU2NDdaFw0yOTA0
-MDgwNDU2NDdaMFgxCzAJBgNVBAYTAkpQMSswKQYDVQQKEyJKYXBhbiBDZXJ0aWZp
-Y2F0aW9uIFNlcnZpY2VzLCBJbmMuMRwwGgYDVQQDExNTZWN1cmVTaWduIFJvb3RD
-QTExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA/XeqpRyQBTvLTJsz
-i1oURaTnkBbR31fSIRCkF/3frNYfp+TbfPfs37gD2pRY/V1yfIw/XwFndBWW4wI8
-h9uuywGOwvNmxoVF9ALGOrVisq/6nL+k5tSAMJjzDbaTj6nU2DbysPyKyiyhFTOV
-MdrAG/LuYpmGYz+/3ZMqg6h2uRMft85OQoWPIucuGvKVCbIFtUROd6EgvanyTgp9
-UK31BQ1FT0Zx/Sg+U/sE2C3XZR1KG/rPO7AxmjVuyIsG0wCR8pQIZUyxNAYAeoni
-8McDWc/V1uinMrPmmECGxc0nEovMe863ETxiYAcjPitAbpSACW22s293bzUIUPsC
-h8U+iQIDAQABo0IwQDAdBgNVHQ4EFgQUW/hNT7KlhtQ60vFjmqC+CfZXt94wDgYD
-VR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEB
-AKChOBZmLqdWHyGcBvod7bkixTgm2E5P7KN/ed5GIaGHd48HCJqypMWvDzKYC3xm
-KbabfSVSSUOrTC4rbnpwrxYO4wJs+0LmGJ1F2FXI6Dvd5+H0LgscNFxsWEr7jIhQ
-X5Ucv+2rIrVls4W6ng+4reV6G4pQOh29Dbx7VFALuUKvVaAYga1lme++5Jy/xIWr
-QbJUb9wlze144o4MjQlJ3WN7WmmWAiGovVJZ6X01y8hSyn+B/tlr0/cR7SXf+Of5
-pPpyl4RTDaXQMhhRdlkUbA/r7F+AjHVDg8OFmP9Mni0N5HeDk061lgeLKBObjBmN
-QSdJQO7e5iNEOdyhIta6A/I=
------END CERTIFICATE-----
-
-================================================================
-C: JP
-O: Japanese Government
-OU: ApplicationCA
------BEGIN CERTIFICATE-----
-MIIDoDCCAoigAwIBAgIBMTANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJKUDEc
-MBoGA1UEChMTSmFwYW5lc2UgR292ZXJubWVudDEWMBQGA1UECxMNQXBwbGljYXRp
-b25DQTAeFw0wNzEyMTIxNTAwMDBaFw0xNzEyMTIxNTAwMDBaMEMxCzAJBgNVBAYT
-AkpQMRwwGgYDVQQKExNKYXBhbmVzZSBHb3Zlcm5tZW50MRYwFAYDVQQLEw1BcHBs
-aWNhdGlvbkNBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAp23gdE6H
-j6UG3mii24aZS2QNcfAKBZuOquHMLtJqO8F6tJdhjYq+xpqcBrSGUeQ3DnR4fl+K
-f5Sk10cI/VBaVuRorChzoHvpfxiSQE8tnfWuREhzNgaeZCw7NCPbXCbkcXmP1G55
-IrmTwcrNwVbtiGrXoDkhBFcsovW8R0FPXjQilbUfKW1eSvNNcr5BViCH/OlQR9cw
-FO5cjFW6WY2H/CPek9AEjP3vbb3QesmlOmpyM8ZKDQUXKi17safY1vC+9D/qDiht
-QWEjdnjDuGWk81quzMKq2edY3rZ+nYVunyoKb58DKTCXKB28t89UKU5RMfkntigm
-/qJj5kEW8DOYRwIDAQABo4GeMIGbMB0GA1UdDgQWBBRUWssmP3HMlEYNllPqa0jQ
-k/5CdTAOBgNVHQ8BAf8EBAMCAQYwWQYDVR0RBFIwUKROMEwxCzAJBgNVBAYTAkpQ
-MRgwFgYDVQQKDA/ml6XmnKzlm73mlL/lupwxIzAhBgNVBAsMGuOCouODl+ODquOC
-seODvOOCt+ODp+ODs0NBMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD
-ggEBADlqRHZ3ODrso2dGD/mLBqj7apAxzn7s2tGJfHrrLgy9mTLnsCTWw//1sogJ
-hyzjVOGjprIIC8CFqMjSnHH2HZ9g/DgzE+Ge3Atf2hZQKXsvcJEPmbo0NI2VdMV+
-eKlmXb3KIXdCEKxmJj3ekav9FfBv7WxfEPjzFvYDio+nEhEMy/0/ecGc/WLuo89U
-DNErXxc+4z6/wCs+CZv+iKZ+tJIX/COUgb1up8WMwusRRdv4QcmWdupwX3kSa+Sj
-B1oF7ydJzyGfikwJcGapJsErEU4z0g781mzSDjJkaP+tBXhfAx2o45CsJOAPQKdL
-rosot4LKGAfmt1t06SAZf7IbiVQ=
------END CERTIFICATE-----
-
-================================================================
-C: JP
-O: SECOM Trust Systems CO.,LTD.
-OU: Security Communication EV RootCA1
------BEGIN CERTIFICATE-----
-MIIDfTCCAmWgAwIBAgIBADANBgkqhkiG9w0BAQUFADBgMQswCQYDVQQGEwJKUDEl
-MCMGA1UEChMcU0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEqMCgGA1UECxMh
-U2VjdXJpdHkgQ29tbXVuaWNhdGlvbiBFViBSb290Q0ExMB4XDTA3MDYwNjAyMTIz
-MloXDTM3MDYwNjAyMTIzMlowYDELMAkGA1UEBhMCSlAxJTAjBgNVBAoTHFNFQ09N
-IFRydXN0IFN5c3RlbXMgQ08uLExURC4xKjAoBgNVBAsTIVNlY3VyaXR5IENvbW11
-bmljYXRpb24gRVYgUm9vdENBMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
-ggEBALx/7FebJOD+nLpCeamIivqA4PUHKUPqjgo0No0c+qe1OXj/l3X3L+SqawSE
-RMqm4miO/VVQYg+kcQ7OBzgtQoVQrTyWb4vVog7P3kmJPdZkLjjlHmy1V4qe70gO
-zXppFodEtZDkBp2uoQSXWHnvIEqCa4wiv+wfD+mEce3xDuS4GBPMVjZd0ZoeUWs5
-bmB2iDQL87PRsJ3KYeJkHcFGB7hj3R4zZbOOCVVSPbW9/wfrrWFVGCypaZhKqkDF
-MxRldAD5kd6vA0jFQFTcD4SQaCDFkpbcLuUCRarAX1T4bepJz11sS6/vmsJWXMY1
-VkJqMF/Cq/biPT+zyRGPMUzXn0kCAwEAAaNCMEAwHQYDVR0OBBYEFDVK9U2vP9eC
-OKyrcWUXdYydVZPmMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0G
-CSqGSIb3DQEBBQUAA4IBAQCoh+ns+EBnXcPBZsdAS5f8hxOQWsTvoMpfi7ent/HW
-tWS3irO4G8za+6xmiEHO6Pzk2x6Ipu0nUBsCMCRGef4Eh3CXQHPRwMFXGZpppSeZ
-q51ihPZRwSzJIxXYKLerJRO1RuGGAv8mjMSIkh1W/hln8lXkgKNrnKt34VFxDSDb
-EJrbvXZ5B3eZKK2aXtqxT0QsNY6llsf9g/BYxnnWmHyojf6GPgcWkuF75x3sM3Z+
-Qi5KhfmRiWiEA4Glm5q+4zfFVKtWOxgtQaQM+ELbmaDgcm+7XeEWT1MKZPlO9L9O
-VL14bIjqv5wTJMJwaaJ/D8g8rQjJsJhAoyrniIPtd490
------END CERTIFICATE-----
-
-================================================================
-C: JP
-O: SECOM Trust Systems CO.,LTD.
-OU: Security Communication RootCA2
------BEGIN CERTIFICATE-----
-MIIDdzCCAl+gAwIBAgIBADANBgkqhkiG9w0BAQsFADBdMQswCQYDVQQGEwJKUDEl
-MCMGA1UEChMcU0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEnMCUGA1UECxMe
-U2VjdXJpdHkgQ29tbXVuaWNhdGlvbiBSb290Q0EyMB4XDTA5MDUyOTA1MDAzOVoX
-DTI5MDUyOTA1MDAzOVowXTELMAkGA1UEBhMCSlAxJTAjBgNVBAoTHFNFQ09NIFRy
-dXN0IFN5c3RlbXMgQ08uLExURC4xJzAlBgNVBAsTHlNlY3VyaXR5IENvbW11bmlj
-YXRpb24gUm9vdENBMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANAV
-OVKxUrO6xVmCxF1SrjpDZYBLx/KWvNs2l9amZIyoXvDjChz335c9S672XewhtUGr
-zbl+dp+++T42NKA7wfYxEUV0kz1XgMX5iZnK5atq1LXaQZAQwdbWQonCv/Q4EpVM
-VAX3NuRFg3sUZdbcDE3R3n4MqzvEFb46VqZab3ZpUql6ucjrappdUtAtCms1FgkQ
-hNBqyjoGADdH5H5XTz+L62e4iKrFvlNVspHEfbmwhRkGeC7bYRr6hfVKkaHnFtWO
-ojnflLhwHyg/i/xAXmODPIMqGplrz95Zajv8bxbXH/1KEOtOghY6rCcMU/Gt1SSw
-awNQwS08Ft1ENCcadfsCAwEAAaNCMEAwHQYDVR0OBBYEFAqFqXdlBZh8QIH4D5cs
-OPEK7DzPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3
-DQEBCwUAA4IBAQBMOqNErLlFsceTfsgLCkLfZOoc7llsCLqJX2rKSpWeeo8HxdpF
-coJxDjrSzG+ntKEju/Ykn8sX/oymzsLS28yN/HH8AynBbF0zX2S2ZTuJbxh2ePXc
-okgfGT+Ok+vx+hfuzU7jBBJV1uXk3fs+BXziHV7Gp7yXT2g69ekuCkO2r1dcYmh8
-t/2jioSgrGK+KwmHNPBqAbubKVY8/gA3zyNs8U6qtnRGEmyR7jTV7JqR50S+kDFy
-1UkC9gLl9B/rfNmWVan/7Ir5mUf/NVoCqgTLiluHcSmRvaS0eg29mvVXIwAHIRc/
-SjnRBUkLp7Y3gaVdjKozXoEofKd9J+sAro03
------END CERTIFICATE-----
-
-================================================================
-C: JP
-O: SECOM Trust.net
-OU: Security Communication RootCA1
------BEGIN CERTIFICATE-----
-MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEY
-MBYGA1UEChMPU0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21t
-dW5pY2F0aW9uIFJvb3RDQTEwHhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5
-WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMPU0VDT00gVHJ1c3QubmV0MScwJQYD
-VQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEwggEiMA0GCSqGSIb3
-DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8V6UMbXaKL0u/ZPtM7orw8yl8
-9f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzGjGdnSj74cbAZJ6kJ
-DKaVv0uMDPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9
-Ms+k2Y7CI9eNqPPYJayX5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/N
-QV3Is00qVUarH9oe4kA92819uZKAnDfdDJZkndwi92SL32HeFZRSFaB9UslLqCHJ
-xrHty8OVYNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2JChzAgMBAAGjPzA9MB0G
-A1UdDgQWBBSgc0mZaNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYwDwYDVR0T
-AQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vG
-kl3g0dNq/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfr
-Uj94nK9NrvjVT8+amCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5
-Bw+SUEmK3TGXX8npN6o7WWWXlDLJs58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJU
-JRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ6rBK+1YWc26sTfcioU+tHXot
-RSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAiFL39vmwLAw==
------END CERTIFICATE-----
-
-================================================================
-C: NL
-O: Staat der Nederlanden
-CN: Staat der Nederlanden Root CA - G2
------BEGIN CERTIFICATE-----
-MIIFyjCCA7KgAwIBAgIEAJiWjDANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJO
-TDEeMBwGA1UECgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSswKQYDVQQDDCJTdGFh
-dCBkZXIgTmVkZXJsYW5kZW4gUm9vdCBDQSAtIEcyMB4XDTA4MDMyNjExMTgxN1oX
-DTIwMDMyNTExMDMxMFowWjELMAkGA1UEBhMCTkwxHjAcBgNVBAoMFVN0YWF0IGRl
-ciBOZWRlcmxhbmRlbjErMCkGA1UEAwwiU3RhYXQgZGVyIE5lZGVybGFuZGVuIFJv
-b3QgQ0EgLSBHMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMVZ5291
-qj5LnLW4rJ4L5PnZyqtdj7U5EILXr1HgO+EASGrP2uEGQxGZqhQlEq0i6ABtQ8Sp
-uOUfiUtnvWFI7/3S4GCI5bkYYCjDdyutsDeqN95kWSpGV+RLufg3fNU254DBtvPU
-Z5uW6M7XxgpT0GtJlvOjCwV3SPcl5XCsMBQgJeN/dVrlSPhOewMHBPqCYYdu8DvE
-pMfQ9XQ+pV0aCPKbJdL2rAQmPlU6Yiile7Iwr/g3wtG61jj99O9JMDeZJiFIhQGp
-5Rbn3JBV3w/oOM2ZNyFPXfUib2rFEhZgF1XyZWampzCROME4HYYEhLoaJXhena/M
-UGDWE4dS7WMfbWV9whUYdMrhfmQpjHLYFhN9C0lK8SgbIHRrxT3dsKpICT0ugpTN
-GmXZK4iambwYfp/ufWZ8Pr2UuIHOzZgweMFvZ9C+X+Bo7d7iscksWXiSqt8rYGPy
-5V6548r6f1CGPqI0GAwJaCgRHOThuVw+R7oyPxjMW4T182t0xHJ04eOLoEq9jWYv
-6q012iDTiIJh8BIitrzQ1aTsr1SIJSQ8p22xcik/Plemf1WvbibG/ufMQFxRRIEK
-eN5KzlW/HdXZt1bv8Hb/C3m1r737qWmRRpdogBQ2HbN/uymYNqUg+oJgYjOk7Na6
-B6duxc8UpufWkjTYgfX8HV2qXB72o007uPc5AgMBAAGjgZcwgZQwDwYDVR0TAQH/
-BAUwAwEB/zBSBgNVHSAESzBJMEcGBFUdIAAwPzA9BggrBgEFBQcCARYxaHR0cDov
-L3d3dy5wa2lvdmVyaGVpZC5ubC9wb2xpY2llcy9yb290LXBvbGljeS1HMjAOBgNV
-HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJFoMocVHYnitfGsNig0jQt8YojrMA0GCSqG
-SIb3DQEBCwUAA4ICAQCoQUpnKpKBglBu4dfYszk78wIVCVBR7y29JHuIhjv5tLyS
-CZa59sCrI2AGeYwRTlHSeYAz+51IvuxBQ4EffkdAHOV6CMqqi3WtFMTC6GY8ggen
-5ieCWxjmD27ZUD6KQhgpxrRW/FYQoAUXvQwjf/ST7ZwaUb7dRUG/kSS0H4zpX897
-IZmflZ85OkYcbPnNe5yQzSipx6lVu6xiNGI1E0sUOlWDuYaNkqbG9AclVMwWVxJK
-gnjIFNkXgiYtXSAfea7+1HAWFpWD2DU5/1JddRwWxRNVz0fMdWVSSt7wsKfkCpYL
-+63C4iWEst3kvX5ZbJvw8NjnyvLplzh+ib7M+zkXYT9y2zqR2GUBGR2tUKRXCnxL
-vJxxcypFURmFzI79R6d0lR2o0a9OF7FpJsKqeFdbxU2n5Z4FF5TKsl+gSRiNNOkm
-bEgeqmiSBeGCc1qb3AdbCG19ndeNIdn8FCCqwkXfP+cAslHkwvgFuXkajDTznlvk
-N1trSt8sV4pAWja63XVECDdCcAz+3F4hoKOKwJCcaNpQ5kUQR3i2TtJlycM33+FC
-Y7BXN0Ute4qcvwXqZVUz9zkQxSgqIXobisQk+T8VyJoVIPVVYpbtbZNQvOSqeK3Z
-ywplh6ZmwcSBo3c6WB4L7oOLnR7SUqTMHW+wmG2UMbX4cQrcufx9MmDm66+KAQ==
------END CERTIFICATE-----
-
-================================================================
-C: NL
-O: Staat der Nederlanden
-CN: Staat der Nederlanden Root CA
------BEGIN CERTIFICATE-----
-MIIDujCCAqKgAwIBAgIEAJiWijANBgkqhkiG9w0BAQUFADBVMQswCQYDVQQGEwJO
-TDEeMBwGA1UEChMVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSYwJAYDVQQDEx1TdGFh
-dCBkZXIgTmVkZXJsYW5kZW4gUm9vdCBDQTAeFw0wMjEyMTcwOTIzNDlaFw0xNTEy
-MTYwOTE1MzhaMFUxCzAJBgNVBAYTAk5MMR4wHAYDVQQKExVTdGFhdCBkZXIgTmVk
-ZXJsYW5kZW4xJjAkBgNVBAMTHVN0YWF0IGRlciBOZWRlcmxhbmRlbiBSb290IENB
-MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmNK1URF6gaYUmHFtvszn
-ExvWJw56s2oYHLZhWtVhCb/ekBPHZ+7d89rFDBKeNVU+LCeIQGv33N0iYfXCxw71
-9tV2U02PjLwYdjeFnejKScfST5gTCaI+Ioicf9byEGW07l8Y1Rfj+MX94p2i71MO
-hXeiD+EwR+4A5zN9RGcaC1Hoi6CeUJhoNFIfLm0B8mBF8jHrqTFoKbt6QZ7GGX+U
-tFE5A3+y3qcym7RHjm+0Sq7lr7HcsBthvJly3uSJt3omXdozSVtSnA71iq3DuD3o
-BmrC1SoLbHuEvVYFy4ZlkuxEK7COudxwC0barbxjiDn622r+I/q85Ej0ZytqERAh
-SQIDAQABo4GRMIGOMAwGA1UdEwQFMAMBAf8wTwYDVR0gBEgwRjBEBgRVHSAAMDww
-OgYIKwYBBQUHAgEWLmh0dHA6Ly93d3cucGtpb3ZlcmhlaWQubmwvcG9saWNpZXMv
-cm9vdC1wb2xpY3kwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSofeu8Y6R0E3QA
-7Jbg0zTBLL9s+DANBgkqhkiG9w0BAQUFAAOCAQEABYSHVXQ2YcG70dTGFagTtJ+k
-/rvuFbQvBgwp8qiSpGEN/KtcCFtREytNwiphyPgJWPwtArI5fZlmgb9uXJVFIGzm
-eafR2Bwp/MIgJ1HI8XxdNGdphREwxgDS1/PTfLbwMVcoEoJz6TMvplW0C5GUR5z6
-u3pCMuiufi3IvKwUv9kP2Vv8wfl6leF9fpb8cbDCTMjfRTTJzg3ynGQI0DvDKcWy
-7ZAEwbEpkcUwb8GpcjPM/l0WFywRaed+/sWDCN+83CI6LiBpIzlWYGeQiy52OfsR
-iJf2fL1LuCAWZwWN4jvBcj+UlTfHXbme2JOhF4//DGYVwSR8MnwDHTuhWEUykw==
------END CERTIFICATE-----
-
-================================================================
-C: NO
-O: Buypass AS-983163327
-CN: Buypass Class 2 CA 1
------BEGIN CERTIFICATE-----
-MIIDUzCCAjugAwIBAgIBATANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJOTzEd
-MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxHTAbBgNVBAMMFEJ1eXBhc3Mg
-Q2xhc3MgMiBDQSAxMB4XDTA2MTAxMzEwMjUwOVoXDTE2MTAxMzEwMjUwOVowSzEL
-MAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MR0wGwYD
-VQQDDBRCdXlwYXNzIENsYXNzIDIgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEP
-ADCCAQoCggEBAIs8B0XY9t/mx8q6jUPFR42wWsE425KEHK8T1A9vNkYgxC7McXA0
-ojTTNy7Y3Tp3L8DrKehc0rWpkTSHIln+zNvnma+WwajHQN2lFYxuyHyXA8vmIPLX
-l18xoS830r7uvqmtqEyeIWZDO6i88wmjONVZJMHCR3axiFyCO7srpgTXjAePzdVB
-HfCuuCkslFJgNJQ72uA40Z0zPhX0kzLFANq1KWYOOngPIVJfAuWSeyXTkh4vFZ2B
-5J2O6O+JzhRMVB0cgRJNcKi+EAUXfh/RuFdV7c27UsKwHnjCTTZoy1YmwVLBvXb3
-WNVyfh9EdrsAiR0WnVE1703CVu9r4Iw7DekCAwEAAaNCMEAwDwYDVR0TAQH/BAUw
-AwEB/zAdBgNVHQ4EFgQUP42aWYv8e3uco684sDntkHGA1sgwDgYDVR0PAQH/BAQD
-AgEGMA0GCSqGSIb3DQEBBQUAA4IBAQAVGn4TirnoB6NLJzKyQJHyIdFkhb5jatLP
-gcIV1Xp+DCmsNx4cfHZSldq1fyOhKXdlyTKdqC5Wq2B2zha0jX94wNWZUYN/Xtm+
-DKhQ7SLHrQVMdvvt7h5HZPb3J31cKA9FxVxiXqaakZG3Uxcu3K1gnZZkOb1naLKu
-BctN518fV4bVIJwo+28TOPX2EZL2fZleHwzoq0QkKXJAPTZSr4xYkHPB7GEseaHs
-h7U/2k3ZIQAw3pDaDtMaSKk+hQsUi4y8QZ5q9w5wwDX3OaJdZtB7WZ+oRxKaJyOk
-LY4ng5IgodcVf/EuGO70SH8vf/GhGLWhC5SgYiAynB321O+/TIho
------END CERTIFICATE-----
-
-================================================================
-C: NO
-O: Buypass AS-983163327
-CN: Buypass Class 2 Root CA
------BEGIN CERTIFICATE-----
-MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEd
-MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3Mg
-Q2xhc3MgMiBSb290IENBMB4XDTEwMTAyNjA4MzgwM1oXDTQwMTAyNjA4MzgwM1ow
-TjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MSAw
-HgYDVQQDDBdCdXlwYXNzIENsYXNzIDIgUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEB
-BQADggIPADCCAgoCggIBANfHXvfBB9R3+0Mh9PT1aeTuMgHbo4Yf5FkNuud1g1Lr
-6hxhFUi7HQfKjK6w3Jad6sNgkoaCKHOcVgb/S2TwDCo3SbXlzwx87vFKu3MwZfPV
-L4O2fuPn9Z6rYPnT8Z2SdIrkHJasW4DptfQxh6NR/Md+oW+OU3fUl8FVM5I+GC91
-1K2GScuVr1QGbNgGE41b/+EmGVnAJLqBcXmQRFBoJJRfuLMR8SlBYaNByyM21cHx
-MlAQTn/0hpPshNOOvEu/XAFOBz3cFIqUCqTqc/sLUegTBxj6DvEr0VQVfTzh97QZ
-QmdiXnfgolXsttlpF9U6r0TtSsWe5HonfOV116rLJeffawrbD02TTqigzXsu8lkB
-arcNuAeBfos4GzjmCleZPe4h6KP1DBbdi+w0jpwqHAAVF41og9JwnxgIzRFo1clr
-Us3ERo/ctfPYV3Me6ZQ5BL/T3jjetFPsaRyifsSP5BtwrfKi+fv3FmRmaZ9JUaLi
-FRhnBkp/1Wy1TbMz4GHrXb7pmA8y1x1LPC5aAVKRCfLf6o3YBkBjqhHk/sM3nhRS
-P/TizPJhk9H9Z2vXUq6/aKtAQ6BXNVN48FP4YUIHZMbXb5tMOA1jrGKvNouicwoN
-9SG9dKpN6nIDSdvHXx1iY8f93ZHsM+71bbRuMGjeyNYmsHVee7QHIJihdjK4TWxP
-AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMmAd+BikoL1Rpzz
-uvdMw964o605MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAU18h
-9bqwOlI5LJKwbADJ784g7wbylp7ppHR/ehb8t/W2+xUbP6umwHJdELFx7rxP462s
-A20ucS6vxOOto70MEae0/0qyexAQH6dXQbLArvQsWdZHEIjzIVEpMMpghq9Gqx3t
-OluwlN5E40EIosHsHdb9T7bWR9AUC8rmyrV7d35BH16Dx7aMOZawP5aBQW9gkOLo
-+fsicdl9sz1Gv7SEr5AcD48Saq/v7h56rgJKihcrdv6sVIkkLE8/trKnToyokZf7
-KcZ7XC25y2a2t6hbElGFtQl+Ynhw/qlqYLYdDnkM/crqJIByw5c/8nerQyIKx+u2
-DISCLIBrQYoIwOula9+ZEsuK1V6ADJHgJgg2SMX6OBE1/yWDLfJ6v9r9jv6ly0Us
-H8SIU653DtmadsWOLB2jutXsMq7Aqqz30XpN69QH4kj3Io6wpJ9qzo6ysmD0oyLQ
-I+uUWnpp3Q+/QFesa1lQ2aOZ4W7+jQF5JyMV3pKdewlNWudLSDBaGOYKbeaP4NK7
-5t98biGCwWg5TbSYWGZizEqQXsP6JwSxeRV0mcy+rSDeJmAc61ZRpqPq5KM/p/9h
-3PFaTWwyI0PurKju7koSCTxdccK+efrCh2gdC/1cacwG0Jp9VJkqyTkaGa9LKkPz
-Y11aWOIv4x3kqdbQCtCev9eBCfHJxyYNrJgWVqA=
------END CERTIFICATE-----
-
-================================================================
-C: NO
-O: Buypass AS-983163327
-CN: Buypass Class 3 CA 1
------BEGIN CERTIFICATE-----
-MIIDUzCCAjugAwIBAgIBAjANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJOTzEd
-MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxHTAbBgNVBAMMFEJ1eXBhc3Mg
-Q2xhc3MgMyBDQSAxMB4XDTA1MDUwOTE0MTMwM1oXDTE1MDUwOTE0MTMwM1owSzEL
-MAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MR0wGwYD
-VQQDDBRCdXlwYXNzIENsYXNzIDMgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEP
-ADCCAQoCggEBAKSO13TZKWTeXx+HgJHqTjnmGcZEC4DVC69TB4sSveZn8AKxifZg
-isRbsELRwCGoy+Gb72RRtqfPFfV0gGgEkKBYouZ0plNTVUhjP5JW3SROjvi6K//z
-NIqeKNc0n6wv1g/xpC+9UrJJhW05NfBEMJNGJPO251P7vGGvqaMU+8IXF4Rs4HyI
-+MkcVyzwPX6UvCWThOiaAJpFBUJXgPROztmuOfbIUxAMZTpHe2DC1vqRycZxbL2R
-hzyRhkmr8w+gbCZ2Xhysm3HljbybIR6c1jh+JIAVMYKWsUnTYjdbiAwKYjT+p0h+
-mbEwi5A3lRyoH6UsjfRVyNvdWQrCrXig9IsCAwEAAaNCMEAwDwYDVR0TAQH/BAUw
-AwEB/zAdBgNVHQ4EFgQUOBTmyPCppAP0Tj4io1vy1uCtQHQwDgYDVR0PAQH/BAQD
-AgEGMA0GCSqGSIb3DQEBBQUAA4IBAQABZ6OMySU9E2NdFm/soT4JXJEVKirZgCFP
-Bdy7pYmrEzMqnji3jG8CcmPHc3ceCQa6Oyh7pEfJYWsICCD8igWKH7y6xsL+z27s
-EzNxZy5p+qksP2bAEllNC1QCkoS72xLvg3BweMhT+t/Gxv/ciC8HwEmdMldg0/L2
-mSlf56oBzKwzqBwKu5HEA6BvtjT5htOzdlSY9EqBs1OdTUDs5XcTRa9bqh/YL0yC
-e/4qxFi7T/ye/QNlGioOw6UgFpRreaaiErS7GqQjel/wroQk5PMr+4okoyeYZdow
-dXb8GZHo2+ubPzK/QJcHJrrM85SFSnonk8+QQtS4Wxam58tAA915
------END CERTIFICATE-----
-
-================================================================
-C: NO
-O: Buypass AS-983163327
-CN: Buypass Class 3 Root CA
------BEGIN CERTIFICATE-----
-MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEd
-MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3Mg
-Q2xhc3MgMyBSb290IENBMB4XDTEwMTAyNjA4Mjg1OFoXDTQwMTAyNjA4Mjg1OFow
-TjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MSAw
-HgYDVQQDDBdCdXlwYXNzIENsYXNzIDMgUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEB
-BQADggIPADCCAgoCggIBAKXaCpUWUOOV8l6ddjEGMnqb8RB2uACatVI2zSRHsJ8Y
-ZLya9vrVediQYkwiL944PdbgqOkcLNt4EemOaFEVcsfzM4fkoF0LXOBXByow9c3E
-N3coTRiR5r/VUv1xLXA+58bEiuPwKAv0dpihi4dVsjoT/Lc+JzeOIuOoTyrvYLs9
-tznDDgFHmV0ST9tD+leh7fmdvhFHJlsTmKtdFoqwNxxXnUX/iJY2v7vKB3tvh2PX
-0DJq1l1sDPGzbjniazEuOQAnFN44wOwZZoYS6J1yFhNkUsepNxz9gjDthBgd9K5c
-/3ATAOux9TN6S9ZV+AWNS2mw9bMoNlwUxFFzTWsL8TQH2xc519woe2v1n/MuwU8X
-KhDzzMro6/1rqy6any2CbgTUUgGTLT2G/H783+9CHaZr77kgxve9oKeV/afmiSTY
-zIw0bOIjL9kSGiG5VZFvC5F5GQytQIgLcOJ60g7YaEi7ghM5EFjp2CoHxhLbWNvS
-O1UQRwUVZ2J+GGOmRj8JDlQyXr8NYnon74Do29lLBlo3WiXQCBJ31G8JUJc9yB3D
-34xFMFbG02SrZvPAXpacw8Tvw3xrizp5f7NJzz3iiZ+gMEuFuZyUJHmPfWupRWgP
-K9Dx2hzLabjKSWJtyNBjYt1gD1iqj6G8BaVmos8bdrKEZLFMOVLAMLrwjEsCsLa3
-AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFEe4zf/lb+74suwv
-Tg75JbCOPGvDMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAACAj
-QTUEkMJAYmDv4jVM1z+s4jSQuKFvdvoWFqRINyzpkMLyPPgKn9iB5btb2iUspKdV
-cSQy9sgL8rxq+JOssgfCX5/bzMiKqr5qb+FJEMwx14C7u8jYog5kV+qi9cKpMRXS
-IGrs/CIBKM+GuIAeqcwRpTzyFrNHnfzSgCHEy9BHcEGhyoMZCCxt8l13nIoUE9Q2
-HJLw5QY33KbmkJs4j1xrG0aGQ0JfPgEHU1RdZX33inOhmlRaHylDFCfChQ+1iHsa
-O5S3HWCntZznKWlXWpuTekMwGwPXYshApqr8ZORK15FTAaggiG6cX0S5y2CBNOxv
-033aSF/rtJC8LakcC6wc1aJoIIAE1vyxjy+7SjENSoYc6+I2KSb12tjE8nVhz36u
-dmNKekBlk4f4HoCMhuWG1o8O/FMsYOgWYRqiPkN7zTlgVGr18okmAWiDSKIz6MkE
-kbIRNBE+6tBDGR8Dk5AM/1E9V/RBbuHLoL7ryWPNbczk+DaqaJ3tvV2XcEQNtg41
-3OEMXbugUZTLfhbrES+jkkXITHHZvMmZUldGL1DPvTVp9D0VzgalLA8+9oG6lLvD
-u79leNKGef9JOxqDDPDeeOzI8k1MGt6CKfjBWtrt7uYnXuhF0J0cUahoq0Tj0Itq
-4/g7u9xN12TyUb7mqqta6THuBrxzvxNiCp/HuZc=
------END CERTIFICATE-----
-
-================================================================
-C: PL
-O: Unizeto Sp. z o.o.
-CN: Certum CA
------BEGIN CERTIFICATE-----
-MIIDDDCCAfSgAwIBAgIDAQAgMA0GCSqGSIb3DQEBBQUAMD4xCzAJBgNVBAYTAlBM
-MRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBD
-QTAeFw0wMjA2MTExMDQ2MzlaFw0yNzA2MTExMDQ2MzlaMD4xCzAJBgNVBAYTAlBM
-MRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBD
-QTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM6xwS7TT3zNJc4YPk/E
-jG+AanPIW1H4m9LcuwBcsaD8dQPugfCI7iNS6eYVM42sLQnFdvkrOYCJ5JdLkKWo
-ePhzQ3ukYbDYWMzhbGZ+nPMJXlVjhNWo7/OxLjBos8Q82KxujZlakE403Daaj4GI
-ULdtlkIJ89eVgw1BS7Bqa/j8D35in2fE7SZfECYPCE/wpFcozo+47UX2bu4lXapu
-Ob7kky/ZR6By6/qmW6/KUz/iDsaWVhFu9+lmqSbYf5VT7QqFiLpPKaVCjF62/IUg
-AKpoC6EahQGcxEZjgoi2IrHu/qpGWX7PNSzVttpd90gzFFS269lvzs2I1qsb2pY7
-HVkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEA
-uI3O7+cUus/usESSbLQ5PqKEbq24IXfS1HeCh+YgQYHu4vgRt2PRFze+GXYkHAQa
-TOs9qmdvLdTN/mUxcMUbpgIKumB7bVjCmkn+YzILa+M6wKyrO7Do0wlRjBCDxjTg
-xSvgGrZgFCdsMneMvLJymM/NzD+5yCRCFNZX/OYmQ6kd5YCQzgNUKD73P9P4Te1q
-CjqTE5s7FCMTY5w/0YcneeVMUeMBrYVdGjux1XMQpNPyvG5k9VpWkKjHDkx0Dy5x
-O/fIR/RpbxXyEV6DHpx8Uq79AtoSqFlnGNu8cN2bsWntgM6JQEhqDjXKKWYVIZQs
-6GAqm4VKQPNriiTsBhYscw==
------END CERTIFICATE-----
-
-================================================================
-C: PL
-O: Unizeto Technologies S.A.
-OU: Certum Certification Authority
-CN: Certum Trusted Network CA
------BEGIN CERTIFICATE-----
-MIIDuzCCAqOgAwIBAgIDBETAMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAlBM
-MSIwIAYDVQQKExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5D
-ZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBU
-cnVzdGVkIE5ldHdvcmsgQ0EwHhcNMDgxMDIyMTIwNzM3WhcNMjkxMjMxMTIwNzM3
-WjB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dpZXMg
-Uy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MSIw
-IAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMIIBIjANBgkqhkiG9w0B
-AQEFAAOCAQ8AMIIBCgKCAQEA4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/91sts1rH
-UV+rpDKmYYe2bg+G0jACl/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LM
-TXPb865Px1bVWqeWifrzq2jUI4ZZJ88JJ7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVU
-BBvXQzmtVSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4fOQtf/WsX+sWn7Et0brM
-kUJ3TCXJkDhv2/DM+44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0cvW0QM8x
-AcPs3hEtF10fuFDRXhmnad4HMyjKUJX5p1TLVIZQRan5SQIDAQABo0IwQDAPBgNV
-HRMBAf8EBTADAQH/MB0GA1UdDgQWBBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNV
-HQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQEFBQADggEBAKaorSLOAT2mo/9i0Eidi15y
-sHhE49wcrwn9I0j6vSrEuVUEtRCjjSfeC4Jj0O7eDDd5QVsisrCaQVymcODU0HfL
-I9MA4GxWL+FpDQ3Zqr8hgVDZBqWo/5U30Kr+4rP1mS1FhIrlQgnXdAIv94nYmem8
-J9RHjboNRhx3zxSkHLmkMcScKHQDNP8zGSal6Q10tz6XxnboJ5ajZt3hrvJBW8qY
-VoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI
-03YnnZotBqbJ7DnSq9ufmgsnAjUpsUCV5/nonFWIGUbWtzT1fs45mtk48VH3Tyw=
------END CERTIFICATE-----
-
-================================================================
-C: RO
-O: certSIGN
-OU: certSIGN ROOT CA
------BEGIN CERTIFICATE-----
-MIIDODCCAiCgAwIBAgIGIAYFFnACMA0GCSqGSIb3DQEBBQUAMDsxCzAJBgNVBAYT
-AlJPMREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBD
-QTAeFw0wNjA3MDQxNzIwMDRaFw0zMTA3MDQxNzIwMDRaMDsxCzAJBgNVBAYTAlJP
-MREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBDQTCC
-ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALczuX7IJUqOtdu0KBuqV5Do
-0SLTZLrTk+jUrIZhQGpgV2hUhE28alQCBf/fm5oqrl0Hj0rDKH/v+yv6efHHrfAQ
-UySQi2bJqIirr1qjAOm+ukbuW3N7LBeCgV5iLKECZbO9xSsAfsT8AzNXDe3i+s5d
-RdY4zTW2ssHQnIFKquSyAVwdj1+ZxLGt24gh65AIgoDzMKND5pCCrlUoSe1b16kQ
-OA7+j0xbm0bqQfWwCHTD0IgztnzXdN/chNFDDnU5oSVAKOp4yw4sLjmdjItuFhwv
-JoIQ4uNllAoEwF73XVv4EOLQunpL+943AAAaWyjj0pxzPjKHmKHJUS/X3qwzs08C
-AwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAcYwHQYDVR0O
-BBYEFOCMm9slSbPxfIbWskKHC9BroNnkMA0GCSqGSIb3DQEBBQUAA4IBAQA+0hyJ
-LjX8+HXd5n9liPRyTMks1zJO890ZeUe9jjtbkw9QSSQTaxQGcu8J06Gh40CEyecY
-MnQ8SG4Pn0vU9x7Tk4ZkVJdjclDVVc/6IJMCopvDI5NOFlV2oHB5bc0hH88vLbwZ
-44gx+FkagQnIl6Z0x2DEW8xXjrJ1/RsCCdtZb3KTafcxQdaIOL+Hsr0Wefmq5L6I
-Jd1hJyMctTEHBDa0GpC9oHRxUIltvBTjD4au8as+x6AJzKNI0eDbZOeStc+vckNw
-i/nDhDwTqn6Sm1dTk/pwwpEOMfmbZ13pljheX7NzTogVZ96edhBiIL5VaZVDADlN
-9u6wWk5JRFRYX0KD
------END CERTIFICATE-----
-
-================================================================
-C: SE
-O: AddTrust AB
-OU: AddTrust External TTP Network
-CN: AddTrust External CA Root
------BEGIN CERTIFICATE-----
-MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEU
-MBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFs
-IFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290
-MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEwNDgzOFowbzELMAkGA1UEBhMCU0Ux
-FDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRUcnVzdCBFeHRlcm5h
-bCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0EgUm9v
-dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvt
-H7xsD821+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9
-uMq/NzgtHj6RQa1wVsfwTz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzX
-mk6vBbOmcZSccbNQYArHE504B4YCqOmoaSYYkKtMsE8jqzpPhNjfzp/haW+710LX
-a0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy2xSoRcRdKn23tNbE7qzN
-E0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv77+ldU9U0
-WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYD
-VR0PBAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0
-Jvf6xCZU7wO94CTLVBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRU
-cnVzdCBBQjEmMCQGA1UECxMdQWRkVHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsx
-IjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENBIFJvb3SCAQEwDQYJKoZIhvcN
-AQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZlj7DYd7usQWxH
-YINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5
-6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvC
-Nr4TDea9Y355e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEX
-c4g/VhsxOBi0cQ+azcgOno4uG+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5a
-mnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ=
------END CERTIFICATE-----
-
-================================================================
-C: SE
-O: AddTrust AB
-OU: AddTrust TTP Network
-CN: AddTrust Class 1 CA Root
------BEGIN CERTIFICATE-----
-MIIEGDCCAwCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQGEwJTRTEU
-MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3
-b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwHhcNMDAwNTMw
-MTAzODMxWhcNMjAwNTMwMTAzODMxWjBlMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
-QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYD
-VQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUA
-A4IBDwAwggEKAoIBAQCWltQhSWDia+hBBwzexODcEyPNwTXH+9ZOEQpnXvUGW2ul
-CDtbKRY654eyNAbFvAWlA3yCyykQruGIgb3WntP+LVbBFc7jJp0VLhD7Bo8wBN6n
-tGO0/7Gcrjyvd7ZWxbWroulpOj0OM3kyP3CCkplhbY0wCI9xP6ZIVxn4JdxLZlyl
-dI+Yrsj5wAYi56xz36Uu+1LcsRVlIPo1Zmne3yzxbrww2ywkEtvrNTVokMsAsJch
-PXQhI2U0K7t4WaPW4XY5mqRJjox0r26kmqPZm9I4XJuiGMx1I4S+6+JNM3GOGvDC
-+Mcdoq0Dlyz4zyXG9rgkMbFjXZJ/Y/AlyVMuH79NAgMBAAGjgdIwgc8wHQYDVR0O
-BBYEFJWxtPCUtr3H2tERCSG+wa9J/RB7MAsGA1UdDwQEAwIBBjAPBgNVHRMBAf8E
-BTADAQH/MIGPBgNVHSMEgYcwgYSAFJWxtPCUtr3H2tERCSG+wa9J/RB7oWmkZzBl
-MQswCQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFk
-ZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENB
-IFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBACxtZBsfzQ3duQH6lmM0MkhHma6X
-7f1yFqZzR1r0693p9db7RcwpiURdv0Y5PejuvE1Uhh4dbOMXJ0PhiVYrqW9yTkkz
-43J8KiOavD7/KCrto/8cI7pDVwlnTUtiBi34/2ydYB7YHEt9tTEv2dB8Xfjea4MY
-eDdXL+gzB2ffHsdrKpV2ro9Xo/D0UrSpUwjP4E/TelOL/bscVjby/rK25Xa71SJl
-pz/+0WatC7xrmYbvP33zGDLKe8bjq2RGlfgmadlVg3sslgf/WSxEo8bl6ancoWOA
-WiFeIc9TVPC6b4nbqKqVz4vjccweGyBECMB6tkD9xOQ14R0WHNC8K47Wcdk=
------END CERTIFICATE-----
-
-================================================================
-C: SE
-O: AddTrust AB
-OU: AddTrust TTP Network
-CN: AddTrust Public CA Root
------BEGIN CERTIFICATE-----
-MIIEFTCCAv2gAwIBAgIBATANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQGEwJTRTEU
-MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3
-b3JrMSAwHgYDVQQDExdBZGRUcnVzdCBQdWJsaWMgQ0EgUm9vdDAeFw0wMDA1MzAx
-MDQxNTBaFw0yMDA1MzAxMDQxNTBaMGQxCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtB
-ZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5ldHdvcmsxIDAeBgNV
-BAMTF0FkZFRydXN0IFB1YmxpYyBDQSBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOC
-AQ8AMIIBCgKCAQEA6Rowj4OIFMEg2Dybjxt+A3S72mnTRqX4jsIMEZBRpS9mVEBV
-6tsfSlbunyNu9DnLoblv8n75XYcmYZ4c+OLspoH4IcUkzBEMP9smcnrHAZcHF/nX
-GCwwfQ56HmIexkvA/X1id9NEHif2P0tEs7c42TkfYNVRknMDtABp4/MUTu7R3AnP
-dzRGULD4EfL+OHn3Bzn+UZKXC1sIXzSGAa2Il+tmzV7R/9x98oTaunet3IAIx6eH
-1lWfl2royBFkuucZKT8Rs3iQhCBSWxHveNCD9tVIkNAwHM+A+WD+eeSI8t0A65RF
-62WUaUC6wNW0uLp9BBGo6zEFlpROWCGOn9Bg/QIDAQABo4HRMIHOMB0GA1UdDgQW
-BBSBPjfYkrAfd59ctKtzquf2NGAv+jALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/BAUw
-AwEB/zCBjgYDVR0jBIGGMIGDgBSBPjfYkrAfd59ctKtzquf2NGAv+qFopGYwZDEL
-MAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRU
-cnVzdCBUVFAgTmV0d29yazEgMB4GA1UEAxMXQWRkVHJ1c3QgUHVibGljIENBIFJv
-b3SCAQEwDQYJKoZIhvcNAQEFBQADggEBAAP3FUr4JNojVhaTdt02KLmuG7jD8WS6
-IBh4lSknVwW8fCr0uVFV2ocC3g8WFzH4qnkuCRO7r7IgGRLlk/lL+YPoRNWyQSW/
-iHVv/xD8SlTQX/D67zZzfRs2RcYhbbQVuE7PnFylPVoAjgbjPGsye/Kf8Lb93/Ao
-GEjwxrzQvzSAlsJKsW2Ox5BF3i9nrEUEo3rcVZLJR2bYGozH7ZxOmuASu7VqTITh
-4SINhwBk/ox9Yjllpu9CtoAlEmEBqCQTcAARJl/6NVDFSMwGR+gn2HCNX2TmoUQm
-XiLsks3/QppEIW1cxeMiHV9HEufOX1362KqxMy3ZdvJOOjMMK7MtkAY=
------END CERTIFICATE-----
-
-================================================================
-C: SE
-O: AddTrust AB
-OU: AddTrust TTP Network
-CN: AddTrust Qualified CA Root
------BEGIN CERTIFICATE-----
-MIIEHjCCAwagAwIBAgIBATANBgkqhkiG9w0BAQUFADBnMQswCQYDVQQGEwJTRTEU
-MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3
-b3JrMSMwIQYDVQQDExpBZGRUcnVzdCBRdWFsaWZpZWQgQ0EgUm9vdDAeFw0wMDA1
-MzAxMDQ0NTBaFw0yMDA1MzAxMDQ0NTBaMGcxCzAJBgNVBAYTAlNFMRQwEgYDVQQK
-EwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5ldHdvcmsxIzAh
-BgNVBAMTGkFkZFRydXN0IFF1YWxpZmllZCBDQSBSb290MIIBIjANBgkqhkiG9w0B
-AQEFAAOCAQ8AMIIBCgKCAQEA5B6a/twJWoekn0e+EV+vhDTbYjx5eLfpMLXsDBwq
-xBb/4Oxx64r1EW7tTw2R0hIYLUkVAcKkIhPHEWT/IhKauY5cLwjPcWqzZwFZ8V1G
-87B4pfYOQnrjfxvM0PC3KP0q6p6zsLkEqv32x7SxuCqg+1jxGaBvcCV+PmlKfw8i
-2O+tCBGaKZnhqkRFmhJePp1tUvznoD1oL/BLcHwTOK28FSXx1s6rosAx1i+f4P8U
-WfyEk9mHfExUE+uf0S0R+Bg6Ot4l2ffTQO2kBhLEO+GRwVY18BTcZTYJbqukB8c1
-0cIDMzZbdSZtQvESa0NvS3GU+jQd7RNuyoB/mC9suWXY6QIDAQABo4HUMIHRMB0G
-A1UdDgQWBBQ5lYtii1zJ1IC6WA+XPxUIQ8yYpzALBgNVHQ8EBAMCAQYwDwYDVR0T
-AQH/BAUwAwEB/zCBkQYDVR0jBIGJMIGGgBQ5lYtii1zJ1IC6WA+XPxUIQ8yYp6Fr
-pGkwZzELMAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQL
-ExRBZGRUcnVzdCBUVFAgTmV0d29yazEjMCEGA1UEAxMaQWRkVHJ1c3QgUXVhbGlm
-aWVkIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBABmrder4i2VhlRO6aQTv
-hsoToMeqT2QbPxj2qC0sVY8FtzDqQmodwCVRLae/DLPt7wh/bDxGGuoYQ992zPlm
-hpwsaPXpF/gxsxjE1kh9I0xowX67ARRvxdlu3rsEQmr49lx95dr6h+sNNVJn0J6X
-dgWTP5XHAeZpVTh/EGGZyeNfpso+gmNIquIISD6q8rKFYqa0p9m9N5xotS1WfbC3
-P6CxB9bpT9zeRXEwMn8bLgn5v1Kh7sKAPgZcLlVAwRv1cEWw3F369nJad9Jjzc9Y
-iQBCYz95OdBEsIJuQRno3eDBiFrRHnGTHyQwdOUeqN48Jzd/g66ed8/wMLH/S5no
-xqE=
------END CERTIFICATE-----
-
-================================================================
-C: SK
-L: Bratislava
-O: Disig a.s.
-CN: CA Disig
------BEGIN CERTIFICATE-----
-MIIEDzCCAvegAwIBAgIBATANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQGEwJTSzET
-MBEGA1UEBxMKQnJhdGlzbGF2YTETMBEGA1UEChMKRGlzaWcgYS5zLjERMA8GA1UE
-AxMIQ0EgRGlzaWcwHhcNMDYwMzIyMDEzOTM0WhcNMTYwMzIyMDEzOTM0WjBKMQsw
-CQYDVQQGEwJTSzETMBEGA1UEBxMKQnJhdGlzbGF2YTETMBEGA1UEChMKRGlzaWcg
-YS5zLjERMA8GA1UEAxMIQ0EgRGlzaWcwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
-ggEKAoIBAQCS9jHBfYj9mQGp2HvycXXxMcbzdWb6UShGhJd4NLxs/LxFWYgmGErE
-Nx+hSkS943EE9UQX4j/8SFhvXJ56CbpRNyIjZkMhsDxkovhqFQ4/61HhVKndBpnX
-mjxUizkDPw/Fzsbrg3ICqB9x8y34dQjbYkzo+s7552oftms1grrijxaSfQUMbEYD
-XcDtab86wYqg6I7ZuUUohwjstMoVvoLdtUSLLa2GDGhibYVW8qwUYzrG0ZmsNHhW
-S8+2rT+MitcE5eN4TPWGqvWP+j1scaMtymfraHtuM6kMgiioTGohQBUgDCZbg8Kp
-FhXAJIJdKxatymP2dACw30PEEGBWZ2NFAgMBAAGjgf8wgfwwDwYDVR0TAQH/BAUw
-AwEB/zAdBgNVHQ4EFgQUjbJJaJ1yCCW5wCf1UJNWSEZx+Y8wDgYDVR0PAQH/BAQD
-AgEGMDYGA1UdEQQvMC2BE2Nhb3BlcmF0b3JAZGlzaWcuc2uGFmh0dHA6Ly93d3cu
-ZGlzaWcuc2svY2EwZgYDVR0fBF8wXTAtoCugKYYnaHR0cDovL3d3dy5kaXNpZy5z
-ay9jYS9jcmwvY2FfZGlzaWcuY3JsMCygKqAohiZodHRwOi8vY2EuZGlzaWcuc2sv
-Y2EvY3JsL2NhX2Rpc2lnLmNybDAaBgNVHSAEEzARMA8GDSuBHpGT5goAAAABAQEw
-DQYJKoZIhvcNAQEFBQADggEBAF00dGFMrzvY/59tWDYcPQuBDRIrRhCA/ec8J9B6
-yKm2fnQwM6M6int0wHl5QpNt/7EpFIKrIYwvF/k/Ji/1WcbvgAa3mkkp7M5+cTxq
-EEHA9tOasnxakZzArFvITV734VP/Q3f8nktnbNfzg9Gg4H8l37iYC5oyOGwwoPP/
-CBUz91BKez6jPiCp3C9WgArtQVCwyfTssuMmRAAOb54GvCKWU3BlxFAKRmukLyeB
-EicTXxChds6KezfqwzlhA5WYOudsiCUI/HloDYd9Yvi0X/vF2Ey9WLw/Q1vUHgFN
-PGO+I++MzVpQuGhU+QqZMxEA4Z7CRneC9VkGjCFMhwnN5ag=
------END CERTIFICATE-----
-
-================================================================
-C: SK
-L: Bratislava
-O: Disig a.s.
-CN: CA Disig Root R1
------BEGIN CERTIFICATE-----
-MIIFaTCCA1GgAwIBAgIJAMMDmu5QkG4oMA0GCSqGSIb3DQEBBQUAMFIxCzAJBgNV
-BAYTAlNLMRMwEQYDVQQHEwpCcmF0aXNsYXZhMRMwEQYDVQQKEwpEaXNpZyBhLnMu
-MRkwFwYDVQQDExBDQSBEaXNpZyBSb290IFIxMB4XDTEyMDcxOTA5MDY1NloXDTQy
-MDcxOTA5MDY1NlowUjELMAkGA1UEBhMCU0sxEzARBgNVBAcTCkJyYXRpc2xhdmEx
-EzARBgNVBAoTCkRpc2lnIGEucy4xGTAXBgNVBAMTEENBIERpc2lnIFJvb3QgUjEw
-ggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCqw3j33Jijp1pedxiy3QRk
-D2P9m5YJgNXoqqXinCaUOuiZc4yd39ffg/N4T0Dhf9Kn0uXKE5Pn7cZ3Xza1lK/o
-OI7bm+V8u8yN63Vz4STN5qctGS7Y1oprFOsIYgrY3LMATcMjfF9DCCMyEtztDK3A
-fQ+lekLZWnDZv6fXARz2m6uOt0qGeKAeVjGu74IKgEH3G8muqzIm1Cxr7X1r5OJe
-IgpFy4QxTaz+29FHuvlglzmxZcfe+5nkCiKxLU3lSCZpq+Kq8/v8kiky6bM+TR8n
-oc2OuRf7JT7JbvN32g0S9l3HuzYQ1VTW8+DiR0jm3hTaYVKvJrT1cU/J19IG32PK
-/yHoWQbgCNWEFVP3Q+V8xaCJmGtzxmjOZd69fwX3se72V6FglcXM6pM6vpmumwKj
-rckWtc7dXpl4fho5frLABaTAgqWjR56M6ly2vGfb5ipN0gTco65F97yLnByn1tUD
-3AjLLhbKXEAz6GfDLuemROoRRRw1ZS0eRWEkG4IupZ0zXWX4Qfkuy5Q/H6MMMSRE
-7cderVC6xkGbrPAXZcD4XW9boAo0PO7X6oifmPmvTiT6l7Jkdtqr9O3jw2Dv1fkC
-yC2fg69naQanMVXVz0tv/wQFx1isXxYb5dKj6zHbHzMVTdDypVP1y+E9Tmgt2BLd
-qvLmTZtJ5cUoobqwWsagtQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1Ud
-DwEB/wQEAwIBBjAdBgNVHQ4EFgQUiQq0OJMa5qvum5EY+fU8PjXQ04IwDQYJKoZI
-hvcNAQEFBQADggIBADKL9p1Kyb4U5YysOMo6CdQbzoaz3evUuii+Eq5FLAR0rBNR
-xVgYZk2C2tXck8An4b58n1KeElb21Zyp9HWc+jcSjxyT7Ff+Bw+r1RL3D65hXlaA
-SfX8MPWbTx9BLxyE04nH4toCdu0Jz2zBuByDHBb6lM19oMgY0sidbvW9adRtPTXo
-HqJPYNcHKfyyo6SdbhWSVhlMCrDpfNIZTUJG7L399ldb3Zh+pE3McgODWF3vkzpB
-emOqfDqo9ayk0d2iLbYq/J8BjuIQscTK5GfbVSUZP/3oNn6z4eGBrxEWi1CXYBmC
-AMBrTXO40RMHPuq2MU/wQppt4hF05ZSsjYSVPCGvxdpHyN85YmLLW1AL14FABZyb
-7bq2ix4Eb5YgOe2kfSnbSM6C3NQCjR0EMVrHS/BsYVLXtFHCgWzN4funodKSds+x
-DzdYpPJScWc/DIh4gInByLUfkmO+p3qKViwaqKactV2zY9ATIKHrkWzQjX2v3wvk
-F7mGnjixlAxYjOBVqjtjbZqJYLhkKpLGN/R+Q0O3c+gB53+XD9fyexn9GtePyfqF
-a3qdnom2piiZk4hA9z7NUaPK6u95RyG1/jLix8NRb76AdPCkwzryT+lf3xkK8jsT
-Q6wxpLPn6/wY1gGp8yqPNg7rtLG8t0zJa7+h89n07eLw4+1knj0vllJPgFOL
------END CERTIFICATE-----
-
-================================================================
-C: SK
-L: Bratislava
-O: Disig a.s.
-CN: CA Disig Root R2
------BEGIN CERTIFICATE-----
-MIIFaTCCA1GgAwIBAgIJAJK4iNuwisFjMA0GCSqGSIb3DQEBCwUAMFIxCzAJBgNV
-BAYTAlNLMRMwEQYDVQQHEwpCcmF0aXNsYXZhMRMwEQYDVQQKEwpEaXNpZyBhLnMu
-MRkwFwYDVQQDExBDQSBEaXNpZyBSb290IFIyMB4XDTEyMDcxOTA5MTUzMFoXDTQy
-MDcxOTA5MTUzMFowUjELMAkGA1UEBhMCU0sxEzARBgNVBAcTCkJyYXRpc2xhdmEx
-EzARBgNVBAoTCkRpc2lnIGEucy4xGTAXBgNVBAMTEENBIERpc2lnIFJvb3QgUjIw
-ggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCio8QACdaFXS1tFPbCw3Oe
-NcJxVX6B+6tGUODBfEl45qt5WDza/3wcn9iXAng+a0EE6UG9vgMsRfYvZNSrXaNH
-PWSb6WiaxswbP7q+sos0Ai6YVRn8jG+qX9pMzk0DIaPY0jSTVpbLTAwAFjxfGs3I
-x2ymrdMxp7zo5eFm1tL7A7RBZckQrg4FY8aAamkw/dLukO8NJ9+flXP04SXabBbe
-QTg06ov80egEFGEtQX6sx3dOy1FU+16SGBsEWmjGycT6txOgmLcRK7fWV8x8nhfR
-yyX+hk4kLlYMeE2eARKmK6cBZW58Yh2EhN/qwGu1pSqVg8NTEQxzHQuyRpDRQjrO
-QG6Vrf/GlK1ul4SOfW+eioANSW1z4nuSHsPzwfPrLgVv2RvPN3YEyLRa5Beny912
-H9AZdugsBbPWnDTYltxhh5EF5EQIM8HauQhl1K6yNg3ruji6DOWbnuuNZt2Zz9aJ
-QfYEkoopKW1rOhzndX0CcQ7zwOe9yxndnWCywmZgtrEE7snmhrmaZkCo5xHtgUUD
-i/ZnWejBBhG93c+AAk9lQHhcR1DIm+YfgXvkRKhbhZri3lrVx/k6RGZL5DJUfORs
-nLMOPReisjQS1n6yqEm70XooQL6iFh/f5DcfEXP7kAplQ6INfPgGAVUzfbANuPT1
-rqVCV3w2EYx7XsQDnYx5nQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1Ud
-DwEB/wQEAwIBBjAdBgNVHQ4EFgQUtZn4r7CU9eMg1gqtzk5WpC5uQu0wDQYJKoZI
-hvcNAQELBQADggIBACYGXnDnZTPIgm7ZnBc6G3pmsgH2eDtpXi/q/075KMOYKmFM
-tCQSin1tERT3nLXK5ryeJ45MGcipvXrA1zYObYVybqjGom32+nNjf7xueQgcnYqf
-GopTpti72TVVsRHFqQOzVju5hJMiXn7B9hJSi+osZ7z+Nkz1uM/Rs0mSO9MpDpkb
-lvdhuDvEK7Z4bLQjb/D907JedR+Zlais9trhxTF7+9FGs9K8Z7RiVLoJ92Owk6Ka
-+elSLotgEqv89WBW7xBci8QaQtyDW2QOy7W81k/BfDxujRNt+3vrMNDcTa/F1bal
-TFtxyegxvug4BkihGuLq0t4SOVga/4AOgnXmt8kHbA7v/zjxmHHEt38OFdAlab0i
-nSvtBfZGR6ztwPDUO+Ls7pZbkBNOHlY667DvlruWIxG68kOGdGSVyCh13x01utI3
-gzhTODY7z2zp+WsO0PsE6E9312UBeIYMej4hYvF/Y3EMyZ9E26gnonW+boE+18Dr
-G5gPcFw0sorMwIUY6256s/daoQe/qUKS82Ail+QUoQebTnbAjn39pCXHR+3/H3Os
-zMOl6W8KjptlwlCFtaOgUxLMVYdh84GuEEZhvUQhuMI9dM9+JDX6HAcOmz0iyu8x
-L4ysEr3vQCj8KWefshNPZiTEUxnpHikV7+ZtsH8tZ/3zbBt1RqPlShfppNcL
------END CERTIFICATE-----
-
-================================================================
-C: TR
-L: Gebze - Kocaeli
-O: Türkiye Bilimsel ve Teknolojik Araştırma Kurumu - TÜBİTAK
-OU: Ulusal Elektronik ve Kriptoloji Araştırma Enstitüsü - UEKAE
-OU: Kamu Sertifikasyon Merkezi
-CN: TÜBİTAK UEKAE Kök Sertifika Hizmet Sağlayıcısı - Sürüm 3
------BEGIN CERTIFICATE-----
-MIIFFzCCA/+gAwIBAgIBETANBgkqhkiG9w0BAQUFADCCASsxCzAJBgNVBAYTAlRS
-MRgwFgYDVQQHDA9HZWJ6ZSAtIEtvY2FlbGkxRzBFBgNVBAoMPlTDvHJraXllIEJp
-bGltc2VsIHZlIFRla25vbG9qaWsgQXJhxZ90xLFybWEgS3VydW11IC0gVMOcQsSw
-VEFLMUgwRgYDVQQLDD9VbHVzYWwgRWxla3Ryb25payB2ZSBLcmlwdG9sb2ppIEFy
-YcWfdMSxcm1hIEVuc3RpdMO8c8O8IC0gVUVLQUUxIzAhBgNVBAsMGkthbXUgU2Vy
-dGlmaWthc3lvbiBNZXJrZXppMUowSAYDVQQDDEFUw5xCxLBUQUsgVUVLQUUgS8O2
-ayBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsSAtIFPDvHLDvG0gMzAe
-Fw0wNzA4MjQxMTM3MDdaFw0xNzA4MjExMTM3MDdaMIIBKzELMAkGA1UEBhMCVFIx
-GDAWBgNVBAcMD0dlYnplIC0gS29jYWVsaTFHMEUGA1UECgw+VMO8cmtpeWUgQmls
-aW1zZWwgdmUgVGVrbm9sb2ppayBBcmHFn3TEsXJtYSBLdXJ1bXUgLSBUw5xCxLBU
-QUsxSDBGBgNVBAsMP1VsdXNhbCBFbGVrdHJvbmlrIHZlIEtyaXB0b2xvamkgQXJh
-xZ90xLFybWEgRW5zdGl0w7xzw7wgLSBVRUtBRTEjMCEGA1UECwwaS2FtdSBTZXJ0
-aWZpa2FzeW9uIE1lcmtlemkxSjBIBgNVBAMMQVTDnELEsFRBSyBVRUtBRSBLw7Zr
-IFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxIC0gU8O8csO8bSAzMIIB
-IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAim1L/xCIOsP2fpTo6iBkcK4h
-gb46ezzb8R1Sf1n68yJMlaCQvEhOEav7t7WNeoMojCZG2E6VQIdhn8WebYGHV2yK
-O7Rm6sxA/OOqbLLLAdsyv9Lrhc+hDVXDWzhXcLh1xnnRFDDtG1hba+818qEhTsXO
-fJlfbLm4IpNQp81McGq+agV/E5wrHur+R84EpW+sky58K5+eeROR6Oqeyjh1jmKw
-lZMq5d/pXpduIF9fhHpEORlAHLpVK/swsoHvhOPc7Jg4OQOFCKlUAwUp8MmPi+oL
-hmUZEdPpCSPeaJMDyTYcIW7OjGbxmTDY17PDHfiBLqi9ggtm/oLL4eAagsNAgQID
-AQABo0IwQDAdBgNVHQ4EFgQUvYiHyY/2pAoLquvF/pEjnatKijIwDgYDVR0PAQH/
-BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAB18+kmP
-NOm3JpIWmgV050vQbTlswyb2zrgxvMTfvCr4N5EY3ATIZJkrGG2AA1nJrvhY0D7t
-wyOfaTyGOBye79oneNGEN3GKPEs5z35FBtYt2IpNeBLWrcLTy9LQQfMmNkqblWwM
-7uXRQydmwYj3erMgbOqwaSvHIOgMA8RBBZniP+Rr+KCGgceExh/VS4ESshYhLBOh
-gLJeDEoTniDYYkCrkOpkSi+sDQESeUWoL4cZaMjihccwsnX5OD+ywJO0a+IDRM5n
-oN+J1q2MdqMTw5RhK2vZbMEHCiIHhWyFJEapvj+LeISCfiQMnf2BN+MlqO02TpUs
-yZyQ2uypQjyttgI=
------END CERTIFICATE-----
-
-================================================================
-C: TR
-O: Elektronik Bilgi Guvenligi A.S.
-CN: e-Guven Kok Elektronik Sertifika Hizmet Saglayicisi
------BEGIN CERTIFICATE-----
-MIIDtjCCAp6gAwIBAgIQRJmNPMADJ72cdpW56tustTANBgkqhkiG9w0BAQUFADB1
-MQswCQYDVQQGEwJUUjEoMCYGA1UEChMfRWxla3Ryb25payBCaWxnaSBHdXZlbmxp
-Z2kgQS5TLjE8MDoGA1UEAxMzZS1HdXZlbiBLb2sgRWxla3Ryb25payBTZXJ0aWZp
-a2EgSGl6bWV0IFNhZ2xheWljaXNpMB4XDTA3MDEwNDExMzI0OFoXDTE3MDEwNDEx
-MzI0OFowdTELMAkGA1UEBhMCVFIxKDAmBgNVBAoTH0VsZWt0cm9uaWsgQmlsZ2kg
-R3V2ZW5saWdpIEEuUy4xPDA6BgNVBAMTM2UtR3V2ZW4gS29rIEVsZWt0cm9uaWsg
-U2VydGlmaWthIEhpem1ldCBTYWdsYXlpY2lzaTCCASIwDQYJKoZIhvcNAQEBBQAD
-ggEPADCCAQoCggEBAMMSIJ6wXgBljU5Gu4Bc6SwGl9XzcslwuedLZYDBS75+PNdU
-MZTe1RK6UxYC6lhj71vY8+0qGqpxSKPcEC1fX+tcS5yWCEIlKBHMilpiAVDV6wlT
-L/jDj/6z/P2douNffb7tC+Bg62nsM+3YjfsSSYMAyYuXjDtzKjKzEve5TfL0TW3H
-5tYmNwjy2f1rXKPlSFxYvEK+A1qBuhw1DADT9SN+cTAIJjjcJRFHLfO6IxClv7wC
-90Nex/6wN1CZew+TzuZDLMN+DfIcQ2Zgy2ExR4ejT669VmxMvLz4Bcpk9Ok0oSy1
-c+HCPujIyTQlCFzz7abHlJ+tiEMl1+E5YP6sOVkCAwEAAaNCMEAwDgYDVR0PAQH/
-BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFJ/uRLOU1fqRTy7ZVZoE
-VtstxNulMA0GCSqGSIb3DQEBBQUAA4IBAQB/X7lTW2M9dTLn+sR0GstG30ZpHFLP
-qk/CaOv/gKlR6D1id4k9CnU58W5dF4dvaAXBlGzZXd/aslnLpRCKysw5zZ/rTt5S
-/wzw9JKp8mxTq5vSR6AfdPebmvEvFZ96ZDAYBzwqD2fK/A+JYZ1lpTzlvBNbCNvj
-/+27BrtqBrF6T2XGgv0enIu1De5Iu7i9qgi0+6N8y5/NkHZchpZ4Vwpm+Vganf2X
-KWDeEaaQHBkc7gGWIjQ0LpH5t8Qn0Xvmv/uARFoW5evg1Ao4vOSR49XrXMGs3xtq
-fJ7lddK2l4fbzIcrQzqECK+rPNv3PGYxhrCdU3nt+CPeQuMtgvEP5fqX
------END CERTIFICATE-----
-
-================================================================
-C: TW
-O: Chunghwa Telecom Co., Ltd.
-OU: ePKI Root Certification Authority
------BEGIN CERTIFICATE-----
-MIIFsDCCA5igAwIBAgIQFci9ZUdcr7iXAF7kBtK8nTANBgkqhkiG9w0BAQUFADBe
-MQswCQYDVQQGEwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0
-ZC4xKjAoBgNVBAsMIWVQS0kgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe
-Fw0wNDEyMjAwMjMxMjdaFw0zNDEyMjAwMjMxMjdaMF4xCzAJBgNVBAYTAlRXMSMw
-IQYDVQQKDBpDaHVuZ2h3YSBUZWxlY29tIENvLiwgTHRkLjEqMCgGA1UECwwhZVBL
-SSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0BAQEF
-AAOCAg8AMIICCgKCAgEA4SUP7o3biDN1Z82tH306Tm2d0y8U82N0ywEhajfqhFAH
-SyZbCUNsIZ5qyNUD9WBpj8zwIuQf5/dqIjG3LBXy4P4AakP/h2XGtRrBp0xtInAh
-ijHyl3SJCRImHJ7K2RKilTza6We/CKBk49ZCt0Xvl/T29de1ShUCWH2YWEtgvM3X
-DZoTM1PRYfl61dd4s5oz9wCGzh1NlDivqOx4UXCKXBCDUSH3ET00hl7lSM2XgYI1
-TBnsZfZrxQWh7kcT1rMhJ5QQCtkkO7q+RBNGMD+XPNjX12ruOzjjK9SXDrkb5wdJ
-fzcq+Xd4z1TtW0ado4AOkUPB1ltfFLqfpo0kR0BZv3I4sjZsN/+Z0V0OWQqraffA
-sgRFelQArr5T9rXn4fg8ozHSqf4hUmTFpmfwdQcGlBSBVcYn5AGPF8Fqcde+S/uU
-WH1+ETOxQvdibBjWzwloPn9s9h6PYq2lY9sJpx8iQkEeb5mKPtf5P0B6ebClAZLS
-nT0IFaUQAS2zMnaolQ2zepr7BxB4EW/hj8e6DyUadCrlHJhBmd8hh+iVBmoKs2pH
-dmX2Os+PYhcZewoozRrSgx4hxyy/vv9haLdnG7t4TY3OZ+XkwY63I2binZB1NJip
-NiuKmpS5nezMirH4JYlcWrYvjB9teSSnUmjDhDXiZo1jDiVN1Rmy5nk3pyKdVDEC
-AwEAAaNqMGgwHQYDVR0OBBYEFB4M97Zn8uGSJglFwFU5Lnc/QkqiMAwGA1UdEwQF
-MAMBAf8wOQYEZyoHAAQxMC8wLQIBADAJBgUrDgMCGgUAMAcGBWcqAwAABBRFsMLH
-ClZ87lt4DJX5GFPBphzYEDANBgkqhkiG9w0BAQUFAAOCAgEACbODU1kBPpVJufGB
-uvl2ICO1J2B01GqZNF5sAFPZn/KmsSQHRGoqxqWOeBLoR9lYGxMqXnmbnwoqZ6Yl
-PwZpVnPDimZI+ymBV3QGypzqKOg4ZyYr8dW1P2WT+DZdjo2NQCCHGervJ8A9tDkP
-JXtoUHRVnAxZfVo9QZQlUgjgRywVMRnVvwdVxrsStZf0X4OFunHB2WyBEXYKCrC/
-gpf36j36+uwtqSiUO1bd0lEursC9CBWMd1I0ltabrNMdjmEPNXubrjlpC2JgQCA2
-j6/7Nu4tCEoduL+bXPjqpRugc6bY+G7gMwRfaKonh+3ZwZCc7b3jajWvY9+rGNm6
-5ulK6lCKD2GTHuItGeIwlDWSXQ62B68ZgI9HkFFLLk3dheLSClIKF5r8GrBQAuUB
-o2M3IUxExJtRmREOc5wGj1QupyheRDmHVi03vYVElOEMSyycw5KFNGHLD7ibSkNS
-/jQ6fbjpKdx2qcgw+BRxgMYeNkh0IkFch4LoGHGLQYlE535YW6i4jRPpp2zDR+2z
-Gp1iro2C6pSe3VkQw63d4k3jMdXH7OjysP6SHhYKGvzZ8/gntsm+HbRsZJB/9OTE
-W9c3rkIO3aQab3yIVMUWbuF6aC74Or8NpDyJO3inTmODBCEIZ43ygknQW/2xzQ+D
-hNQ+IIX3Sj0rnP0qCglN6oH4EZw=
------END CERTIFICATE-----
-
-================================================================
-C: TW
-O: Government Root Certification Authority
------BEGIN CERTIFICATE-----
-MIIFcjCCA1qgAwIBAgIQH51ZWtcvwgZEpYAIaeNe9jANBgkqhkiG9w0BAQUFADA/
-MQswCQYDVQQGEwJUVzEwMC4GA1UECgwnR292ZXJubWVudCBSb290IENlcnRpZmlj
-YXRpb24gQXV0aG9yaXR5MB4XDTAyMTIwNTEzMjMzM1oXDTMyMTIwNTEzMjMzM1ow
-PzELMAkGA1UEBhMCVFcxMDAuBgNVBAoMJ0dvdmVybm1lbnQgUm9vdCBDZXJ0aWZp
-Y2F0aW9uIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIB
-AJoluOzMonWoe/fOW1mKydGGEghU7Jzy50b2iPN86aXfTEc2pBsBHH8eV4qNw8XR
-IePaJD9IK/ufLqGU5ywck9G/GwGHU5nOp/UKIXZ3/6m3xnOUT0b3EEk3+qhZSV1q
-gQdW8or5BtD3cCJNtLdBuTK4sfCxw5w/cP1T3YGq2GN49thTbqGsaoQkclSGxtKy
-yhwOeYHWtXBiCAEuTk8O1RGvqa/lmr/czIdtJuTJV6L7lvnM4T9TjGxMfptTCAts
-F/tnyMKtsc2AtJfcdgEWFelq16TheEfOhtX7MfP6Mb40qij7cEwdScevLJ1tZqa2
-jWR+tSBqnTuBto9AAGdLiYa4zGX+FVPpBMHWXx1E1wovJ5pGfaENda1UhhXcSTvx
-ls4Pm6Dso3pdvtUqdULle96ltqqvKKyskKw4t9VoNSZ63Pc78/1Fm9G7Q3hub/FC
-VGqY8A2tl+lSXunVanLeavcbYBT0peS2cWeqH+riTcFCQP5nRhc4L0c/cZyu5SHK
-YS1tB6iEfC3uUSXxY5Ce/eFXiGvviiNtsea9P63RPZYLhY3Naye7twWb7LuRqQoH
-EgKXTiCQ8P8NHuJBO9NAOueNXdpm5AKwB1KYXA6OM5zCppX7VRluTI6uSw+9wThN
-Xo+EHWbNxWCWtFJaBYmOlXqYwZE8lSOyDvR5tMl8wUohAgMBAAGjajBoMB0GA1Ud
-DgQWBBTMzO/MKWCkO7GStjz6MmKPrCUVOzAMBgNVHRMEBTADAQH/MDkGBGcqBwAE
-MTAvMC0CAQAwCQYFKw4DAhoFADAHBgVnKgMAAAQUA5vwIhP/lSg209yewDL7MTqK
-UWUwDQYJKoZIhvcNAQEFBQADggIBAECASvomyc5eMN1PhnR2WPWus4MzeKR6dBcZ
-TulStbngCnRiqmjKeKBMmo4sIy7VahIkv9Ro04rQ2JyftB8M3jh+Vzj8jeJPXgyf
-qzvS/3WXy6TjZwj/5cAWtUgBfen5Cv8b5Wppv3ghqMKnI6mGq3ZW6A4M9hPdKmaK
-ZEk9GhiHkASfQlK3T8v+R0F2Ne//AHY2RTKbxkaFXeIksB7jSJaYV0eUVXoPQbFE
-JPPB/hprv4j9wabak2BegUqZIJxIZhm1AHlUD7gsL0u8qV1bYH+Mh6XgUmMqvtg7
-hUAV/h62ZT/FS9p+tXo1KaMuephgIqP0fSdOLeq0dDzpD6QzDxARvBMB1uUO07+1
-EqLhRSPAzAhuYbeJq4PjJB7mXQfnHyA+z2fI56wwbSdLaG5LKlwCCDTb+HbkZ6Mm
-nD+iMsJKxYEYMRBWqoTvLQr/uB930r+lWKBi5NdLkXWNiYCYfm3LU05er/ayl4WX
-udpVBrkk7tfGOB5jGxI7leFYrPLfhNVfmS8NVVvmONsuP3LpSIXLuykTjx44Vbnz
-ssQwmSNOXfJIoRIM3BKQCZBUkQM8R+XVyWXgt0t97EfTsws+rZ7QdAAO671RrcDe
-LMDDav7v3Aun+kbfYNucpllQdSNpc5Oy+fwC00fmcc4QAu4njIT/rEUNE1yDMuAl
-pYYsfPQS
------END CERTIFICATE-----
-
-================================================================
-C: TW
-O: TAIWAN-CA
-OU: Root CA
-CN: TWCA Root Certification Authority
------BEGIN CERTIFICATE-----
-MIIDezCCAmOgAwIBAgIBATANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJUVzES
-MBAGA1UECgwJVEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFU
-V0NBIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDgwODI4MDcyNDMz
-WhcNMzAxMjMxMTU1OTU5WjBfMQswCQYDVQQGEwJUVzESMBAGA1UECgwJVEFJV0FO
-LUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NBIFJvb3QgQ2VydGlm
-aWNhdGlvbiBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
-AQCwfnK4pAOU5qfeCTiRShFAh6d8WWQUe7UREN3+v9XAu1bihSX0NXIP+FPQQeFE
-AcK0HMMxQhZHhTMidrIKbw/lJVBPhYa+v5guEGcevhEFhgWQxFnQfHgQsIBct+HH
-K3XLfJ+utdGdIzdjp9xCoi2SBBtQwXu4PhvJVgSLL1KbralW6cH/ralYhzC2gfeX
-RfwZVzsrb+RH9JlF/h3x+JejiB03HFyP4HYlmlD4oFT/RJB2I9IyxsOrBr/8+7/z
-rX2SYgJbKdM1o5OaQ2RgXbL6Mv87BK9NQGr5x+PvI/1ry+UPizgN7gr8/g+YnzAx
-3WxSZfmLgb4i4RxYA7qRG4kHAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV
-HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqOFsmjd6LWvJPelSDGRjjCDWmujANBgkq
-hkiG9w0BAQUFAAOCAQEAPNV3PdrfibqHDAhUaiBQkr6wQT25JmSDCi/oQMCXKCeC
-MErJk/9q56YAf4lCmtYR5VPOL8zy2gXE/uJQxDqGfczafhAJO5I1KlOy/usrBdls
-XebQ79NqZp4VKIV66IIArB6nCWlWQtNoURi+VJq/REG6Sb4gumlc7rh3zc5sH62D
-lhh9DrUUOYTxKOkto557HnpyWoOzeW/vtPzQCqVYT0bf+215WfKEIlKuD8z7fDvn
-aspHYcN6+NOSBB+4IIThNlQWx0DeO4pz3N/GCUzf7Nr/1FNCocnyYh0igzyXxfkZ
-YiesZSLX0zzG5Y6yU8xJzrww/nsOM5D77dIUkR8Hrw==
------END CERTIFICATE-----
-
-================================================================
-C: US
-O: AffirmTrust
-CN: AffirmTrust Commercial
------BEGIN CERTIFICATE-----
-MIIDTDCCAjSgAwIBAgIId3cGJyapsXwwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UE
-BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVz
-dCBDb21tZXJjaWFsMB4XDTEwMDEyOTE0MDYwNloXDTMwMTIzMTE0MDYwNlowRDEL
-MAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZp
-cm1UcnVzdCBDb21tZXJjaWFsMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
-AQEA9htPZwcroRX1BiLLHwGy43NFBkRJLLtJJRTWzsO3qyxPxkEylFf6EqdbDuKP
-Hx6GGaeqtS25Xw2Kwq+FNXkyLbscYjfysVtKPcrNcV/pQr6U6Mje+SJIZMblq8Yr
-ba0F8PrVC8+a5fBQpIs7R6UjW3p6+DM/uO+Zl+MgwdYoic+U+7lF7eNAFxHUdPAL
-MeIrJmqbTFeurCA+ukV6BfO9m2kVrn1OIGPENXY6BwLJN/3HR+7o8XYdcxXyl6S1
-yHp52UKqK39c/s4mT6NmgTWvRLpUHhwwMmWd5jyTXlBOeuM61G7MGvv50jeuJCqr
-VwMiKA1JdX+3KNp1v47j3A55MQIDAQABo0IwQDAdBgNVHQ4EFgQUnZPGU4teyq8/
-nx4P5ZmVvCT2lI8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJ
-KoZIhvcNAQELBQADggEBAFis9AQOzcAN/wr91LoWXym9e2iZWEnStB03TX8nfUYG
-XUPGhi4+c7ImfU+TqbbEKpqrIZcUsd6M06uJFdhrJNTxFq7YpFzUf1GO7RgBsZNj
-vbz4YYCanrHOQnDiqX0GJX0nof5v7LMeJNrjS1UaADs1tDvZ110w/YETifLCBivt
-Z8SOyUOyXGsViQK8YvxO8rUzqrJv0wqiUOP2O+guRMLbZjipM1ZI8W0bM40NjD9g
-N53Tym1+NH4Nn3J2ixufcv1SNUFFApYvHLKac0khsUlHRUe072o0EclNmsxZt9YC
-nlpOZbWUrhvfKbAW8b8Angc6F2S1BLUjIZkKlTuXfO8=
------END CERTIFICATE-----
-
-================================================================
-C: US
-O: AffirmTrust
-CN: AffirmTrust Networking
------BEGIN CERTIFICATE-----
-MIIDTDCCAjSgAwIBAgIIfE8EORzUmS0wDQYJKoZIhvcNAQEFBQAwRDELMAkGA1UE
-BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVz
-dCBOZXR3b3JraW5nMB4XDTEwMDEyOTE0MDgyNFoXDTMwMTIzMTE0MDgyNFowRDEL
-MAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZp
-cm1UcnVzdCBOZXR3b3JraW5nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
-AQEAtITMMxcua5Rsa2FSoOujz3mUTOWUgJnLVWREZY9nZOIG41w3SfYvm4SEHi3y
-YJ0wTsyEheIszx6e/jarM3c1RNg1lho9Nuh6DtjVR6FqaYvZ/Ls6rnla1fTWcbua
-kCNrmreIdIcMHl+5ni36q1Mr3Lt2PpNMCAiMHqIjHNRqrSK6mQEubWXLviRmVSRL
-QESxG9fhwoXA3hA/Pe24/PHxI1Pcv2WXb9n5QHGNfb2V1M6+oF4nI979ptAmDgAp
-6zxG8D1gvz9Q0twmQVGeFDdCBKNwV6gbh+0t+nvujArjqWaJGctB+d1ENmHP4ndG
-yH329JKBNv3bNPFyfvMMFr20FQIDAQABo0IwQDAdBgNVHQ4EFgQUBx/S55zawm6i
-QLSwelAQUHTEyL0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJ
-KoZIhvcNAQEFBQADggEBAIlXshZ6qML91tmbmzTCnLQyFE2npN/svqe++EPbkTfO
-tDIuUFUaNU52Q3Eg75N3ThVwLofDwR1t3Mu1J9QsVtFSUzpE0nPIxBsFZVpikpzu
-QY0x2+c06lkh1QF612S4ZDnNye2v7UsDSKegmQGA3GWjNq5lWUhPgkvIZfFXHeVZ
-Lgo/bNjR9eUJtGxUAArgFU2HdW23WJZa3W3SAKD0m0i+wzekujbgfIeFlxoVot4u
-olu9rxj5kFDNcFn4J2dHy8egBzp90SxdbBk6ZrV9/ZFvgrG+CJPbFEfxojfHRZ48
-x3evZKiT3/Zpg4Jg8klCNO1aAFSFHBY2kgxc+qatv9s=
------END CERTIFICATE-----
-
-================================================================
-C: US
-O: AffirmTrust
-CN: AffirmTrust Premium
------BEGIN CERTIFICATE-----
-MIIFRjCCAy6gAwIBAgIIbYwURrGmCu4wDQYJKoZIhvcNAQEMBQAwQTELMAkGA1UE
-BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVz
-dCBQcmVtaXVtMB4XDTEwMDEyOTE0MTAzNloXDTQwMTIzMTE0MTAzNlowQTELMAkG
-A1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1U
-cnVzdCBQcmVtaXVtMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxBLf
-qV/+Qd3d9Z+K4/as4Tx4mrzY8H96oDMq3I0gW64tb+eT2TZwamjPjlGjhVtnBKAQ
-JG9dKILBl1fYSCkTtuG+kU3fhQxTGJoeJKJPj/CihQvL9Cl/0qRY7iZNyaqoe5rZ
-+jjeRFcV5fiMyNlI4g0WJx0eyIOFJbe6qlVBzAMiSy2RjYvmia9mx+n/K+k8rNrS
-s8PhaJyJ+HoAVt70VZVs+7pk3WKL3wt3MutizCaam7uqYoNMtAZ6MMgpv+0GTZe5
-HMQxK9VfvFMSF5yZVylmd2EhMQcuJUmdGPLu8ytxjLW6OQdJd/zvLpKQBY0tL3d7
-70O/Nbua2Plzpyzy0FfuKE4mX4+QaAkvuPjcBukumj5Rp9EixAqnOEhss/n/fauG
-V+O61oV4d7pD6kh/9ti+I20ev9E2bFhc8e6kGVQa9QPSdubhjL08s9NIS+LI+H+S
-qHZGnEJlPqQewQcDWkYtuJfzt9WyVSHvutxMAJf7FJUnM7/oQ0dG0giZFmA7mn7S
-5u046uwBHjxIVkkJx0w3AJ6IDsBz4W9m6XJHMD4Q5QsDyZpCAGzFlH5hxIrff4Ia
-C1nEWTJ3s7xgaVY5/bQGeyzWZDbZvUjthB9+pSKPKrhC9IK31FOQeE4tGv2Bb0TX
-OwF0lkLgAOIua+rF7nKsu7/+6qqo+Nz2snmKtmcCAwEAAaNCMEAwHQYDVR0OBBYE
-FJ3AZ6YMItkm9UWrpmVSESfYRaxjMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/
-BAQDAgEGMA0GCSqGSIb3DQEBDAUAA4ICAQCzV00QYk465KzquByvMiPIs0laUZx2
-KI15qldGF9X1Uva3ROgIRL8YhNILgM3FEv0AVQVhh0HctSSePMTYyPtwni94loMg
-Nt58D2kTiKV1NpgIpsbfrM7jWNa3Pt668+s0QNiigfV4Py/VpfzZotReBA4Xrf5B
-8OWycvpEgjNC6C1Y91aMYj+6QrCcDFx+LmUmXFNPALJ4fqENmS2NuB2OosSw/WDQ
-MKSOyARiqcTtNd56l+0OOF6SL5Nwpamcb6d9Ex1+xghIsV5n61EIJenmJWtSKZGc
-0jlzCFfemQa0W50QBuHCAKi4HEoCChTQwUHK+4w1IX2COPKpVJEZNZOUbWo6xbLQ
-u4mGk+ibyQ86p3q4ofB4Rvr8Ny/lioTz3/4E2aFooC8k4gmVBtWVyuEklut89pMF
-u+1z6S3RdTnX5yTb2E5fQ4+e0BQ5v1VwSJlXMbSc7kqYA5YwH2AG7hsj/oFgIxpH
-YoWlzBk0gG+zrBrjn/B7SK3VAdlntqlyk+otZrWyuOQ9PLLvTIzq6we/qzWaVYa8
-GKa1qF60g2xraUDTn9zxw2lrueFtCfTxqlB2Cnp9ehehVZZCmTEJ3WARjQUwfuaO
-RtGdFNrHF+QFlozEJLUbzxQHskD4o55BhrwE0GuWyCqANP2/7waj3VjFhT0+j/6e
-KeC2uAloGRwYQw==
------END CERTIFICATE-----
-
-================================================================
-C: US
-O: AffirmTrust
-CN: AffirmTrust Premium ECC
------BEGIN CERTIFICATE-----
-MIIB/jCCAYWgAwIBAgIIdJclisc/elQwCgYIKoZIzj0EAwMwRTELMAkGA1UEBhMC
-VVMxFDASBgNVBAoMC0FmZmlybVRydXN0MSAwHgYDVQQDDBdBZmZpcm1UcnVzdCBQ
-cmVtaXVtIEVDQzAeFw0xMDAxMjkxNDIwMjRaFw00MDEyMzExNDIwMjRaMEUxCzAJ
-BgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1UcnVzdDEgMB4GA1UEAwwXQWZmaXJt
-VHJ1c3QgUHJlbWl1bSBFQ0MwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQNMF4bFZ0D
-0KF5Nbc6PJJ6yhUczWLznCZcBz3lVPqj1swS6vQUX+iOGasvLkjmrBhDeKzQN8O9
-ss0s5kfiGuZjuD0uL3jET9v0D6RoTFVya5UdThhClXjMNzyR4ptlKymjQjBAMB0G
-A1UdDgQWBBSaryl6wBE1NSZRMADDav5A1a7WPDAPBgNVHRMBAf8EBTADAQH/MA4G
-A1UdDwEB/wQEAwIBBjAKBggqhkjOPQQDAwNnADBkAjAXCfOHiFBar8jAQr9HX/Vs
-aobgxCd05DhT1wV/GzTjxi+zygk8N53X57hG8f2h4nECMEJZh0PUUd+60wkyWs6I
-flc9nF9Ca/UHLbXwgpP5WW+uZPpY5Yse42O+tYHNbwKMeQ==
------END CERTIFICATE-----
-
-================================================================
-C: US
-O: America Online Inc.
-CN: America Online Root Certification Authority 1
------BEGIN CERTIFICATE-----
-MIIDpDCCAoygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEc
-MBoGA1UEChMTQW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBP
-bmxpbmUgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAxMB4XDTAyMDUyODA2
-MDAwMFoXDTM3MTExOTIwNDMwMFowYzELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0Ft
-ZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2EgT25saW5lIFJvb3Qg
-Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMTCCASIwDQYJKoZIhvcNAQEBBQADggEP
-ADCCAQoCggEBAKgv6KRpBgNHw+kqmP8ZonCaxlCyfqXfaE0bfA+2l2h9LaaLl+lk
-hsmj76CGv2BlnEtUiMJIxUo5vxTjWVXlGbR0yLQFOVwWpeKVBeASrlmLojNoWBym
-1BW32J/X3HGrfpq/m44zDyL9Hy7nBzbvYjnF3cu6JRQj3gzGPTzOggjmZj7aUTsW
-OqMFf6Dch9Wc/HKpoH145LcxVR5lu9RhsCFg7RAycsWSJR74kEoYeEfffjA3PlAb
-2xzTa5qGUwew76wGePiEmf4hjUyAtgyC9mZweRrTT6PP8c9GsEsPPt2IYriMqQko
-O3rHl+Ee5fSfwMCuJKDIodkP1nsmgmkyPacCAwEAAaNjMGEwDwYDVR0TAQH/BAUw
-AwEB/zAdBgNVHQ4EFgQUAK3Zo/Z59m50qX8zPYEX10zPM94wHwYDVR0jBBgwFoAU
-AK3Zo/Z59m50qX8zPYEX10zPM94wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEB
-BQUAA4IBAQB8itEfGDeC4Liwo+1WlchiYZwFos3CYiZhzRAW18y0ZTTQEYqtqKkF
-Zu90821fnZmv9ov761KyBZiibyrFVL0lvV+uyIbqRizBs73B6UlwGBaXCBOMIOAb
-LjpHyx7kADCVW/RFo8AasAFOq73AI25jP4BKxQft3OJvx8Fi8eNy1gTIdGcL+oir
-oQHIb/AUr9KZzVGTfu0uOMe9zkZQPXLjeSWdm4grECDdpbgyn43gKd8hdIaC2y+C
-MMbHNYaz+ZZfRtsMRf3zUMNvxsNIrUam4SdHCh0Om7bCd39j8uB9Gr784N/Xx6ds
-sPmuujz9dLQR6FgNgLzTqIA6me11zEZ7
------END CERTIFICATE-----
-
-================================================================
-C: US
-O: America Online Inc.
-CN: America Online Root Certification Authority 2
------BEGIN CERTIFICATE-----
-MIIFpDCCA4ygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEc
-MBoGA1UEChMTQW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBP
-bmxpbmUgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAyMB4XDTAyMDUyODA2
-MDAwMFoXDTM3MDkyOTE0MDgwMFowYzELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0Ft
-ZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2EgT25saW5lIFJvb3Qg
-Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIP
-ADCCAgoCggIBAMxBRR3pPU0Q9oyxQcngXssNt79Hc9PwVU3dxgz6sWYFas14tNwC
-206B89enfHG8dWOgXeMHDEjsJcQDIPT/DjsS/5uN4cbVG7RtIuOx238hZK+GvFci
-KtZHgVdEglZTvYYUAQv8f3SkWq7xuhG1m1hagLQ3eAkzfDJHA1zEpYNI9FdWboE2
-JxhP7JsowtS013wMPgwr38oE18aO6lhOqKSlGBxsRZijQdEt0sdtjRnxrXm3gT+9
-BoInLRBYBbV4Bbkv2wxrkJB+FFk4u5QkE+XRnRTf04JNRvCAOVIyD+OEsnpD8l7e
-Xz8d3eOyG6ChKiMDbi4BFYdcpnV1x5dhvt6G3NRI270qv0pV2uh9UPu0gBe4lL8B
-PeraunzgWGcXuVjgiIZGZ2ydEEdYMtA1fHkqkKJaEBEjNa0vzORKW6fIJ/KD3l67
-Xnfn6KVuY8INXWHQjNJsWiEOyiijzirplcdIz5ZvHZIlyMbGwcEMBawmxNJ10uEq
-Z8A9W6Wa6897GqidFEXlD6CaZd4vKL3Ob5Rmg0gp2OpljK+T2WSfVVcmv2/LNzGZ
-o2C7HK2JNDJiuEMhBnIMoVxtRsX6Kc8w3onccVvdtjc+31D1uAclJuW8tf48ArO3
-+L5DwYcRlJ4jbBeKuIonDFRH8KmzwICMoCfrHRnjB453cMor9H124HhnAgMBAAGj
-YzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFE1FwWg4u3OpaaEg5+31IqEj
-FNeeMB8GA1UdIwQYMBaAFE1FwWg4u3OpaaEg5+31IqEjFNeeMA4GA1UdDwEB/wQE
-AwIBhjANBgkqhkiG9w0BAQUFAAOCAgEAZ2sGuV9FOypLM7PmG2tZTiLMubekJcmn
-xPBUlgtk87FYT15R/LKXeydlwuXK5w0MJXti4/qftIe3RUavg6WXSIylvfEWK5t2
-LHo1YGwRgJfMqZJS5ivmae2p+DYtLHe/YUjRYwu5W1LtGLBDQiKmsXeu3mnFzccc
-obGlHBD7GL4acN3Bkku+KVqdPzW+5X1R+FXgJXUjhx5c3LqdsKyzadsXg8n33gy8
-CNyRnqjQ1xU3c6U1uPx+xURABsPr+CKAXEfOAuMRn0T//ZoyzH1kUQ7rVyZ2OuMe
-IjzCpjbdGe+n/BLzJsBZMYVMnNjP36TMzCmT/5RtdlwTCJfy7aULTd3oyWgOZtMA
-DjMSW7yV5TKQqLPGbIOtd+6Lfn6xqavT4fG2wLHqiMDn05DpKJKUe2h7lyoKZy2F
-AjgQ5ANh1NolNscIWC2hp1GvMApJ9aZphwctREZ2jirlmjvXGKL8nDgQzMY70rUX
-Om/9riW99XJZZLF0KjhfGEzfz3EEWjbUvy+ZnOjZurGV5gJLIaFb1cFPj65pbVPb
-AZO1XB4Y3WRayhgoPmMEEf0cjQAPuDffZ4qdZqkCapH/E8ovXYO8h5Ns3CRRFgQl
-Zvqz2cK6Kb6aSDiCmfS/O0oxGfm/jiEzFMpPVF/7zvuPcX/9XhmgD0uRuMRUvAaw
-RY8mkaKO/qk=
------END CERTIFICATE-----
-
-================================================================
-C: US
-O: DigiCert Inc
-OU: www.digicert.com
-CN: DigiCert Assured ID Root CA
------BEGIN CERTIFICATE-----
-MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBl
-MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
-d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv
-b3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzExMTEwMDAwMDAwWjBlMQswCQYDVQQG
-EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl
-cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwggEi
-MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7c
-JpSIqvTO9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYP
-mDI2dsze3Tyoou9q+yHyUmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+
-wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4
-VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpyoeb6pNnVFzF1roV9Iq4/
-AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whfGHdPAgMB
-AAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW
-BBRF66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYun
-pyGd823IDzANBgkqhkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRC
-dWKuh+vy1dneVrOfzM4UKLkNl2BcEkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTf
-fwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38FnSbNd67IJKusm7Xi+fT8r87cm
-NW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i8b5QZ7dsvfPx
-H2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe
-+o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g==
------END CERTIFICATE-----
-
-================================================================
-C: US
-O: DigiCert Inc
-OU: www.digicert.com
-CN: DigiCert Global Root CA
------BEGIN CERTIFICATE-----
-MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh
-MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
-d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD
-QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT
-MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j
-b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG
-9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB
-CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97
-nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt
-43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P
-T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4
-gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO
-BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR
-TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw
-DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr
-hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg
-06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF
-PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls
-YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk
-CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=
------END CERTIFICATE-----
-
-================================================================
-C: US
-O: DigiCert Inc
-OU: www.digicert.com
-CN: DigiCert High Assurance EV Root CA
------BEGIN CERTIFICATE-----
-MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBs
-MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
-d3cuZGlnaWNlcnQuY29tMSswKQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5j
-ZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAwMFoXDTMxMTExMDAwMDAwMFowbDEL
-MAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3
-LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFuY2Ug
-RVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm
-+9S75S0tMqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTW
-PNt0OKRKzE0lgvdKpVMSOO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEM
-xChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFB
-Ik5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQNAQTXKFx01p8VdteZOE3
-hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUeh10aUAsg
-EsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQF
-MAMBAf8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaA
-FLE+w2kD+L9HAdSYJhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3Nec
-nzyIZgYIVyHbIUf4KmeqvxgydkAQV8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6z
-eM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFpmyPInngiK3BD41VHMWEZ71jF
-hS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkKmNEVX58Svnw2
-Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe
-vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep
-+OkuE6N36B9K
------END CERTIFICATE-----
-
-================================================================
-C: US
-O: Digital Signature Trust
-OU: DST ACES
-CN: DST ACES CA X6
------BEGIN CERTIFICATE-----
-MIIECTCCAvGgAwIBAgIQDV6ZCtadt3js2AdWO4YV2TANBgkqhkiG9w0BAQUFADBb
-MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3Qx
-ETAPBgNVBAsTCERTVCBBQ0VTMRcwFQYDVQQDEw5EU1QgQUNFUyBDQSBYNjAeFw0w
-MzExMjAyMTE5NThaFw0xNzExMjAyMTE5NThaMFsxCzAJBgNVBAYTAlVTMSAwHgYD
-VQQKExdEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdDERMA8GA1UECxMIRFNUIEFDRVMx
-FzAVBgNVBAMTDkRTVCBBQ0VTIENBIFg2MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
-MIIBCgKCAQEAuT31LMmU3HWKlV1j6IR3dma5WZFcRt2SPp/5DgO0PWGSvSMmtWPu
-ktKe1jzIDZBfZIGxqAgNTNj50wUoUrQBJcWVHAx+PhCEdc/BGZFjz+iokYi5Q1K7
-gLFViYsx+tC3dr5BPTCapCIlF3PoHuLTrCq9Wzgh1SpL11V94zpVvddtawJXa+ZH
-fAjIgrrep4c9oW24MFbCswKBXy314powGCi4ZtPLAZZv6opFVdbgnf9nKxcCpk4a
-ahELfrd755jWjHZvwTvbUJN+5dCOHze4vbrGn2zpfDPyMjwmR/onJALJfh1biEIT
-ajV8fTXpLmaRcpPVMibEdPVTo7NdmvYJywIDAQABo4HIMIHFMA8GA1UdEwEB/wQF
-MAMBAf8wDgYDVR0PAQH/BAQDAgHGMB8GA1UdEQQYMBaBFHBraS1vcHNAdHJ1c3Rk
-c3QuY29tMGIGA1UdIARbMFkwVwYKYIZIAWUDAgEBATBJMEcGCCsGAQUFBwIBFjto
-dHRwOi8vd3d3LnRydXN0ZHN0LmNvbS9jZXJ0aWZpY2F0ZXMvcG9saWN5L0FDRVMt
-aW5kZXguaHRtbDAdBgNVHQ4EFgQUCXIGThhDD+XWzMNqizF7eI+og7gwDQYJKoZI
-hvcNAQEFBQADggEBAKPYjtay284F5zLNAdMEA+V25FYrnJmQ6AgwbN99Pe7lv7Uk
-QIRJ4dEorsTCOlMwiPH1d25Ryvr/ma8kXxug/fKshMrfqfBfBC6tFr8hlxCBPeP/
-h40y3JTlR4peahPJlJU90u7INJXQgNStMgiAVDzgvVJT11J8smk/f3rPanTK+gQq
-nExaBqXpIK1FZg9p8d2/6eMyi/rgwYZNcjwu2JN4Cir42NInPRmJX1p7ijvMDNpR
-rscL9yuwNwXsvFcj4jjSm2jzVhKIT0J8uDHEtdvkyCE06UgRNe76x5JXxZ805Mf2
-9w4LTJxoeHtxMcfrHuBnQfO3oKfN5XozNmr6mis=
------END CERTIFICATE-----
-
-================================================================
-C: US
-O: Digital Signature Trust Co.
-OU: DSTCA E1
------BEGIN CERTIFICATE-----
-MIIDKTCCApKgAwIBAgIENnAVljANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJV
-UzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQL
-EwhEU1RDQSBFMTAeFw05ODEyMTAxODEwMjNaFw0xODEyMTAxODQwMjNaMEYxCzAJ
-BgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4x
-ETAPBgNVBAsTCERTVENBIEUxMIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQCg
-bIGpzzQeJN3+hijM3oMv+V7UQtLodGBmE5gGHKlREmlvMVW5SXIACH7TpWJENySZ
-j9mDSI+ZbZUTu0M7LklOiDfBu1h//uG9+LthzfNHwJmm8fOR6Hh8AMthyUQncWlV
-Sn5JTe2io74CTADKAqjuAQIxZA9SLRN0dja1erQtcQIBA6OCASQwggEgMBEGCWCG
-SAGG+EIBAQQEAwIABzBoBgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMx
-JDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjERMA8GA1UECxMI
-RFNUQ0EgRTExDTALBgNVBAMTBENSTDEwKwYDVR0QBCQwIoAPMTk5ODEyMTAxODEw
-MjNagQ8yMDE4MTIxMDE4MTAyM1owCwYDVR0PBAQDAgEGMB8GA1UdIwQYMBaAFGp5
-fpFpRhgTCgJ3pVlbYJglDqL4MB0GA1UdDgQWBBRqeX6RaUYYEwoCd6VZW2CYJQ6i
-+DAMBgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqG
-SIb3DQEBBQUAA4GBACIS2Hod3IEGtgllsofIH160L+nEHvI8wbsEkBFKg05+k7lN
-QseSJqBcNJo4cvj9axY+IO6CizEqkzaFI4iKPANo08kJD038bKTaKHKTDomAsH3+
-gG9lbRgzl4vCa4nuYD3Im+9/KzJic5PLPON74nZ4RbyhkwS7hp86W0N6w4pl
------END CERTIFICATE-----
-
-================================================================
-C: US
-O: Digital Signature Trust Co.
-OU: DSTCA E2
------BEGIN CERTIFICATE-----
-MIIDKTCCApKgAwIBAgIENm7TzjANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJV
-UzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQL
-EwhEU1RDQSBFMjAeFw05ODEyMDkxOTE3MjZaFw0xODEyMDkxOTQ3MjZaMEYxCzAJ
-BgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4x
-ETAPBgNVBAsTCERTVENBIEUyMIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQC/
-k48Xku8zExjrEH9OFr//Bo8qhbxe+SSmJIi2A7fBw18DW9Fvrn5C6mYjuGODVvso
-LeE4i7TuqAHhzhy2iCoiRoX7n6dwqUcUP87eZfCocfdPJmyMvMa1795JJ/9IKn3o
-TQPMx7JSxhcxEzu1TdvIxPbDDyQq2gyd55FbgM2UnQIBA6OCASQwggEgMBEGCWCG
-SAGG+EIBAQQEAwIABzBoBgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMx
-JDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjERMA8GA1UECxMI
-RFNUQ0EgRTIxDTALBgNVBAMTBENSTDEwKwYDVR0QBCQwIoAPMTk5ODEyMDkxOTE3
-MjZagQ8yMDE4MTIwOTE5MTcyNlowCwYDVR0PBAQDAgEGMB8GA1UdIwQYMBaAFB6C
-TShlgDzJQW6sNS5ay97u+DlbMB0GA1UdDgQWBBQegk0oZYA8yUFurDUuWsve7vg5
-WzAMBgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqG
-SIb3DQEBBQUAA4GBAEeNg61i8tuwnkUiBbmi1gMOOHLnnvx75pO2mqWilMg0HZHR
-xdf0CiUPPXiBng+xZ8SQTGPdXqfiup/1902lMXucKS1M/mQ+7LZT/uqb7YLbdHVL
-B3luHtgZg3Pe9T7Qtd7nS2h9Qy4qIOF+oHhEngj1mPnHfxsb1gYgAlihw6ID
------END CERTIFICATE-----
-
-================================================================
-C: US
-O: Entrust, Inc.
-OU: www.entrust.net/CPS is incorporated by reference
-OU: (c) 2006 Entrust, Inc.
-CN: Entrust Root Certification Authority
------BEGIN CERTIFICATE-----
-MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMC
-VVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0
-Lm5ldC9DUFMgaXMgaW5jb3Jwb3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMW
-KGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsGA1UEAxMkRW50cnVzdCBSb290IENl
-cnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0MloXDTI2MTEyNzIw
-NTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMTkw
-NwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSBy
-ZWZlcmVuY2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNV
-BAMTJEVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJ
-KoZIhvcNAQEBBQADggEPADCCAQoCggEBALaVtkNC+sZtKm9I35RMOVcF7sN5EUFo
-Nu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYszA9u3g3s+IIRe7bJWKKf4
-4LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOwwCj0Yzfv9
-KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGI
-rb68j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi
-94DkZfs0Nw4pgHBNrziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOB
-sDCBrTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAi
-gA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1MzQyWjAfBgNVHSMEGDAWgBRo
-kORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DHhmak8fdLQ/uE
-vW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA
-A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9t
-O1KzKtvn1ISMY/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6Zua
-AGAT/3B+XxFNSRuzFVJ7yVTav52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP
-9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTSW3iDVuycNsMm4hH2Z0kdkquM++v/
-eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0tHuu2guQOHXvgR1m
-0vdXcDazv/wor3ElhVsT/h5/WrQ8
------END CERTIFICATE-----
-
-================================================================
-C: US
-O: Entrust.net
-OU: www.entrust.net/CPS incorp. by ref. (limits liab.)
-OU: (c) 1999 Entrust.net Limited
-CN: Entrust.net Secure Server Certification Authority
------BEGIN CERTIFICATE-----
-MIIE2DCCBEGgAwIBAgIEN0rSQzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMC
-VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5u
-ZXQvQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMc
-KGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5u
-ZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05OTA1
-MjUxNjA5NDBaFw0xOTA1MjUxNjM5NDBaMIHDMQswCQYDVQQGEwJVUzEUMBIGA1UE
-ChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5j
-b3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBF
-bnRydXN0Lm5ldCBMaW1pdGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUg
-U2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGdMA0GCSqGSIb3DQEBAQUA
-A4GLADCBhwKBgQDNKIM0VBuJ8w+vN5Ex/68xYMmo6LIQaO2f55M28Qpku0f1BBc/
-I0dNxScZgSYMVHINiC3ZH5oSn7yzcdOAGT9HZnuMNSjSuQrfJNqc1lB5gXpa0zf3
-wkrYKZImZNHkmGw6AIr1NJtl+O3jEP/9uElY3KDegjlrgbEWGWG5VLbmQwIBA6OC
-AdcwggHTMBEGCWCGSAGG+EIBAQQEAwIABzCCARkGA1UdHwSCARAwggEMMIHeoIHb
-oIHYpIHVMIHSMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxOzA5
-BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1p
-dHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBFbnRydXN0Lm5ldCBMaW1pdGVk
-MTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRp
-b24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCmgJ6AlhiNodHRwOi8vd3d3LmVu
-dHJ1c3QubmV0L0NSTC9uZXQxLmNybDArBgNVHRAEJDAigA8xOTk5MDUyNTE2MDk0
-MFqBDzIwMTkwNTI1MTYwOTQwWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAU8Bdi
-E1U9s/8KAGv7UISX8+1i0BowHQYDVR0OBBYEFPAXYhNVPbP/CgBr+1CEl/PtYtAa
-MAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EABAwwChsEVjQuMAMCBJAwDQYJKoZI
-hvcNAQEFBQADgYEAkNwwAvpkdMKnCqV8IY00F6j7Rw7/JXyNEwr75Ji174z4xRAN
-95K+8cPV1ZVqBLssziY2ZcgxxufuP+NXdYR6Ee9GTxj005i7qIcyunL2POI9n9cd
-2cNgQ4xYDiKWL2KjLB+6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G+bI=
------END CERTIFICATE-----
-
-================================================================
-C: US
-O: Equifax
-OU: Equifax Secure Certificate Authority
------BEGIN CERTIFICATE-----
-MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJV
-UzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2Vy
-dGlmaWNhdGUgQXV0aG9yaXR5MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1
-MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoTB0VxdWlmYXgxLTArBgNVBAsTJEVx
-dWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCBnzANBgkqhkiG9w0B
-AQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPRfM6f
-BeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+A
-cJkVV5MW8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kC
-AwEAAaOCAQkwggEFMHAGA1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQ
-MA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlm
-aWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIwMTgw
-ODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvSspXXR9gj
-IBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQF
-MAMBAf8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUA
-A4GBAFjOKer89961zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y
-7qj/WsjTVbJmcVfewCHrPSqnI0kBBIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh
-1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee9570+sB3c4
------END CERTIFICATE-----
-
-================================================================
-C: US
-O: Equifax Secure Inc.
-CN: Equifax Secure Global eBusiness CA-1
------BEGIN CERTIFICATE-----
-MIICkDCCAfmgAwIBAgIBATANBgkqhkiG9w0BAQQFADBaMQswCQYDVQQGEwJVUzEc
-MBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5jLjEtMCsGA1UEAxMkRXF1aWZheCBT
-ZWN1cmUgR2xvYmFsIGVCdXNpbmVzcyBDQS0xMB4XDTk5MDYyMTA0MDAwMFoXDTIw
-MDYyMTA0MDAwMFowWjELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0VxdWlmYXggU2Vj
-dXJlIEluYy4xLTArBgNVBAMTJEVxdWlmYXggU2VjdXJlIEdsb2JhbCBlQnVzaW5l
-c3MgQ0EtMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAuucXkAJlsTRVPEnC
-UdXfp9E3j9HngXNBUmCbnaEXJnitx7HoJpQytd4zjTov2/KaelpzmKNc6fuKcxtc
-58O/gGzNqfTWK8D3+ZmqY6KxRwIP1ORROhI8bIpaVIRw28HFkM9yRcuoWcDNM50/
-o5brhTMhHD4ePmBudpxnhcXIw2ECAwEAAaNmMGQwEQYJYIZIAYb4QgEBBAQDAgAH
-MA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUvqigdHJQa0S3ySPY+6j/s1dr
-aGwwHQYDVR0OBBYEFL6ooHRyUGtEt8kj2Puo/7NXa2hsMA0GCSqGSIb3DQEBBAUA
-A4GBADDiAVGqx+pf2rnQZQ8w1j7aDRRJbpGTJxQx78T3LUX47Me/okENI7SS+RkA
-Z70Br83gcfxaz2TE4JaY0KNA4gGK7ycH8WUBikQtBmV1UsCGECAhX2xrD2yuCRyv
-8qIYNMR1pHMc8Y3c7635s3a0kr/clRAevsvIO1qEYBlWlKlV
------END CERTIFICATE-----
-
-================================================================
-C: US
-O: Equifax Secure Inc.
-CN: Equifax Secure eBusiness CA-1
------BEGIN CERTIFICATE-----
-MIICgjCCAeugAwIBAgIBBDANBgkqhkiG9w0BAQQFADBTMQswCQYDVQQGEwJVUzEc
-MBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBT
-ZWN1cmUgZUJ1c2luZXNzIENBLTEwHhcNOTkwNjIxMDQwMDAwWhcNMjAwNjIxMDQw
-MDAwWjBTMQswCQYDVQQGEwJVUzEcMBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5j
-LjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNzIENBLTEwgZ8wDQYJ
-KoZIhvcNAQEBBQADgY0AMIGJAoGBAM4vGbwXt3fek6lfWg0XTzQaDJj0ItlZ1MRo
-RvC0NcWFAyDGr0WlIVFFQesWWDYyb+JQYmT5/VGcqiTZ9J2DKocKIdMSODRsjQBu
-WqDZQu4aIZX5UkxVWsUPOE9G+m34LjXWHXzr4vCwdYDIqROsvojvOm6rXyo4YgKw
-Env+j6YDAgMBAAGjZjBkMBEGCWCGSAGG+EIBAQQEAwIABzAPBgNVHRMBAf8EBTAD
-AQH/MB8GA1UdIwQYMBaAFEp4MlIR21kWNl7fwRQ2QGpHfEyhMB0GA1UdDgQWBBRK
-eDJSEdtZFjZe38EUNkBqR3xMoTANBgkqhkiG9w0BAQQFAAOBgQB1W6ibAxHm6VZM
-zfmpTMANmvPMZWnmJXbMWbfWVMMdzZmsGd20hdXgPfxiIKeES1hl8eL5lSE/9dR+
-WB5Hh1Q+WKG1tfgq73HnvMP2sUlG4tega+VWeponmHxGYhTnyfxuAxJ5gDgdSIKN
-/Bf+KpYrtWKmpj29f5JZzVoqgrI3eQ==
------END CERTIFICATE-----
-
-================================================================
-C: US
-O: GTE Corporation
-OU: GTE CyberTrust Solutions, Inc.
-CN: GTE CyberTrust Global Root
------BEGIN CERTIFICATE-----
-MIICWjCCAcMCAgGlMA0GCSqGSIb3DQEBBAUAMHUxCzAJBgNVBAYTAlVTMRgwFgYD
-VQQKEw9HVEUgQ29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRydXN0IFNv
-bHV0aW9ucywgSW5jLjEjMCEGA1UEAxMaR1RFIEN5YmVyVHJ1c3QgR2xvYmFsIFJv
-b3QwHhcNOTgwODEzMDAyOTAwWhcNMTgwODEzMjM1OTAwWjB1MQswCQYDVQQGEwJV
-UzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQLEx5HVEUgQ3liZXJU
-cnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0IEds
-b2JhbCBSb290MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCVD6C28FCc6HrH
-iM3dFw4usJTQGz0O9pTAipTHBsiQl8i4ZBp6fmw8U+E3KHNgf7KXUwefU/ltWJTS
-r41tiGeA5u2ylc9yMcqlHHK6XALnZELn+aks1joNrI1CqiQBOeacPwGFVw1Yh0X4
-04Wqk2kmhXBIgD8SFcd5tB8FLztimQIDAQABMA0GCSqGSIb3DQEBBAUAA4GBAG3r
-GwnpXtlR22ciYaQqPEh346B8pt5zohQDhT37qw4wxYMWM4ETCJ57NE7fQMh017l9
-3PR2VX2bY1QY6fDq81yx2YtCHrnAlU66+tXifPVoYb+O7AWXX1uw16OFNMQkpw0P
-lZPvy5TYnh+dXIVtx6quTx8itc2VrbqnzPmrC3p/
------END CERTIFICATE-----
-
-================================================================
-C: US
-O: GeoTrust Inc.
-CN: GeoTrust Global CA
------BEGIN CERTIFICATE-----
-MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVT
-MRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9i
-YWwgQ0EwHhcNMDIwNTIxMDQwMDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQG
-EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEbMBkGA1UEAxMSR2VvVHJ1c3Qg
-R2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2swYYzD9
-9BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjoBbdq
-fnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDv
-iS2Aelet8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU
-1XupGc1V3sjs0l44U+VcT4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+
-bw8HHa8sHo9gOeL6NlMTOdReJivbPagUvTLrGAMoUgRx5aszPeE4uwc2hGKceeoW
-MPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTA
-ephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVkDBF9qn1l
-uMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKIn
-Z57QzxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfS
-tQWVYrmm3ok9Nns4d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcF
-PseKUgzbFbS9bZvlxrFUaKnjaZC2mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Un
-hw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6pXE0zX5IJL4hmXXeXxx12E6nV
-5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvmMw==
------END CERTIFICATE-----
-
-================================================================
-C: US
-O: GeoTrust Inc.
-CN: GeoTrust Global CA 2
------BEGIN CERTIFICATE-----
-MIIDZjCCAk6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBEMQswCQYDVQQGEwJVUzEW
-MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFs
-IENBIDIwHhcNMDQwMzA0MDUwMDAwWhcNMTkwMzA0MDUwMDAwWjBEMQswCQYDVQQG
-EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3Qg
-R2xvYmFsIENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDvPE1A
-PRDfO1MA4Wf+lGAVPoWI8YkNkMgoI5kF6CsgncbzYEbYwbLVjDHZ3CB5JIG/NTL8
-Y2nbsSpr7iFY8gjpeMtvy/wWUsiRxP89c96xPqfCfWbB9X5SJBri1WeR0IIQ13hL
-TytCOb1kLUCgsBDTOEhGiKEMuzozKmKY+wCdE1l/bztyqu6mD4b5BWHqZ38MN5aL
-5mkWRxHCJ1kDs6ZgwiFAVvqgx306E+PsV8ez1q6diYD3Aecs9pYrEw15LNnA5IZ7
-S4wMcoKK+xfNAGw6EzywhIdLFnopsk/bHdQL82Y3vdj2V7teJHq4PIu5+pIaGoSe
-2HSPqht/XvT+RSIhAgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE
-FHE4NvICMVNHK266ZUapEBVYIAUJMB8GA1UdIwQYMBaAFHE4NvICMVNHK266ZUap
-EBVYIAUJMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQUFAAOCAQEAA/e1K6td
-EPx7srJerJsOflN4WT5CBP51o62sgU7XAotexC3IUnbHLB/8gTKY0UvGkpMzNTEv
-/NgdRN3ggX+d6YvhZJFiCzkIjKx0nVnZellSlxG5FntvRdOW2TF9AjYPnDtuzywN
-A0ZF66D0f0hExghAzN4bcLUprbqLOzRldRtxIR0sFAqwlpW41uryZfspuk/qkZN0
-abby/+Ea0AzRdoXLiiW9l14sbxWZJue2Kf8i7MkCx1YAzUm5s2x7UwQa4qjJqhIF
-I8LO57sEAszAR6LkxCkvW0VXiVHuPOtSCP8HNR6fNWpHSlaY0VqFH4z1Ir+rzoPz
-4iIprn2DQKi6bA==
------END CERTIFICATE-----
-
-================================================================
-C: US
-O: GeoTrust Inc.
-CN: GeoTrust Primary Certification Authority
------BEGIN CERTIFICATE-----
-MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBY
-MQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMo
-R2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEx
-MjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgxCzAJBgNVBAYTAlVTMRYwFAYDVQQK
-Ew1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQcmltYXJ5IENlcnRp
-ZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
-AQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9
-AWbK7hWNb6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjA
-ZIVcFU2Ix7e64HXprQU9nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE0
-7e9GceBrAqg1cmuXm2bgyxx5X9gaBGgeRwLmnWDiNpcB3841kt++Z8dtd1k7j53W
-kBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGttm/81w7a4DSwDRp35+MI
-mO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4G
-A1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJ
-KoZIhvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ1
-6CePbJC/kRYkRj5KTs4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl
-4b7UVXGYNTq+k+qurUKykG/g/CFNNWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6K
-oKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHaFloxt/m0cYASSJlyc1pZU8Fj
-UjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG1riR/aYNKxoU
-AT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk=
------END CERTIFICATE-----
-
-================================================================
-C: US
-O: GeoTrust Inc.
-CN: GeoTrust Universal CA
------BEGIN CERTIFICATE-----
-MIIFaDCCA1CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJVUzEW
-MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEeMBwGA1UEAxMVR2VvVHJ1c3QgVW5pdmVy
-c2FsIENBMB4XDTA0MDMwNDA1MDAwMFoXDTI5MDMwNDA1MDAwMFowRTELMAkGA1UE
-BhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xHjAcBgNVBAMTFUdlb1RydXN0
-IFVuaXZlcnNhbCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKYV
-VaCjxuAfjJ0hUNfBvitbtaSeodlyWL0AG0y/YckUHUWCq8YdgNY96xCcOq9tJPi8
-cQGeBvV8Xx7BDlXKg5pZMK4ZyzBIle0iN430SppyZj6tlcDgFgDgEB8rMQ7XlFTT
-QjOgNB0eRXbdT8oYN+yFFXoZCPzVx5zw8qkuEKmS5j1YPakWaDwvdSEYfyh3peFh
-F7em6fgemdtzbvQKoiFs7tqqhZJmr/Z6a4LauiIINQ/PQvE1+mrufislzDoR5G2v
-c7J2Ha3QsnhnGqQ5HFELZ1aD/ThdDc7d8Lsrlh/eezJS/R27tQahsiFepdaVaH/w
-mZ7cRQg+59IJDTWU3YBOU5fXtQlEIGQWFwMCTFMNaN7VqnJNk22CDtucvc+081xd
-VHppCZbW2xHBjXWotM85yM48vCR85mLK4b19p71XZQvk/iXttmkQ3CgaRr0BHdCX
-teGYO8A3ZNY9lO4L4fUorgtWv3GLIylBjobFS1J72HGrH4oVpjuDWtdYAVHGTEHZ
-f9hBZ3KiKN9gg6meyHv8U3NyWfWTehd2Ds735VzZC1U0oqpbtWpU5xPKV+yXbfRe
-Bi9Fi1jUIxaS5BZuKGNZMN9QAZxjiRqf2xeUgnA3wySemkfWWspOqGmJch+RbNt+
-nhutxx9z3SxPGWX9f5NAEC7S8O08ni4oPmkmM8V7AgMBAAGjYzBhMA8GA1UdEwEB
-/wQFMAMBAf8wHQYDVR0OBBYEFNq7LqqwDLiIJlF0XG0D08DYj3rWMB8GA1UdIwQY
-MBaAFNq7LqqwDLiIJlF0XG0D08DYj3rWMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG
-9w0BAQUFAAOCAgEAMXjmx7XfuJRAyXHEqDXsRh3ChfMoWIawC/yOsjmPRFWrZIRc
-aanQmjg8+uUfNeVE44B5lGiku8SfPeE0zTBGi1QrlaXv9z+ZhP015s8xxtxqv6fX
-IwjhmF7DWgh2qaavdy+3YL1ERmrvl/9zlcGO6JP7/TG37FcREUWbMPEaiDnBTzyn
-ANXH/KttgCJwpQzgXQQpAvvLoJHRfNbDflDVnVi+QTjruXU8FdmbyUqDWcDaU/0z
-uzYYm4UPFd3uLax2k7nZAY1IEKj79TiG8dsKxr2EoyNB3tZ3b4XUhRxQ4K5RirqN
-Pnbiucon8l+f725ZDQbYKxek0nxru18UGkiPGkzns0ccjkxFKyDuSN/n3QmOGKja
-QI2SJhFTYXNd673nxE0pN2HrrDktZy4W1vUAg4WhzH92xH3kt0tm7wNFYGm2DFKW
-koRepqO1pD4r2czYG0eq8kTaT/kD6PAUyz/zg97QwVTjt+gKN02LIFkDMBmhLMi9
-ER/frslKxfMnZmaGrGiR/9nmUxwPi1xpZQomyB40w11Re9epnAahNt3ViZS82eQt
-DF4JbAiXfKM9fJP/P6EUp8+1Xevb2xzEdt+Iub1FBZUbrvxGakyvSOPOrg/Sfuvm
-bJxPgWp6ZKy7PtXny3YuxadIwVyQD8vIP/rmMuGNG2+k5o7Y+SlIis5z/iw=
------END CERTIFICATE-----
-
-================================================================
-C: US
-O: GeoTrust Inc.
-CN: GeoTrust Universal CA 2
------BEGIN CERTIFICATE-----
-MIIFbDCCA1SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMQswCQYDVQQGEwJVUzEW
-MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVy
-c2FsIENBIDIwHhcNMDQwMzA0MDUwMDAwWhcNMjkwMzA0MDUwMDAwWjBHMQswCQYD
-VQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1
-c3QgVW5pdmVyc2FsIENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC
-AQCzVFLByT7y2dyxUxpZKeexw0Uo5dfR7cXFS6GqdHtXr0om/Nj1XqduGdt0DE81
-WzILAePb63p3NeqqWuDW6KFXlPCQo3RWlEQwAx5cTiuFJnSCegx2oG9NzkEtoBUG
-FF+3Qs17j1hhNNwqCPkuwwGmIkQcTAeC5lvO0Ep8BNMZcyfwqph/Lq9O64ceJHdq
-XbboW0W63MOhBW9Wjo8QJqVJwy7XQYci4E+GymC16qFjwAGXEHm9ADwSbSsVsaxL
-se4YuU6W3Nx2/zu+z18DwPw76L5GG//aQMJS9/7jOvdqdzXQ2o3rXhhqMcceujwb
-KNZrVMaqW9eiLBsZzKIC9ptZvTdrhrVtgrrY6slWvKk2WP0+GfPtDCapkzj4T8Fd
-IgbQl+rhrcZV4IErKIM6+vR7IVEAvlI4zs1meaj0gVbi0IMJR1FbUGrP20gaXT73
-y/Zl92zxlfgCOzJWgjl6W70viRu/obTo/3+NjN8D8WBOWBFM66M/ECuDmgFz2ZRt
-hAAnZqzwcEAJQpKtT5MNYQlRJNiS1QuUYbKHsu3/mjX/hVTK7URDrBs8FmtISgoc
-QIgfksILAAX/8sgCSqSqqcyZlpwvWOB94b67B9xfBHJcMTTD7F8t4D1kkCLm0ey4
-Lt1ZrtmhN79UNdxzMk+MBB4zsslG8dhcyFVQyWi9qLo2CQIDAQABo2MwYTAPBgNV
-HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAfBgNV
-HSMEGDAWgBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAOBgNVHQ8BAf8EBAMCAYYwDQYJ
-KoZIhvcNAQEFBQADggIBAGbBxiPz2eAubl/oz66wsCVNK/g7WJtAJDday6sWSf+z
-dXkzoS9tcBc0kf5nfo/sm+VegqlVHy/c1FEHEv6sFj4sNcZj/NwQ6w2jqtB8zNHQ
-L1EuxBRa3ugZ4T7GzKQp5y6EqgYweHZUcyiYWTjgAA1i00J9IZ+uPTqM1fp3DRgr
-Fg5fNuH8KrUwJM/gYwx7WBr+mbpCErGR9Hxo4sjoryzqyX6uuyo9DRXcNJW2GHSo
-ag/HtPQTxORb7QrSpJdMKu0vbBKJPfEncKpqA1Ihn0CoZ1Dy81of398j9tx4TuaY
-T1U6U+Pv8vSfx3zYWK8pIpe44L2RLrB27FcRz+8pRPPphXpgY+RdM4kX2TGq2tbz
-GDVyz4crL2MjhF2EjD9XoIj8mZEoJmmZ1I+XRL6O1UixpCgp8RW04eWe3fiPpm8m
-1wk8OhwRDqZsN/etRIcsKMfYdIKz0G9KV7s1KSegi+ghp4dkNl3M2Basx7InQJJV
-OCiNUW7dFGdTbHFcJoRNdVq2fmBWqU2t+5sel/MN2dKXVHfaPRK34B7vCAas+YWH
-6aLcr34YEoP9VhdBLtUpgn2Z9DH2canPLAEnpQW5qrJITirvn5NSUZU8UnOOVkwX
-QMAJKOSLakhT2+zNVVXxxvjpoixMptEmX36vWkzaH6byHCx+rgIW0lbQL1dTR+iS
------END CERTIFICATE-----
-
-================================================================
-C: US
-O: GeoTrust Inc.
-OU: (c) 2007 GeoTrust Inc. - For authorized use only
-CN: GeoTrust Primary Certification Authority - G2
------BEGIN CERTIFICATE-----
-MIICrjCCAjWgAwIBAgIQPLL0SAoA4v7rJDteYD7DazAKBggqhkjOPQQDAzCBmDEL
-MAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChj
-KSAyMDA3IEdlb1RydXN0IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2
-MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
-eSAtIEcyMB4XDTA3MTEwNTAwMDAwMFoXDTM4MDExODIzNTk1OVowgZgxCzAJBgNV
-BAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykgMjAw
-NyBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNV
-BAMTLUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBH
-MjB2MBAGByqGSM49AgEGBSuBBAAiA2IABBWx6P0DFUPlrOuHNxFi79KDNlJ9RVcL
-So17VDs6bl8VAsBQps8lL33KSLjHUGMcKiEIfJo22Av+0SbFWDEwKCXzXV2juLal
-tJLtbCyf691DiaI8S0iRHVDsJt/WYC69IaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAO
-BgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBVfNVdRVfslsq0DafwBo/q+EVXVMAoG
-CCqGSM49BAMDA2cAMGQCMGSWWaboCd6LuvpaiIjwH5HTRqjySkwCY/tsXzjbLkGT
-qQ7mndwxHLKgpxgceeHHNgIwOlavmnRs9vuD4DPTCF+hnMJbn0bWtsuRBmOiBucz
-rD6ogRLQy7rQkgu2npaqBA+K
------END CERTIFICATE-----
-
-================================================================
-C: US
-O: GeoTrust Inc.
-OU: (c) 2008 GeoTrust Inc. - For authorized use only
-CN: GeoTrust Primary Certification Authority - G3
------BEGIN CERTIFICATE-----
-MIID/jCCAuagAwIBAgIQFaxulBmyeUtB9iepwxgPHzANBgkqhkiG9w0BAQsFADCB
-mDELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsT
-MChjKSAyMDA4IEdlb1RydXN0IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25s
-eTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhv
-cml0eSAtIEczMB4XDTA4MDQwMjAwMDAwMFoXDTM3MTIwMTIzNTk1OVowgZgxCzAJ
-BgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykg
-MjAwOCBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0
-BgNVBAMTLUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
-LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANziXmJYHTNXOTIz
-+uvLh4yn1ErdBojqZI4xmKU4kB6Yzy5jK/BGvESyiaHAKAxJcCGVn2TAppMSAmUm
-hsalifD614SgcK9PGpc/BkTVyetyEH3kMSj7HGHmKAdEc5IiaacDiGydY8hS2pgn
-5whMcD60yRLBxWeDXTPzAxHsatBT4tG6NmCUgLthY2xbF37fQJQeqw3CIShwiP/W
-JmxsYAQlTlV+fe+/lEjetx3dcI0FX4ilm/LC7urRQEFtYjgdVgbFA0dRIBn8exAL
-DmKudlW/X3e+PkkBUz2YJQN2JFodtNuJ6nnltrM7P7pMKEF/BqxqjsHQ9gUdfeZC
-huOl1UcCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYw
-HQYDVR0OBBYEFMR5yo6hTgMdHNxr2zFblD4/MH8tMA0GCSqGSIb3DQEBCwUAA4IB
-AQAtxRPPVoB7eni9n64smefv2t+UXglpp+duaIy9cr5HqQ6XErhK8WTTOd8lNNTB
-zU6B8A8ExCSzNJbGpqow32hhc9f5joWJ7w5elShKKiePEI4ufIbEAp7aDHdlDkQN
-kv39sxY2+hENHYwOB4lqKVb3cvTdFZx3NWZXqxNT2I7BQMXXExZacse3aQHEerGD
-AWh9jUGhlBjBJVz88P6DAod8DQ3PLghcSkANPuyBYeYk28rgDi0Hsj5W3I31QYUH
-SJsMC8tJP33st/3LjWeJGqvtux6jAAgIFyqCXDFdRootD4abdNlF+9RAsXqqaC2G
-spki4cErx5z481+oghLrGREt
------END CERTIFICATE-----
-
-================================================================
-C: US
-O: Network Solutions L.L.C.
-CN: Network Solutions Certificate Authority
------BEGIN CERTIFICATE-----
-MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBi
-MQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu
-MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3Jp
-dHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMxMjM1OTU5WjBiMQswCQYDVQQGEwJV
-UzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydO
-ZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0GCSqG
-SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwz
-c7MEL7xxjOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPP
-OCwGJgl6cvf6UDL4wpPTaaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rl
-mGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXTcrA/vGp97Eh/jcOrqnErU2lBUzS1sLnF
-BgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc/Qzpf14Dl847ABSHJ3A4
-qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMBAAGjgZcw
-gZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIB
-BjAPBgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwu
-bmV0c29sc3NsLmNvbS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3Jp
-dHkuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc8
-6fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q4LqILPxFzBiwmZVRDuwduIj/
-h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/GGUsyfJj4akH
-/nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv
-wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHN
-pGxlaKFJdlxDydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey
------END CERTIFICATE-----
-
-================================================================
-C: US
-O: SecureTrust Corporation
-CN: Secure Global CA
------BEGIN CERTIFICATE-----
-MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBK
-MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x
-GTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkx
-MjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3Qg
-Q29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwgQ0EwggEiMA0GCSqG
-SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jxYDiJ
-iQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa
-/FHtaMbQbqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJ
-jnIFHovdRIWCQtBJwB1g8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnI
-HmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYVHDGA76oYa8J719rO+TMg1fW9ajMtgQT7
-sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi0XPnj3pDAgMBAAGjgZ0w
-gZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1UdEwEB/wQF
-MAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCsw
-KaAnoCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsG
-AQQBgjcVAQQDAgEAMA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0L
-URYD7xh8yOOvaliTFGCRsoTciE6+OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXO
-H0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cnCDpOGR86p1hcF895P4vkp9Mm
-I50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/53CYNv6ZHdAbY
-iNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc
-f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW
------END CERTIFICATE-----
-
-================================================================
-C: US
-O: SecureTrust Corporation
-CN: SecureTrust CA
------BEGIN CERTIFICATE-----
-MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBI
-MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x
-FzAVBgNVBAMTDlNlY3VyZVRydXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIz
-MTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF1NlY3VyZVRydXN0IENv
-cnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCCASIwDQYJKoZIhvcN
-AQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQXOZEz
-Zum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO
-0gMdA+9tDWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIao
-wW8xQmxSPmjL8xk037uHGFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj
-7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b01k/unK8RCSc43Oz969XL0Imnal0ugBS
-8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmHursCAwEAAaOBnTCBmjAT
-BgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB
-/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCeg
-JYYjaHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGC
-NxUBBAMCAQAwDQYJKoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt3
-6Z3q059c4EVlew3KW+JwULKUBRSuSceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/
-3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHfmbx8IVQr5Fiiu1cprp6poxkm
-D5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZnMUFdAvnZyPS
-CPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR
-3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE=
------END CERTIFICATE-----
-
-================================================================
-C: US
-O: Starfield Technologies, Inc.
-OU: Starfield Class 2 Certification Authority
------BEGIN CERTIFICATE-----
-MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzEl
-MCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMp
-U3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQw
-NjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBoMQswCQYDVQQGEwJVUzElMCMGA1UE
-ChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZp
-ZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqGSIb3
-DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf
-8MOh2tTYbitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN
-+lq2cwQlZut3f+dZxkqZJRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0
-X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVmepsZGD3/cVE8MC5fvj13c7JdBmzDI1aa
-K4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSNF4Azbl5KXZnJHoe0nRrA
-1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HFMIHCMB0G
-A1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fR
-zt0fhvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0
-YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBD
-bGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8w
-DQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGsafPzWdqbAYcaT1epoXkJKtv3
-L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLMPUxA2IGvd56D
-eruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl
-xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynp
-VSJYACPq4xJDKVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEY
-WQPJIrSPnNVeKtelttQKbfi3QBFGmh95DmK/D5fs4C8fF5Q=
------END CERTIFICATE-----
-
-================================================================
-C: US
-O: The Go Daddy Group, Inc.
-OU: Go Daddy Class 2 Certification Authority
------BEGIN CERTIFICATE-----
-MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEh
-MB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBE
-YWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3
-MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkGA1UEBhMCVVMxITAfBgNVBAoTGFRo
-ZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28gRGFkZHkgQ2xhc3Mg
-MiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQADggEN
-ADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCA
-PVYYYwhv2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6w
-wdhFJ2+qN1j3hybX2C32qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXi
-EqITLdiOr18SPaAIBQi2XKVlOARFmR6jYGB0xUGlcmIbYsUfb18aQr4CUWWoriMY
-avx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmYvLEHZ6IVDd2gWMZEewo+
-YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0OBBYEFNLE
-sNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h
-/t2oatTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5
-IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmlj
-YXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD
-ggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wimPQoZ+YeAEW5p5JYXMP80kWNy
-OO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKtI3lpjbi2Tc7P
-TMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ
-HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mER
-dEr/VxqHD3VILs9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5Cuf
-ReYNnyicsbkqWletNw+vHX/bvZ8=
------END CERTIFICATE-----
-
-================================================================
-C: US
-O: VISA
-OU: Visa International Service Association
-CN: Visa eCommerce Root
------BEGIN CERTIFICATE-----
-MIIDojCCAoqgAwIBAgIQE4Y1TR0/BvLB+WUF1ZAcYjANBgkqhkiG9w0BAQUFADBr
-MQswCQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRl
-cm5hdGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNv
-bW1lcmNlIFJvb3QwHhcNMDIwNjI2MDIxODM2WhcNMjIwNjI0MDAxNjEyWjBrMQsw
-CQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRlcm5h
-dGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNvbW1l
-cmNlIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvV95WHm6h
-2mCxlCfLF9sHP4CFT8icttD0b0/Pmdjh28JIXDqsOTPHH2qLJj0rNfVIsZHBAk4E
-lpF7sDPwsRROEW+1QK8bRaVK7362rPKgH1g/EkZgPI2h4H3PVz4zHvtH8aoVlwdV
-ZqW1LS7YgFmypw23RuwhY/81q6UCzyr0TP579ZRdhE2o8mCP2w4lPJ9zcc+U30rq
-299yOIzzlr3xF7zSujtFWsan9sYXiwGd/BmoKoMWuDpI/k4+oKsGGelT84ATB+0t
-vz8KPFUgOSwsAGl0lUq8ILKpeeUYiZGo3BxN77t+Nwtd/jmliFKMAGzsGHxBvfaL
-dXe6YJ2E5/4tAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQD
-AgEGMB0GA1UdDgQWBBQVOIMPPyw/cDMezUb+B4wg4NfDtzANBgkqhkiG9w0BAQUF
-AAOCAQEAX/FBfXxcCLkr4NWSR/pnXKUTwwMhmytMiUbPWU3J/qVAtmPN3XEolWcR
-zCSs00Rsca4BIGsDoo8Ytyk6feUWYFN4PMCvFYP3j1IzJL1kk5fui/fbGKhtcbP3
-LBfQdCVp9/5rPJS+TUtBjE7ic9DjkCJzQ83z7+pzzkWKsKZJ/0x9nXGIxHYdkFsd
-7v3M9+79YKWxehZx0RbQfBI8bGmX265fOZpwLwU8GUYEmSA20GBuYQa7FkKMcPcw
-++DbZqMAAb3mLNqRX6BGi01qnD093QVG/na/oAo85ADmJ7f/hC3euiInlhBx6yLt
-398znM/jra6O1I7mT1GvFpLgXPYHDw==
------END CERTIFICATE-----
-
-================================================================
-C: US
-O: VeriSign, Inc.
-OU: Class 1 Public Primary Certification Authority
------BEGIN CERTIFICATE-----
-MIICPDCCAaUCED9pHoGc8JpK83P/uUii5N0wDQYJKoZIhvcNAQEFBQAwXzELMAkG
-A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz
-cyAxIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2
-MDEyOTAwMDAwMFoXDTI4MDgwMjIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV
-BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAxIFB1YmxpYyBQcmlt
-YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN
-ADCBiQKBgQDlGb9to1ZhLZlIcfZn3rmN67eehoAKkQ76OCWvRoiC5XOooJskXQ0f
-zGVuDLDQVoQYh5oGmxChc9+0WDlrbsH2FdWoqD+qEgaNMax/sDTXjzRniAnNFBHi
-TkVWaR94AoDa3EeRKbs2yWNcxeDXLYd7obcysHswuiovMaruo2fa2wIDAQABMA0G
-CSqGSIb3DQEBBQUAA4GBAFgVKTk8d6PaXCUDfGD67gmZPCcQcMgMCeazh88K4hiW
-NWLMv5sneYlfycQJ9M61Hd8qveXbhpxoJeUwfLaJFf5n0a3hUKw8fGJLj7qE1xIV
-Gx/KXQ/BUpQqEZnae88MNhPVNdwQGVnqlMEAv3WP2fr9dgTbYruQagPZRjXZ+Hxb
------END CERTIFICATE-----
-
-================================================================
-C: US
-O: VeriSign, Inc.
-OU: Class 1 Public Primary Certification Authority - G2
-OU: (c) 1998 VeriSign, Inc. - For authorized use only
-OU: VeriSign Trust Network
------BEGIN CERTIFICATE-----
-MIIDAjCCAmsCEEzH6qqYPnHTkxD4PTqJkZIwDQYJKoZIhvcNAQEFBQAwgcExCzAJ
-BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh
-c3MgMSBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy
-MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp
-emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X
-DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw
-FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMSBQdWJsaWMg
-UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo
-YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5
-MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB
-AQUAA4GNADCBiQKBgQCq0Lq+Fi24g9TK0g+8djHKlNgdk4xWArzZbxpvUjZudVYK
-VdPfQ4chEWWKfo+9Id5rMj8bhDSVBZ1BNeuS65bdqlk/AVNtmU/t5eIqWpDBucSm
-Fc/IReumXY6cPvBkJHalzasab7bYe1FhbqZ/h8jit+U03EGI6glAvnOSPWvndQID
-AQABMA0GCSqGSIb3DQEBBQUAA4GBAKlPww3HZ74sy9mozS11534Vnjty637rXC0J
-h9ZrbWB85a7FkCMMXErQr7Fd88e2CtvgFZMN3QO8x3aKtd1Pw5sTdbgBwObJW2ul
-uIncrKTdcu1OofdPvAbT6shkdHvClUGcZXNY8ZCaPGqxmMnEh7zPRW1F4m4iP/68
-DzFc6PLZ
------END CERTIFICATE-----
-
-================================================================
-C: US
-O: VeriSign, Inc.
-OU: Class 2 Public Primary Certification Authority - G2
-OU: (c) 1998 VeriSign, Inc. - For authorized use only
-OU: VeriSign Trust Network
------BEGIN CERTIFICATE-----
-MIIDAzCCAmwCEQC5L2DMiJ+hekYJuFtwbIqvMA0GCSqGSIb3DQEBBQUAMIHBMQsw
-CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0Ns
-YXNzIDIgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBH
-MjE6MDgGA1UECxMxKGMpIDE5OTggVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9y
-aXplZCB1c2Ugb25seTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazAe
-Fw05ODA1MTgwMDAwMDBaFw0yODA4MDEyMzU5NTlaMIHBMQswCQYDVQQGEwJVUzEX
-MBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0NsYXNzIDIgUHVibGlj
-IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjE6MDgGA1UECxMx
-KGMpIDE5OTggVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25s
-eTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazCBnzANBgkqhkiG9w0B
-AQEFAAOBjQAwgYkCgYEAp4gBIXQs5xoD8JjhlzwPIQjxnNuX6Zr8wgQGE75fUsjM
-HiwSViy4AWkszJkfrbCWrnkE8hM5wXuYuggs6MKEEyyqaekJ9MepAqRCwiNPStjw
-DqL7MWzJ5m+ZJwf15vRMeJ5t60aG+rmGyVTyssSv1EYcWskVMP8NbPUtDm3Of3cC
-AwEAATANBgkqhkiG9w0BAQUFAAOBgQByLvl/0fFx+8Se9sVeUYpAmLho+Jscg9ji
-nb3/7aHmZuovCfTK1+qlK5X2JGCGTUQug6XELaDTrnhpb3LabK4I8GOSN+a7xDAX
-rXfMSTWqz9iP0b63GJZHc2pUIjRkLbYWm1lbtFFZOrMLFPQS32eg9K0yZF6xRnIn
-jBJ7xUS0rg==
------END CERTIFICATE-----
-
-================================================================
-C: US
-O: VeriSign, Inc.
-OU: Class 3 Public Primary Certification Authority
------BEGIN CERTIFICATE-----
-MIICPDCCAaUCEHC65B0Q2Sk0tjjKewPMur8wDQYJKoZIhvcNAQECBQAwXzELMAkG
-A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz
-cyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2
-MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV
-BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmlt
-YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN
-ADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhE
-BarsAx94f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/is
-I19wKTakyYbnsZogy1Olhec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0G
-CSqGSIb3DQEBAgUAA4GBALtMEivPLCYATxQT3ab7/AoRhIzzKBxnki98tsX63/Do
-lbwdj2wsqFHMc9ikwFPwTtYmwHYBV4GSXiHx0bH/59AhWM1pF+NEHJwZRDmJXNyc
-AA9WjQKZ7aKQRUzkuxCkPfAyAw7xzvjoyVGM5mKf5p/AfbdynMk2OmufTqj/ZA1k
------END CERTIFICATE-----
-
-================================================================
-C: US
-O: VeriSign, Inc.
-OU: Class 3 Public Primary Certification Authority
------BEGIN CERTIFICATE-----
-MIICPDCCAaUCEDyRMcsf9tAbDpq40ES/Er4wDQYJKoZIhvcNAQEFBQAwXzELMAkG
-A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz
-cyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2
-MDEyOTAwMDAwMFoXDTI4MDgwMjIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV
-BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmlt
-YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN
-ADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhE
-BarsAx94f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/is
-I19wKTakyYbnsZogy1Olhec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0G
-CSqGSIb3DQEBBQUAA4GBABByUqkFFBkyCEHwxWsKzH4PIRnN5GfcX6kb5sroc50i
-2JhucwNhkcV8sEVAbkSdjbCxlnRhLQ2pRdKkkirWmnWXbj9T/UWZYB2oK0z5XqcJ
-2HUw19JlYD1n1khVdWk/kfVIC0dpImmClr7JyDiGSnoscxlIaU5rfGW/D/xwzoiQ
------END CERTIFICATE-----
-
-================================================================
-C: US
-O: VeriSign, Inc.
-OU: Class 3 Public Primary Certification Authority - G2
-OU: (c) 1998 VeriSign, Inc. - For authorized use only
-OU: VeriSign Trust Network
------BEGIN CERTIFICATE-----
-MIIDAjCCAmsCEH3Z/gfPqB63EHln+6eJNMYwDQYJKoZIhvcNAQEFBQAwgcExCzAJ
-BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh
-c3MgMyBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy
-MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp
-emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X
-DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw
-FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMg
-UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo
-YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5
-MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB
-AQUAA4GNADCBiQKBgQDMXtERXVxp0KvTuWpMmR9ZmDCOFoUgRm1HP9SFIIThbbP4
-pO0M8RcPO/mn+SXXwc+EY/J8Y8+iR/LGWzOOZEAEaMGAuWQcRXfH2G71lSk8UOg0
-13gfqLptQ5GVj0VXXn7F+8qkBOvqlzdUMG+7AUcyM83cV5tkaWH4mx0ciU9cZwID
-AQABMA0GCSqGSIb3DQEBBQUAA4GBAFFNzb5cy5gZnBWyATl4Lk0PZ3BwmcYQWpSk
-U01UbSuvDV1Ai2TT1+7eVmGSX6bEHRBhNtMsJzzoKQm5EWR0zLVznxxIqbxhAe7i
-F6YM40AIOw7n60RzKprxaZLvcRTDOaxxp5EJb+RxBrO6WVcmeQD2+A2iMzAo1KpY
-oJ2daZH9
------END CERTIFICATE-----
-
-================================================================
-C: US
-O: VeriSign, Inc.
-OU: VeriSign Trust Network
-OU: (c) 1999 VeriSign, Inc. - For authorized use only
-CN: VeriSign Class 1 Public Primary Certification Authority - G3
------BEGIN CERTIFICATE-----
-MIIEGjCCAwICEQCLW3VWhFSFCwDPrzhIzrGkMA0GCSqGSIb3DQEBBQUAMIHKMQsw
-CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl
-cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu
-LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT
-aWduIENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
-dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD
-VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT
-aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ
-bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu
-IENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
-LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAN2E1Lm0+afY8wR4
-nN493GwTFtl63SRRZsDHJlkNrAYIwpTRMx/wgzUfbhvI3qpuFU5UJ+/EbRrsC+MO
-8ESlV8dAWB6jRx9x7GD2bZTIGDnt/kIYVt/kTEkQeE4BdjVjEjbdZrwBBDajVWjV
-ojYJrKshJlQGrT/KFOCsyq0GHZXi+J3x4GD/wn91K0zM2v6HmSHquv4+VNfSWXjb
-PG7PoBMAGrgnoeS+Z5bKoMWznN3JdZ7rMJpfo83ZrngZPyPpXNspva1VyBtUjGP2
-6KbqxzcSXKMpHgLZ2x87tNcPVkeBFQRKr4Mn0cVYiMHd9qqnoxjaaKptEVHhv2Vr
-n5Z20T0CAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAq2aN17O6x5q25lXQBfGfMY1a
-qtmqRiYPce2lrVNWYgFHKkTp/j90CxObufRNG7LRX7K20ohcs5/Ny9Sn2WCVhDr4
-wTcdYcrnsMXlkdpUpqwxga6X3s0IrLjAl4B/bnKk52kTlWUfxJM8/XmPBNQ+T+r3
-ns7NZ3xPZQL/kYVUc8f/NveGLezQXk//EZ9yBta4GvFMDSZl4kSAHsef493oCtrs
-pSCAaWihT37ha88HQfqDjrw43bAuEbFrskLMmrz5SCJ5ShkPshw+IHTZasO+8ih4
-E1Z5T21Q6huwtVexN2ZYI/PcD98Kh8TvhgXVOBRgmaNL3gaWcSzy27YfpO8/7g==
------END CERTIFICATE-----
-
-================================================================
-C: US
-O: VeriSign, Inc.
-OU: VeriSign Trust Network
-OU: (c) 1999 VeriSign, Inc. - For authorized use only
-CN: VeriSign Class 2 Public Primary Certification Authority - G3
------BEGIN CERTIFICATE-----
-MIIEGTCCAwECEGFwy0mMX5hFKeewptlQW3owDQYJKoZIhvcNAQEFBQAwgcoxCzAJ
-BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVy
-aVNpZ24gVHJ1c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24s
-IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTFFMEMGA1UEAxM8VmVyaVNp
-Z24gQ2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
-eSAtIEczMB4XDTk5MTAwMTAwMDAwMFoXDTM2MDcxNjIzNTk1OVowgcoxCzAJBgNV
-BAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNp
-Z24gVHJ1c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24sIElu
-Yy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTFFMEMGA1UEAxM8VmVyaVNpZ24g
-Q2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAt
-IEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArwoNwtUs22e5LeWU
-J92lvuCwTY+zYVY81nzD9M0+hsuiiOLh2KRpxbXiv8GmR1BeRjmL1Za6tW8UvxDO
-JxOeBUebMXoT2B/Z0wI3i60sR/COgQanDTAM6/c8DyAd3HJG7qUCyFvDyVZpTMUY
-wZF7C9UTAJu878NIPkZgIIUq1ZC2zYugzDLdt/1AVbJQHFauzI13TccgTacxdu9o
-koqQHgiBVrKtaaNS0MscxCM9H5n+TOgWY47GCI72MfbS+uV23bUckqNJzc0BzWjN
-qWm6o+sdDZykIKbBoMXRRkwXbdKsZj+WjOCE1Db/IlnF+RFgqF8EffIa9iVCYQ/E
-Srg+iQIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQA0JhU8wI1NQ0kdvekhktdmnLfe
-xbjQ5F1fdiLAJvmEOjr5jLX77GDx6M4EsMjdpwOPMPOY36TmpDHf0xwLRtxyID+u
-7gU8pDM/CzmscHhzS5kr3zDCVLCoO1Wh/hYozUK9dG6A2ydEp85EXdQbkJgNHkKU
-sQAsBNB0owIFImNjzYO1+8FtYmtpdf1dcEG59b98377BMnMiIYtYgXsVkXq642RI
-sH/7NiXaldDxJBQX3RiAa0YjOVT1jmIJBB2UkKab5iXiQkWquJCtvgiPqQtCGJTP
-cjnhsUPgKM+351psE2tJs//jGHyJizNdrDPXp/naOlXJWBD5qu9ats9LS98q
------END CERTIFICATE-----
-
-================================================================
-C: US
-O: VeriSign, Inc.
-OU: VeriSign Trust Network
-OU: (c) 1999 VeriSign, Inc. - For authorized use only
-CN: VeriSign Class 3 Public Primary Certification Authority - G3
------BEGIN CERTIFICATE-----
-MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQsw
-CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl
-cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu
-LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT
-aWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
-dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD
-VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT
-aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ
-bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu
-IENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
-LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMu6nFL8eB8aHm8b
-N3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1EUGO+i2t
-KmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGu
-kxUccLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBm
-CC+Vk7+qRy+oRpfwEuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJ
-Xwzw3sJ2zq/3avL6QaaiMxTJ5Xpj055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWu
-imi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAERSWwauSCPc/L8my/uRan2Te
-2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5fj267Cz3qWhMe
-DGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC
-/Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565p
-F4ErWjfJXir0xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGt
-TxzhT5yvDwyd93gN2PQ1VoDat20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ==
------END CERTIFICATE-----
-
-================================================================
-C: US
-O: VeriSign, Inc.
-OU: VeriSign Trust Network
-OU: (c) 1999 VeriSign, Inc. - For authorized use only
-CN: VeriSign Class 4 Public Primary Certification Authority - G3
------BEGIN CERTIFICATE-----
-MIIEGjCCAwICEQDsoKeLbnVqAc/EfMwvlF7XMA0GCSqGSIb3DQEBBQUAMIHKMQsw
-CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl
-cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu
-LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT
-aWduIENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
-dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD
-VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT
-aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ
-bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu
-IENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
-LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAK3LpRFpxlmr8Y+1
-GQ9Wzsy1HyDkniYlS+BzZYlZ3tCD5PUPtbut8XzoIfzk6AzufEUiGXaStBO3IFsJ
-+mGuqPKljYXCKtbeZjbSmwL0qJJgfJxptI8kHtCGUvYynEFYHiK9zUVilQhu0Gbd
-U6LM8BDcVHOLBKFGMzNcF0C5nk3T875Vg+ixiY5afJqWIpA7iCXy0lOIAgwLePLm
-NxdLMEYH5IBtptiWLugs+BGzOA1mppvqySNb247i8xOOGlktqgLw7KSHZtzBP/XY
-ufTsgsbSPZUd5cBPhMnZo0QoBmrXRazwa2rvTl/4EYIeOGM0ZlDUPpNz+jDDZq3/
-ky2X7wMCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAj/ola09b5KROJ1WrIhVZPMq1
-CtRK26vdoV9TxaBXOcLORyu+OshWv8LZJxA6sQU8wHcxuzrTBXttmhwwjIDLk5Mq
-g6sFUYICABFna/OIYUdfA5PVWw3g8dShMjWFsjrbsIKr0csKvE+MW8VLADsfKoKm
-fjaF3H48ZwC15DtS4KjrXRX5xm3wrR0OhbepmnMUWluPQSjA1egtTaRezarZ7c7c
-2NU8Qh0XwRJdRTjDOPP8hS6DRkiy1yBfkjaP53kPmF6Z6PDQpLv1U70qzlmwr25/
-bLvSHgCwIe34QWKCudiyxLtGUPMxxY8BqHTr9Xgn2uf3ZkPznoM+IKrDNWCRzg==
------END CERTIFICATE-----
-
-================================================================
-C: US
-O: VeriSign, Inc.
-OU: VeriSign Trust Network
-OU: (c) 2006 VeriSign, Inc. - For authorized use only
-CN: VeriSign Class 3 Public Primary Certification Authority - G5
------BEGIN CERTIFICATE-----
-MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCB
-yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL
-ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJp
-U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxW
-ZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0
-aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCByjEL
-MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW
-ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2ln
-biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp
-U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y
-aXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvJAgIKXo1
-nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKzj/i5Vbex
-t0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIz
-SdhDY2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQG
-BO+QueQA5N06tRn/Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+
-rCpSx4/VBEnkjWNHiDxpg8v+R70rfk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/
-NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8E
-BAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEwHzAH
-BgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy
-aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKv
-MzEzMA0GCSqGSIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzE
-p6B4Eq1iDkVwZMXnl2YtmAl+X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y
-5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKEKQsTb47bDN0lAtukixlE0kF6BWlK
-WE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiCKm0oHw0LxOXnGiYZ
-4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vEZV8N
-hnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq
------END CERTIFICATE-----
-
-================================================================
-C: US
-O: VeriSign, Inc.
-OU: VeriSign Trust Network
-OU: (c) 2007 VeriSign, Inc. - For authorized use only
-CN: VeriSign Class 3 Public Primary Certification Authority - G4
------BEGIN CERTIFICATE-----
-MIIDhDCCAwqgAwIBAgIQL4D+I4wOIg9IZxIokYesszAKBggqhkjOPQQDAzCByjEL
-MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW
-ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2ln
-biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp
-U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y
-aXR5IC0gRzQwHhcNMDcxMTA1MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCByjELMAkG
-A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJp
-U2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwg
-SW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2ln
-biBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5
-IC0gRzQwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASnVnp8Utpkmw4tXNherJI9/gHm
-GUo9FANL+mAnINmDiWn6VMaaGF5VKmTeBvaNSjutEDxlPZCIBIngMGGzrl0Bp3ve
-fLK+ymVhAIau2o970ImtTR1ZmkGxvEeA3J5iw/mjgbIwga8wDwYDVR0TAQH/BAUw
-AwEB/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJ
-aW1hZ2UvZ2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYj
-aHR0cDovL2xvZ28udmVyaXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFLMW
-kf3upm7ktS5Jj4d4gYDs5bG1MAoGCCqGSM49BAMDA2gAMGUCMGYhDBgmYFo4e1ZC
-4Kf8NoRRkSAsdk1DPcQdhCPQrNZ8NQbOzWm9kA3bbEhCHQ6qQgIxAJw9SDkjOVga
-FRJZap7v1VmyHVIsmXHNxynfGyphe3HR3vPA5Q06Sqotp9iGKt0uEA==
------END CERTIFICATE-----
-
-================================================================
-C: US
-O: VeriSign, Inc.
-OU: VeriSign Trust Network
-OU: (c) 2008 VeriSign, Inc. - For authorized use only
-CN: VeriSign Universal Root Certification Authority
------BEGIN CERTIFICATE-----
-MIIEuTCCA6GgAwIBAgIQQBrEZCGzEyEDDrvkEhrFHTANBgkqhkiG9w0BAQsFADCB
-vTELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL
-ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJp
-U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MTgwNgYDVQQDEy9W
-ZXJpU2lnbiBVbml2ZXJzYWwgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe
-Fw0wODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIG9MQswCQYDVQQGEwJVUzEX
-MBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0
-IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9y
-IGF1dGhvcml6ZWQgdXNlIG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNh
-bCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEF
-AAOCAQ8AMIIBCgKCAQEAx2E3XrEBNNti1xWb/1hajCMj1mCOkdeQmIN65lgZOIzF
-9uVkhbSicfvtvbnazU0AtMgtc6XHaXGVHzk8skQHnOgO+k1KxCHfKWGPMiJhgsWH
-H26MfF8WIFFE0XBPV+rjHOPMee5Y2A7Cs0WTwCznmhcrewA3ekEzeOEz4vMQGn+H
-LL729fdC4uW/h2KJXwBL38Xd5HVEMkE6HnFuacsLdUYI0crSK5XQz/u5QGtkjFdN
-/BMReYTtXlT2NJ8IAfMQJQYXStrxHXpma5hgZqTZ79IugvHw7wnqRMkVauIDbjPT
-rJ9VAMf2CGqUuV/c4DPxhGD5WycRtPwW8rtWaoAljQIDAQABo4GyMIGvMA8GA1Ud
-EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMG0GCCsGAQUFBwEMBGEwX6FdoFsw
-WTBXMFUWCWltYWdlL2dpZjAhMB8wBwYFKw4DAhoEFI/l0xqGrI2Oa8PPgGrUSBgs
-exkuMCUWI2h0dHA6Ly9sb2dvLnZlcmlzaWduLmNvbS92c2xvZ28uZ2lmMB0GA1Ud
-DgQWBBS2d/ppSEefUxLVwuoHMnYH0ZcHGTANBgkqhkiG9w0BAQsFAAOCAQEASvj4
-sAPmLGd75JR3Y8xuTPl9Dg3cyLk1uXBPY/ok+myDjEedO2Pzmvl2MpWRsXe8rJq+
-seQxIcaBlVZaDrHC1LGmWazxY8u4TB1ZkErvkBYoH1quEPuBUDgMbMzxPcP1Y+Oz
-4yHJJDnp/RVmRvQbEdBNc6N9Rvk97ahfYtTxP/jgdFcrGJ2BtMQo2pSXpXDrrB2+
-BxHw1dvd5Yzw1TKwg+ZX4o+/vqGqvz0dtdQ46tewXDpPaj+PwGZsY6rp2aQW9IHR
-lRQOfc2VNNnSj3BzgXucfr2YYdhFh5iQxeuGMMY1v/D/w1WIg0vvBZIGcfK4mJO3
-7M2CYfE45k+XmCpajQ==
------END CERTIFICATE-----
-
-================================================================
-C: US
-O: Wells Fargo
-OU: Wells Fargo Certification Authority
-CN: Wells Fargo Root Certificate Authority
------BEGIN CERTIFICATE-----
-MIID5TCCAs2gAwIBAgIEOeSXnjANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UEBhMC
-VVMxFDASBgNVBAoTC1dlbGxzIEZhcmdvMSwwKgYDVQQLEyNXZWxscyBGYXJnbyBD
-ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEvMC0GA1UEAxMmV2VsbHMgRmFyZ28gUm9v
-dCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDAxMDExMTY0MTI4WhcNMjEwMTE0
-MTY0MTI4WjCBgjELMAkGA1UEBhMCVVMxFDASBgNVBAoTC1dlbGxzIEZhcmdvMSww
-KgYDVQQLEyNXZWxscyBGYXJnbyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEvMC0G
-A1UEAxMmV2VsbHMgRmFyZ28gUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEi
-MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDVqDM7Jvk0/82bfuUER84A4n13
-5zHCLielTWi5MbqNQ1mXx3Oqfz1cQJ4F5aHiidlMuD+b+Qy0yGIZLEWukR5zcUHE
-SxP9cMIlrCL1dQu3U+SlK93OvRw6esP3E48mVJwWa2uv+9iWsWCaSOAlIiR5NM4O
-JgALTqv9i86C1y8IcGjBqAr5dE8Hq6T54oN+J3N0Prj5OEL8pahbSCOz6+MlsoCu
-ltQKnMJ4msZoGK43YjdeUXWoWGPAUe5AeH6orxqg4bB4nVCMe+ez/I4jsNtlAHCE
-AQgAFG5Uhpq6zPk3EPbg3oQtnaSFN9OH4xXQwReQfhkhahKpdv0SAulPIV4XAgMB
-AAGjYTBfMA8GA1UdEwEB/wQFMAMBAf8wTAYDVR0gBEUwQzBBBgtghkgBhvt7hwcB
-CzAyMDAGCCsGAQUFBwIBFiRodHRwOi8vd3d3LndlbGxzZmFyZ28uY29tL2NlcnRw
-b2xpY3kwDQYJKoZIhvcNAQEFBQADggEBANIn3ZwKdyu7IvICtUpKkfnRLb7kuxpo
-7w6kAOnu5+/u9vnldKTC2FJYxHT7zmu1Oyl5GFrvm+0fazbuSCUlFLZWohDo7qd/
-0D+j0MNdJu4HzMPBJCGHHt8qElNvQRbn7a6U+oxy+hNH8Dx+rn0ROhPs7fpvcmR7
-nX1/Jv16+yWt6j4pf0zjAFcysLPp7VMX2YuyFA4w6OXVE8Zkr8QA1dhYJPz1j+zx
-x32l2w8n0cbyQIjmH/ZhqPRCyLk306m+LFZ4wnKbWV01QIroTmMatukgalHizqSQ
-33ZwmVxwQ023tqcZZE6St8WRPH9IFmV7Fv3L/PvZ1dZPIWU7Sn9Ho/s=
------END CERTIFICATE-----
-
-================================================================
-C: US
-O: Wells Fargo WellsSecure
-OU: Wells Fargo Bank NA
-CN: WellsSecure Public Root Certificate Authority
------BEGIN CERTIFICATE-----
-MIIEvTCCA6WgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBhTELMAkGA1UEBhMCVVMx
-IDAeBgNVBAoMF1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxs
-cyBGYXJnbyBCYW5rIE5BMTYwNAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9v
-dCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDcxMjEzMTcwNzU0WhcNMjIxMjE0
-MDAwNzU0WjCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoMF1dlbGxzIEZhcmdvIFdl
-bGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYDVQQD
-DC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkw
-ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDub7S9eeKPCCGeOARBJe+r
-WxxTkqxtnt3CxC5FlAM1iGd0V+PfjLindo8796jE2yljDpFoNoqXjopxaAkH5OjU
-Dk/41itMpBb570OYj7OeUt9tkTmPOL13i0Nj67eT/DBMHAGTthP796EfvyXhdDcs
-HqRePGj4S78NuR4uNuip5Kf4D8uCdXw1LSLWwr8L87T8bJVhHlfXBIEyg1J55oNj
-z7fLY4sR4r1e6/aN7ZVyKLSsEmLpSjPmgzKuBXWVvYSV2ypcm44uDLiBK0HmOFaf
-SZtsdvqKXfcBeYF8wYNABf5x/Qw/zE5gCQ5lRxAvAcAFP4/4s0HvWkJ+We/Slwxl
-AgMBAAGjggE0MIIBMDAPBgNVHRMBAf8EBTADAQH/MDkGA1UdHwQyMDAwLqAsoCqG
-KGh0dHA6Ly9jcmwucGtpLndlbGxzZmFyZ28uY29tL3dzcHJjYS5jcmwwDgYDVR0P
-AQH/BAQDAgHGMB0GA1UdDgQWBBQmlRkQ2eihl5H/3BnZtQQ+0nMKajCBsgYDVR0j
-BIGqMIGngBQmlRkQ2eihl5H/3BnZtQQ+0nMKaqGBi6SBiDCBhTELMAkGA1UEBhMC
-VVMxIDAeBgNVBAoMF1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNX
-ZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMg
-Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHmCAQEwDQYJKoZIhvcNAQEFBQADggEB
-ALkVsUSRzCPIK0134/iaeycNzXK7mQDKfGYZUMbVmO2rvwNa5U3lHshPcZeG1eMd
-/ZDJPHV3V3p9+N701NX3leZ0bh08rnyd2wIDBSxxSyU+B+NemvVmFymIGjifz6pB
-A4SXa5M4esowRBskRDPQ5NHcKDj0E0M1NSljqHyita04pO2t/caaH/+Xc/77szWn
-k4bGdpEA5qxRFsQnMlzbc9qlk1eOPm01JghZ1edE13YgY+esE2fDbbFwRnzVlhE9
-iW9dqKHrjQrawx0zbKPqZxmamX9LPYNRKh3KL4YMon4QLSvUFpULB6ouFJJJtylv
-2G0xffX8oRAHh84vWdw+WNs=
------END CERTIFICATE-----
-
-================================================================
-C: US
-O: thawte, Inc.
-OU: (c) 2007 thawte, Inc. - For authorized use only
-CN: thawte Primary Root CA - G2
------BEGIN CERTIFICATE-----
-MIICiDCCAg2gAwIBAgIQNfwmXNmET8k9Jj1Xm67XVjAKBggqhkjOPQQDAzCBhDEL
-MAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjE4MDYGA1UECxMvKGMp
-IDIwMDcgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAi
-BgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMjAeFw0wNzExMDUwMDAw
-MDBaFw0zODAxMTgyMzU5NTlaMIGEMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhh
-d3RlLCBJbmMuMTgwNgYDVQQLEy8oYykgMjAwNyB0aGF3dGUsIEluYy4gLSBGb3Ig
-YXV0aG9yaXplZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9v
-dCBDQSAtIEcyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEotWcgnuVnfFSeIf+iha/
-BebfowJPDQfGAFG6DAJSLSKkQjnE/o/qycG+1E3/n3qe4rF8mq2nhglzh9HnmuN6
-papu+7qzcMBniKI11KOasf2twu8x+qi58/sIxpHR+ymVo0IwQDAPBgNVHRMBAf8E
-BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUmtgAMADna3+FGO6Lts6K
-DPgR4bswCgYIKoZIzj0EAwMDaQAwZgIxAN344FdHW6fmCsO99YCKlzUNG4k8VIZ3
-KMqh9HneteY4sPBlcIx/AlTCv//YoT7ZzwIxAMSNlPzcU9LcnXgWHxUzI1NS41ox
-XZ3Krr0TKUQNJ1uo52icEvdYPy5yAlejj6EULg==
------END CERTIFICATE-----
-
-================================================================
-C: US
-O: thawte, Inc.
-OU: Certification Services Division
-OU: (c) 2006 thawte, Inc. - For authorized use only
-CN: thawte Primary Root CA
------BEGIN CERTIFICATE-----
-MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCB
-qTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMf
-Q2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIw
-MDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNV
-BAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3MDAwMDAwWhcNMzYw
-NzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5j
-LjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYG
-A1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
-IG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqG
-SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCsoPD7gFnUnMekz52hWXMJEEUMDSxuaPFs
-W0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ1CRfBsDMRJSUjQJib+ta
-3RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGcq/gcfomk
-6KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6
-Sk/KaAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94J
-NqR32HuHUETVPm4pafs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBA
-MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XP
-r87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUFAAOCAQEAeRHAS7ORtvzw6WfU
-DW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeEuzLlQRHAd9mz
-YJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAX
-xPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2
-/qxAeeWsEG89jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/
-LHbTY5xZ3Y+m4Q6gLkH3LpVHz7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7
-jVaMaA==
------END CERTIFICATE-----
-
-================================================================
-C: US
-O: thawte, Inc.
-OU: Certification Services Division
-OU: (c) 2008 thawte, Inc. - For authorized use only
-CN: thawte Primary Root CA - G3
------BEGIN CERTIFICATE-----
-MIIEKjCCAxKgAwIBAgIQYAGXt0an6rS0mtZLL/eQ+zANBgkqhkiG9w0BAQsFADCB
-rjELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMf
-Q2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIw
-MDggdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAiBgNV
-BAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMzAeFw0wODA0MDIwMDAwMDBa
-Fw0zNzEyMDEyMzU5NTlaMIGuMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhhd3Rl
-LCBJbmMuMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlzaW9u
-MTgwNgYDVQQLEy8oYykgMjAwOCB0aGF3dGUsIEluYy4gLSBGb3IgYXV0aG9yaXpl
-ZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAtIEcz
-MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsr8nLPvb2FvdeHsbnndm
-gcs+vHyu86YnmjSjaDFxODNi5PNxZnmxqWWjpYvVj2AtP0LMqmsywCPLLEHd5N/8
-YZzic7IilRFDGF/Eth9XbAoFWCLINkw6fKXRz4aviKdEAhN0cXMKQlkC+BsUa0Lf
-b1+6a4KinVvnSr0eAXLbS3ToO39/fR8EtCab4LRarEc9VbjXsCZSKAExQGbY2SS9
-9irY7CFJXJv2eul/VTV+lmuNk5Mny5K76qxAwJ/C+IDPXfRa3M50hqY+bAtTyr2S
-zhkGcuYMXDhpxwTWvGzOW/b3aJzcJRVIiKHpqfiYnODz1TEoYRFsZ5aNOZnLwkUk
-OQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNV
-HQ4EFgQUrWyqlGCc7eT/+j4KdCtjA/e2Wb8wDQYJKoZIhvcNAQELBQADggEBABpA
-2JVlrAmSicY59BDlqQ5mU1143vokkbvnRFHfxhY0Cu9qRFHqKweKA3rD6z8KLFIW
-oCtDuSWQP3CpMyVtRRooOyfPqsMpQhvfO0zAMzRbQYi/aytlryjvsvXDqmbOe1bu
-t8jLZ8HJnBoYuMTDSQPxYA5QzUbF83d597YV4Djbxy8ooAw/dyZ02SUS2jHaGh7c
-KUGRIjxpp7sC8rZcJwOJ9Abqm+RyguOhCcHpABnTPtRwa7pxpqpYrvS76Wy274fM
-m7v/OeZWYdMKp8RcTGB7BXcmer/YB1IsYvdwY9k5vG8cwnncdimvzsUsZAReiDZu
-MdRAGmI0Nj81Aa6sY6A=
------END CERTIFICATE-----
-
-================================================================
-C: US
-OU: www.xrampsecurity.com
-O: XRamp Security Services Inc
-CN: XRamp Global Certification Authority
------BEGIN CERTIFICATE-----
-MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCB
-gjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEk
-MCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRY
-UmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQxMTAxMTcx
-NDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3
-dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2Vy
-dmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB
-dXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS6
-38eMpSe2OAtp87ZOqCwuIR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCP
-KZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMxfoArtYzAQDsRhtDLooY2YKTVMIJt2W7Q
-DxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FEzG+gSqmUsE3a56k0enI4
-qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqsAxcZZPRa
-JSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNVi
-PvryxS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0P
-BAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASs
-jVy16bYbMDYGA1UdHwQvMC0wK6ApoCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0
-eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQEwDQYJKoZIhvcNAQEFBQAD
-ggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc/Kh4ZzXxHfAR
-vbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt
-qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLa
-IR9NmXmd4c8nnxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSy
-i6mx5O+aGtA9aZnuqCij4Tyz8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQ
-O+7ETPTsJ3xCwnR8gooJybQDJbw=
------END CERTIFICATE-----
-
-================================================================
-C: US
-ST: Arizona
-L: Scottsdale
-O: GoDaddy.com, Inc.
-CN: Go Daddy Root Certificate Authority - G2
------BEGIN CERTIFICATE-----
-MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMx
-EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoT
-EUdvRGFkZHkuY29tLCBJbmMuMTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRp
-ZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIz
-NTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQH
-EwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8GA1UE
-AxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIw
-DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKD
-E6bFIEMBO4Tx5oVJnyfq9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH
-/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD+qK+ihVqf94Lw7YZFAXK6sOoBJQ7Rnwy
-DfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutdfMh8+7ArU6SSYmlRJQVh
-GkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMlNAJWJwGR
-tDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEA
-AaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE
-FDqahQcQZyi27/a9BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmX
-WWcDYfF+OwYxdS2hII5PZYe096acvNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu
-9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r5N9ss4UXnT3ZJE95kTXWXwTr
-gIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYVN8Gb5DKj7Tjo
-2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO
-LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI
-4uJEvlz36hz1
------END CERTIFICATE-----
-
-================================================================
-C: US
-ST: Arizona
-L: Scottsdale
-O: Starfield Technologies, Inc.
-CN: Starfield Root Certificate Authority - G2
------BEGIN CERTIFICATE-----
-MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMx
-EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT
-HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVs
-ZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAw
-MFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6
-b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQgVGVj
-aG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZp
-Y2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
-ggEBAL3twQP89o/8ArFvW59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMg
-nLRJdzIpVv257IzdIvpy3Cdhl+72WoTsbhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1
-HOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNkN3mSwOxGXn/hbVNMYq/N
-Hwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7NfZTD4p7dN
-dloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0
-HZbUJtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAO
-BgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0G
-CSqGSIb3DQEBCwUAA4IBAQARWfolTwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjU
-sHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx4mcujJUDJi5DnUox9g61DLu3
-4jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUwF5okxBDgBPfg
-8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/K
-pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1
-mMpYjn0q7pBZc2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0
------END CERTIFICATE-----
-
-================================================================
-C: US
-ST: Arizona
-L: Scottsdale
-O: Starfield Technologies, Inc.
-CN: Starfield Services Root Certificate Authority - G2
------BEGIN CERTIFICATE-----
-MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMx
-EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT
-HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVs
-ZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5
-MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNVBAYTAlVTMRAwDgYD
-VQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFy
-ZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2Vy
-dmljZXMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI
-hvcNAQEBBQADggEPADCCAQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20p
-OsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm2
-8xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4PahHQUw2eeBGg6345AWh1K
-Ts9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLPLJGmpufe
-hRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk
-6mFBrMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAw
-DwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+q
-AdcwKziIorhtSpzyEZGDMA0GCSqGSIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMI
-bw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPPE95Dz+I0swSdHynVv/heyNXB
-ve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTyxQGjhdByPq1z
-qwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd
-iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn
-0q23KXB56jzaYyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCN
-sSi6
------END CERTIFICATE-----
-
-================================================================
-C: US
-ST: Indiana
-L: Indianapolis
-O: Software in the Public Interest
-OU: hostmaster
-CN: Certificate Authority
-emailAddress: hostmaster@spi-inc.org
------BEGIN CERTIFICATE-----
-MIIIDjCCBfagAwIBAgIJAOiOtsn4KhQoMA0GCSqGSIb3DQEBBQUAMIG8MQswCQYD
-VQQGEwJVUzEQMA4GA1UECBMHSW5kaWFuYTEVMBMGA1UEBxMMSW5kaWFuYXBvbGlz
-MSgwJgYDVQQKEx9Tb2Z0d2FyZSBpbiB0aGUgUHVibGljIEludGVyZXN0MRMwEQYD
-VQQLEwpob3N0bWFzdGVyMR4wHAYDVQQDExVDZXJ0aWZpY2F0ZSBBdXRob3JpdHkx
-JTAjBgkqhkiG9w0BCQEWFmhvc3RtYXN0ZXJAc3BpLWluYy5vcmcwHhcNMDgwNTEz
-MDgwNzU2WhcNMTgwNTExMDgwNzU2WjCBvDELMAkGA1UEBhMCVVMxEDAOBgNVBAgT
-B0luZGlhbmExFTATBgNVBAcTDEluZGlhbmFwb2xpczEoMCYGA1UEChMfU29mdHdh
-cmUgaW4gdGhlIFB1YmxpYyBJbnRlcmVzdDETMBEGA1UECxMKaG9zdG1hc3RlcjEe
-MBwGA1UEAxMVQ2VydGlmaWNhdGUgQXV0aG9yaXR5MSUwIwYJKoZIhvcNAQkBFhZo
-b3N0bWFzdGVyQHNwaS1pbmMub3JnMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
-CgKCAgEA3DbmR0LCxFF1KYdAw9iOIQbSGE7r7yC9kDyFEBOMKVuUY/b0LfEGQpG5
-GcRCaQi/izZF6igFM0lIoCdDkzWKQdh4s/Dvs24t3dHLfer0dSbTPpA67tfnLAS1
-fOH1fMVO73e9XKKTM5LOfYFIz2u1IiwIg/3T1c87Lf21SZBb9q1NE8re06adU1Fx
-Y0b4ShZcmO4tbZoWoXaQ4mBDmdaJ1mwuepiyCwMs43pPx93jzONKao15Uvr0wa8u
-jyoIyxspgpJyQ7zOiKmqp4pRQ1WFmjcDeJPI8L20QcgHQprLNZd6ioFl3h1UCAHx
-ZFy3FxpRvB7DWYd2GBaY7r/2Z4GLBjXFS21ZGcfSxki+bhQog0oQnBv1b7ypjvVp
-/rLBVcznFMn5WxRTUQfqzj3kTygfPGEJ1zPSbqdu1McTCW9rXRTunYkbpWry9vjQ
-co7qch8vNGopCsUK7BxAhRL3pqXTT63AhYxMfHMgzFMY8bJYTAH1v+pk1Vw5xc5s
-zFNaVrpBDyXfa1C2x4qgvQLCxTtVpbJkIoRRKFauMe5e+wsWTUYFkYBE7axt8Feo
-+uthSKDLG7Mfjs3FIXcDhB78rKNDCGOM7fkn77SwXWfWT+3Qiz5dW8mRvZYChD3F
-TbxCP3T9PF2sXEg2XocxLxhsxGjuoYvJWdAY4wCAs1QnLpnwFVMCAwEAAaOCAg8w
-ggILMB0GA1UdDgQWBBQ0cdE41xU2g0dr1zdkQjuOjVKdqzCB8QYDVR0jBIHpMIHm
-gBQ0cdE41xU2g0dr1zdkQjuOjVKdq6GBwqSBvzCBvDELMAkGA1UEBhMCVVMxEDAO
-BgNVBAgTB0luZGlhbmExFTATBgNVBAcTDEluZGlhbmFwb2xpczEoMCYGA1UEChMf
-U29mdHdhcmUgaW4gdGhlIFB1YmxpYyBJbnRlcmVzdDETMBEGA1UECxMKaG9zdG1h
-c3RlcjEeMBwGA1UEAxMVQ2VydGlmaWNhdGUgQXV0aG9yaXR5MSUwIwYJKoZIhvcN
-AQkBFhZob3N0bWFzdGVyQHNwaS1pbmMub3JnggkA6I62yfgqFCgwDwYDVR0TAQH/
-BAUwAwEB/zARBglghkgBhvhCAQEEBAMCAAcwCQYDVR0SBAIwADAuBglghkgBhvhC
-AQ0EIRYfU29mdHdhcmUgaW4gdGhlIFB1YmxpYyBJbnRlcmVzdDAwBglghkgBhvhC
-AQQEIxYhaHR0cHM6Ly9jYS5zcGktaW5jLm9yZy9jYS1jcmwucGVtMDIGCWCGSAGG
-+EIBAwQlFiNodHRwczovL2NhLnNwaS1pbmMub3JnL2NlcnQtY3JsLnBlbTAhBgNV
-HREEGjAYgRZob3N0bWFzdGVyQHNwaS1pbmMub3JnMA4GA1UdDwEB/wQEAwIBBjAN
-BgkqhkiG9w0BAQUFAAOCAgEAtM294LnqsgMrfjLp3nI/yUuCXp3ir1UJogxU6M8Y
-PCggHam7AwIvUjki+RfPrWeQswN/2BXja367m1YBrzXU2rnHZxeb1NUON7MgQS4M
-AcRb+WU+wmHo0vBqlXDDxm/VNaSsWXLhid+hoJ0kvSl56WEq2dMeyUakCHhBknIP
-qxR17QnwovBc78MKYiC3wihmrkwvLo9FYyaW8O4x5otVm6o6+YI5HYg84gd1GuEP
-sTC8cTLSOv76oYnzQyzWcsR5pxVIBcDYLXIC48s9Fmq6ybgREOJJhcyWR2AFJS7v
-dVkz9UcZFu/abF8HyKZQth3LZjQl/GaD68W2MEH4RkRiqMEMVObqTFoo5q7Gt/5/
-O5aoLu7HaD7dAD0prypjq1/uSSotxdz70cbT0ZdWUoa2lOvUYFG3/B6bzAKb1B+P
-+UqPti4oOxfMxaYF49LTtcYDyeFIQpvLP+QX4P4NAZUJurgNceQJcHdC2E3hQqlg
-g9cXiUPS1N2nGLar1CQlh7XU4vwuImm9rWgs/3K1mKoGnOcqarihk3bOsPN/nOHg
-T7jYhkalMwIsJWE3KpLIrIF0aGOHM3a9BX9e1dUCbb2v/ypaqknsmHlHU5H2DjRa
-yaXG67Ljxay2oHA1u8hRadDytaIybrw/oDc5fHE2pgXfDBLkFqfF1stjo5VwP+YE
-o2A=
------END CERTIFICATE-----
-
-================================================================
-C: US
-ST: UT
-L: Salt Lake City
-O: The USERTRUST Network
-OU: http://www.usertrust.com
-CN: UTN - DATACorp SGC
------BEGIN CERTIFICATE-----
-MIIEXjCCA0agAwIBAgIQRL4Mi1AAIbQR0ypoBqmtaTANBgkqhkiG9w0BAQUFADCB
-kzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug
-Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho
-dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xGzAZBgNVBAMTElVUTiAtIERBVEFDb3Jw
-IFNHQzAeFw05OTA2MjQxODU3MjFaFw0xOTA2MjQxOTA2MzBaMIGTMQswCQYDVQQG
-EwJVUzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4wHAYD
-VQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cu
-dXNlcnRydXN0LmNvbTEbMBkGA1UEAxMSVVROIC0gREFUQUNvcnAgU0dDMIIBIjAN
-BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3+5YEKIrblXEjr8uRgnn4AgPLit6
-E5Qbvfa2gI5lBZMAHryv4g+OGQ0SR+ysraP6LnD43m77VkIVni5c7yPeIbkFdicZ
-D0/Ww5y0vpQZY/KmEQrrU0icvvIpOxboGqBMpsn0GFlowHDyUwDAXlCCpVZvNvlK
-4ESGoE1O1kduSUrLZ9emxAW5jh70/P/N5zbgnAVssjMiFdC04MwXwLLA9P4yPykq
-lXvY8qdOD1R8oQ2AswkDwf9c3V6aPryuvEeKaq5xyh+xKrhfQgUL7EYw0XILyulW
-bfXv33i+Ybqypa4ETLyorGkVl73v67SMvzX41MPRKA5cOp9wGDMgd8SirwIDAQAB
-o4GrMIGoMAsGA1UdDwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRT
-MtGzz3/64PGgXYVOktKeRR20TzA9BgNVHR8ENjA0MDKgMKAuhixodHRwOi8vY3Js
-LnVzZXJ0cnVzdC5jb20vVVROLURBVEFDb3JwU0dDLmNybDAqBgNVHSUEIzAhBggr
-BgEFBQcDAQYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBMA0GCSqGSIb3DQEBBQUAA4IB
-AQAnNZcAiosovcYzMB4p/OL31ZjUQLtgyr+rFywJNn9Q+kHcrpY6CiM+iVnJowft
-Gzet/Hy+UUla3joKVAgWRcKZsYfNjGjgaQPpxE6YsjuMFrMOoAyYUJuTqXAJyCyj
-j98C5OBxOvG0I3KgqgHf35g+FFCgMSa9KOlaMCZ1+XtgHI3zzVAmbQQnmt/VDUVH
-KWss5nbZqSl9Mt3JNjy9rjXxEZ4du5A/EkdOjtd+D2JzHVImOBwYSf0wdJrE5SIv
-2MCN7ZF6TACPcn9d2t0bi0Vr591pl6jFVkwPDPafepE39peC4N1xaf92P2BNPM/3
-mfnGV/TJVTl4uix5yaaIK/QI
------END CERTIFICATE-----
-
-================================================================
-C: US
-ST: UT
-L: Salt Lake City
-O: The USERTRUST Network
-OU: http://www.usertrust.com
-CN: UTN-USERFirst-Client Authentication and Email
------BEGIN CERTIFICATE-----
-MIIEojCCA4qgAwIBAgIQRL4Mi1AAJLQR0zYlJWfJiTANBgkqhkiG9w0BAQUFADCB
-rjELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug
-Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho
-dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xNjA0BgNVBAMTLVVUTi1VU0VSRmlyc3Qt
-Q2xpZW50IEF1dGhlbnRpY2F0aW9uIGFuZCBFbWFpbDAeFw05OTA3MDkxNzI4NTBa
-Fw0xOTA3MDkxNzM2NThaMIGuMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQxFzAV
-BgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5l
-dHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRydXN0LmNvbTE2MDQGA1UE
-AxMtVVROLVVTRVJGaXJzdC1DbGllbnQgQXV0aGVudGljYXRpb24gYW5kIEVtYWls
-MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsjmFpPJ9q0E7YkY3rs3B
-YHW8OWX5ShpHornMSMxqmNVNNRm5pELlzkniii8efNIxB8dOtINknS4p1aJkxIW9
-hVE1eaROaJB7HHqkkqgX8pgV8pPMyaQylbsMTzC9mKALi+VuG6JG+ni8om+rWV6l
-L8/K2m2qL+usobNqqrcuZzWLeeEeaYji5kbNoKXqvgvOdjp6Dpvq/NonWz1zHyLm
-SGHGTPNpsaguG7bUMSAsvIKKjqQOpdeJQ/wWWq8dcdcRWdq6hw2v+vPhwvCkxWeM
-1tZUOt4KpLoDd7NlyP0e03RiqhjKaJMeoYV+9Udly/hNVyh00jT/MLbu9mIwFIws
-6wIDAQABo4G5MIG2MAsGA1UdDwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1Ud
-DgQWBBSJgmd9xJ0mcABLtFBIfN49rgRufTBYBgNVHR8EUTBPME2gS6BJhkdodHRw
-Oi8vY3JsLnVzZXJ0cnVzdC5jb20vVVROLVVTRVJGaXJzdC1DbGllbnRBdXRoZW50
-aWNhdGlvbmFuZEVtYWlsLmNybDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUH
-AwQwDQYJKoZIhvcNAQEFBQADggEBALFtYV2mGn98q0rkMPxTbyUkxsrt4jFcKw7u
-7mFVbwQ+zznexRtJlOTrIEy05p5QLnLZjfWqo7NK2lYcYJeA3IKirUq9iiv/Cwm0
-xtcgBEXkzYABurorbs6q15L+5K/r9CYdFip/bDCVNy8zEqx/3cfREYxRmLLQo5HQ
-rfafnoOTHh1CuEava2bwm3/q4wMC5QJRwarVNZ1yQAOJujEdxRBoUp7fooXFXAim
-eOZTT7Hot9MUnpOmw2TjrH5xzbyf6QMbzPvprDHBr3wVdAKZw7JHpsIyYdfHb0gk
-USeh1YdV8nuPmD0Wnu51tvjQjvLzxq4oW6fw8zYX/MMF08oDSlQ=
------END CERTIFICATE-----
-
-================================================================
-C: US
-ST: UT
-L: Salt Lake City
-O: The USERTRUST Network
-OU: http://www.usertrust.com
-CN: UTN-USERFirst-Hardware
------BEGIN CERTIFICATE-----
-MIIEdDCCA1ygAwIBAgIQRL4Mi1AAJLQR0zYq/mUK/TANBgkqhkiG9w0BAQUFADCB
-lzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug
-Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho
-dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3Qt
-SGFyZHdhcmUwHhcNOTkwNzA5MTgxMDQyWhcNMTkwNzA5MTgxOTIyWjCBlzELMAkG
-A1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEe
-MBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8v
-d3d3LnVzZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdh
-cmUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCx98M4P7Sof885glFn
-0G2f0v9Y8+efK+wNiVSZuTiZFvfgIXlIwrthdBKWHTxqctU8EGc6Oe0rE81m65UJ
-M6Rsl7HoxuzBdXmcRl6Nq9Bq/bkqVRcQVLMZ8Jr28bFdtqdt++BxF2uiiPsA3/4a
-MXcMmgF6sTLjKwEHOG7DpV4jvEWbe1DByTCP2+UretNb+zNAHqDVmBe8i4fDidNd
-oI6yqqr2jmmIBsX6iSHzCJ1pLgkzmykNRg+MzEk0sGlRvfkGzWitZky8PqxhvQqI
-DsjfPe58BEydCl5rkdbux+0ojatNh4lz0G6k0B4WixThdkQDf2Os5M1JnMWS9Ksy
-oUhbAgMBAAGjgbkwgbYwCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYD
-VR0OBBYEFKFyXyYbKJhDlV0HN9WFlp1L0sNFMEQGA1UdHwQ9MDswOaA3oDWGM2h0
-dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9VVE4tVVNFUkZpcnN0LUhhcmR3YXJlLmNy
-bDAxBgNVHSUEKjAoBggrBgEFBQcDAQYIKwYBBQUHAwUGCCsGAQUFBwMGBggrBgEF
-BQcDBzANBgkqhkiG9w0BAQUFAAOCAQEARxkP3nTGmZev/K0oXnWO6y1n7k57K9cM
-//bey1WiCuFMVGWTYGufEpytXoMs61quwOQt9ABjHbjAbPLPSbtNk28Gpgoiskli
-CE7/yMgUsogWXecB5BKV5UU0s4tpvc+0hY91UZ59Ojg6FEgSxvunOxqNDYJAB+gE
-CJChicsZUN/KHAG8HQQZexB2lzvukJDKxA4fFm517zP4029bHpbj4HR3dHuKom4t
-3XbWOTCC8KucUvIqx69JXn7HaOWCgchqJ/kniCrVWFCVH/A7HFe7fRQ5YiuayZSS
-KqMiDP+JJn1fIytH1xUdqWqeUQ0qUZ6B+dQ7XnASfxAynB67nfhmqA==
------END CERTIFICATE-----
-
-================================================================
-C: ZA
-ST: Western Cape
-L: Cape Town
-O: Thawte Consulting cc
-OU: Certification Services Division
-CN: Thawte Premium Server CA
-emailAddress: premium-server@thawte.com
------BEGIN CERTIFICATE-----
-MIIDJzCCApCgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBzjELMAkGA1UEBhMCWkEx
-FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYD
-VQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlv
-biBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UEAxMYVGhhd3RlIFByZW1pdW0gU2Vy
-dmVyIENBMSgwJgYJKoZIhvcNAQkBFhlwcmVtaXVtLXNlcnZlckB0aGF3dGUuY29t
-MB4XDTk2MDgwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgc4xCzAJBgNVBAYTAlpB
-MRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsG
-A1UEChMUVGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRp
-b24gU2VydmljZXMgRGl2aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQcmVtaXVtIFNl
-cnZlciBDQTEoMCYGCSqGSIb3DQEJARYZcHJlbWl1bS1zZXJ2ZXJAdGhhd3RlLmNv
-bTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0jY2aovXwlue2oFBYo847kkE
-VdbQ7xwblRZH7xhINTpS9CtqBo87L+pW46+GjZ4X9560ZXUCTe/LCaIhUdib0GfQ
-ug2SBhRz1JPLlyoAnFxODLz6FVL88kRu2hFKbgifLy3j+ao6hnO2RlNYyIkFvYMR
-uHM/qgeN9EJN50CdHDcCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG
-9w0BAQQFAAOBgQAmSCwWwlj66BZ0DKqqX1Q/8tfJeGBeXm43YyJ3Nn6yF8Q0ufUI
-hfzJATj/Tb7yFkJD57taRvvBxhEf8UqwKEbJw8RCfbz6q1lu1bdRiBHjpIUZa4JM
-pAwSremkrj/xw0llmozFyD4lt5SZu5IycQfwhl7tUCemDaYj+bvLpgcUQg==
------END CERTIFICATE-----
-
-================================================================
-C: ZA
-ST: Western Cape
-L: Cape Town
-O: Thawte Consulting cc
-OU: Certification Services Division
-CN: Thawte Server CA
-emailAddress: server-certs@thawte.com
------BEGIN CERTIFICATE-----
-MIIDEzCCAnygAwIBAgIBATANBgkqhkiG9w0BAQQFADCBxDELMAkGA1UEBhMCWkEx
-FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYD
-VQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlv
-biBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcGA1UEAxMQVGhhd3RlIFNlcnZlciBDQTEm
-MCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5jb20wHhcNOTYwODAx
-MDAwMDAwWhcNMjAxMjMxMjM1OTU5WjCBxDELMAkGA1UEBhMCWkExFTATBgNVBAgT
-DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3
-dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNl
-cyBEaXZpc2lvbjEZMBcGA1UEAxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3
-DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQAD
-gY0AMIGJAoGBANOkUG7I/1Zr5s9dtuoMaHVHoqrC2oQl/Kj0R1HahbUgdJSGHg91
-yekIYfUGbTBuFRkC6VLAYttNmZ7iagxEOM3+vuNkCXDF/rFrKbYvScg71CcEJRCX
-L+eQbcAoQpnXTEPew/UhbVSfXcNY4cDk2VuwuNy0e982OsK1ZiIS1ocNAgMBAAGj
-EzARMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAB/pMaVz7lcxG
-7oWDTSEwjsrZqG9JGubaUeNgcGyEYRGhGshIPllDfU+VPaGLtwtimHp1it2ITk6e
-QNuozDJ0uW8NxuOzRAvZim+aKZuZGCg70eNAKJpaPNW15yAbi8qkq43pUdniTCxZ
-qdq5snUb9kLy78fyGPmJvKP/iiMucEc=
------END CERTIFICATE-----
-
-================================================================
-C: ch
-O: Swisscom
-OU: Digital Certificate Services
-CN: Swisscom Root CA 1
------BEGIN CERTIFICATE-----
-MIIF2TCCA8GgAwIBAgIQXAuFXAvnWUHfV8w/f52oNjANBgkqhkiG9w0BAQUFADBk
-MQswCQYDVQQGEwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsTHERpZ2l0
-YWwgQ2VydGlmaWNhdGUgU2VydmljZXMxGzAZBgNVBAMTElN3aXNzY29tIFJvb3Qg
-Q0EgMTAeFw0wNTA4MTgxMjA2MjBaFw0yNTA4MTgyMjA2MjBaMGQxCzAJBgNVBAYT
-AmNoMREwDwYDVQQKEwhTd2lzc2NvbTElMCMGA1UECxMcRGlnaXRhbCBDZXJ0aWZp
-Y2F0ZSBTZXJ2aWNlczEbMBkGA1UEAxMSU3dpc3Njb20gUm9vdCBDQSAxMIICIjAN
-BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0LmwqAzZuz8h+BvVM5OAFmUgdbI9
-m2BtRsiMMW8Xw/qabFbtPMWRV8PNq5ZJkCoZSx6jbVfd8StiKHVFXqrWW/oLJdih
-FvkcxC7mlSpnzNApbjyFNDhhSbEAn9Y6cV9Nbc5fuankiX9qUvrKm/LcqfmdmUc/
-TilftKaNXXsLmREDA/7n29uj/x2lzZAeAR81sH8A25Bvxn570e56eqeqDFdvpG3F
-EzuwpdntMhy0XmeLVNxzh+XTF3xmUHJd1BpYwdnP2IkCb6dJtDZd0KTeByy2dbco
-kdaXvij1mB7qWybJvbCXc9qukSbraMH5ORXWZ0sKbU/Lz7DkQnGMU3nn7uHbHaBu
-HYwadzVcFh4rUx80i9Fs/PJnB3r1re3WmquhsUvhzDdf/X/NTa64H5xD+SpYVUNF
-vJbNcA78yeNmuk6NO4HLFWR7uZToXTNShXEuT46iBhFRyePLoW4xCGQMwtI89Tbo
-19AOeCMgkckkKmUpWyL3Ic6DXqTz3kvTaI9GdVyDCW4pa8RwjPWd1yAv/0bSKzjC
-L3UcPX7ape8eYIVpQtPM+GP+HkM5haa2Y0EQs3MevNP6yn0WR+Kn1dCjigoIlmJW
-bjTb2QK5MHXjBNLnj8KwEUAKrNVxAmKLMb7dxiNYMUJDLXT5xp6mig/p/r+D5kNX
-JLrvRjSq1xIBOO0CAwEAAaOBhjCBgzAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0hBBYw
-FDASBgdghXQBUwABBgdghXQBUwABMBIGA1UdEwEB/wQIMAYBAf8CAQcwHwYDVR0j
-BBgwFoAUAyUv3m+CATpcLNwroWm1Z9SM0/0wHQYDVR0OBBYEFAMlL95vggE6XCzc
-K6FptWfUjNP9MA0GCSqGSIb3DQEBBQUAA4ICAQA1EMvspgQNDQ/NwNurqPKIlwzf
-ky9NfEBWMXrrpA9gzXrzvsMnjgM+pN0S734edAY8PzHyHHuRMSG08NBsl9Tpl7Ik
-Vh5WwzW9iAUPWxAaZOHHgjD5Mq2eUCzneAXQMbFamIp1TpBcahQq4FJHgmDmHtqB
-sfsUC1rxn9KVuj7QG9YVHaO+htXbD8BJZLsuUBlL0iT43R4HVtA4oJVwIHaM190e
-3p9xxCPvgxNcoyQVTSlAPGrEqdi3pkSlDfTgnXceQHAm/NrZNuR55LU/vJtlvrsR
-ls/bxig5OgjOR1tTWsWZ/l2p3e9M1MalrQLmjAcSHm8D0W+go/MpvRLHUKKwf4ip
-mXeascClOS5cfGniLLDqN2qk4Vrh9VDlg++luyqI54zb/W1elxmofmZ1a3Hqv7HH
-b6D0jqTsNFFbjCYDcKF31QESVwA12yPeDooomf2xEG9L/zgtYE4snOtnta1J7ksf
-rK/7DZBaZmBwXarNeNQk7shBoJMBkpxqnvy5JMWzFYJ+vq6VK+uxwNrjAWALXmms
-hFZhvnEX/h0TD/7Gh0Xp/jKgGg0TpJRVcaUWi7rKibCyx/yP2FS1k2Kdzs9Z+z0Y
-zirLNRWCXf9UIltxUvu3yf5gmwBBZPCqKuy2QkPOiWaByIufOVQDJdMWNY6E0F/6
-MBr1mmz0DlP5OlvRHA==
------END CERTIFICATE-----
-
-================================================================
-C: ch
-O: Swisscom
-OU: Digital Certificate Services
-CN: Swisscom Root CA 2
------BEGIN CERTIFICATE-----
-MIIF2TCCA8GgAwIBAgIQHp4o6Ejy5e/DfEoeWhhntjANBgkqhkiG9w0BAQsFADBk
-MQswCQYDVQQGEwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsTHERpZ2l0
-YWwgQ2VydGlmaWNhdGUgU2VydmljZXMxGzAZBgNVBAMTElN3aXNzY29tIFJvb3Qg
-Q0EgMjAeFw0xMTA2MjQwODM4MTRaFw0zMTA2MjUwNzM4MTRaMGQxCzAJBgNVBAYT
-AmNoMREwDwYDVQQKEwhTd2lzc2NvbTElMCMGA1UECxMcRGlnaXRhbCBDZXJ0aWZp
-Y2F0ZSBTZXJ2aWNlczEbMBkGA1UEAxMSU3dpc3Njb20gUm9vdCBDQSAyMIICIjAN
-BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAlUJOhJ1R5tMJ6HJaI2nbeHCOFvEr
-jw0DzpPMLgAIe6szjPTpQOYXTKueuEcUMncy3SgM3hhLX3af+Dk7/E6J2HzFZ++r
-0rk0X2s682Q2zsKwzxNoysjL67XiPS4h3+os1OD5cJZM/2pYmLcX5BtS5X4HAB1f
-2uY+lQS3aYg5oUFgJWFLlTloYhyxCwWJwDaCFCE/rtuh/bxvHGCGtlOUSbkrRsVP
-ACu/obvLP+DHVxxX6NZp+MEkUp2IVd3Chy50I9AU/SpHWrumnf2U5NGKpV+GY3aF
-y6//SSj8gO1MedK75MDvAe5QQQg1I3ArqRa0jG6F6bYRzzHdUyYb3y1aSgJA/MTA
-tukxGggo5WDDH8SQjhBiYEQN7Aq+VRhxLKX0srwVYv8c474d2h5Xszx+zYIdkeNL
-6yxSNLCK/RJOlrDrcH+eOfdmQrGrrFLadkBXeyq96G4DsguAhYidDMfCd7Camlf0
-uPoTXGiTOmekl9AbmbeGMktg2M7v0Ax/lZ9vh0+Hio5fCHyqW/xavqGRn1V9TrAL
-acywlKinh/LTSlDcX3KwFnUey7QYYpqwpzmqm59m2I2mbJYV4+by+PGDYmy7Velh
-k6M99bFXi08jsJvllGov34zflVEpYKELKeRcVVi3qPyZ7iVNTA6z00yPhOgpD/0Q
-VAKFyPnlw4vP5w8CAwEAAaOBhjCBgzAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0hBBYw
-FDASBgdghXQBUwIBBgdghXQBUwIBMBIGA1UdEwEB/wQIMAYBAf8CAQcwHQYDVR0O
-BBYEFE0mICKJS9PVpAqhb97iEoHF8TwuMB8GA1UdIwQYMBaAFE0mICKJS9PVpAqh
-b97iEoHF8TwuMA0GCSqGSIb3DQEBCwUAA4ICAQAyCrKkG8t9voJXiblqf/P0wS4R
-fbgZPnm3qKhyN2abGu2sEzsOv2LwnN+ee6FTSA5BesogpxcbtnjsQJHzQq0Qw1zv
-/2BZf82Fo4s9SBwlAjxnffUy6S8w5X2lejjQ82YqZh6NM4OKb3xuqFp1mrjX2lhI
-REeoTPpMSQpKwhI3qEAMw8jh0FcNlzKVxzqfl9NX+Ave5XLzo9v/tdhZsnPdTSpx
-srpJ9csc1fV5yJmz/MFMdOO0vSk3FQQoHt5FRnDsr7p4DooqzgB53MBfGWcsa0vv
-aGgLQ+OswWIJ76bdZWGgr4RVSJFSHMYlkSrQwSIjYVmvRRGFHQEkNI/Ps/8XciAT
-woCqISxxOQ7Qj1zB09GOInJGTB2Wrk9xseEFKZZZ9LuedT3PDTcNYtsmjGOpI99n
-Bjx8Oto0QuFmtEYE3saWmA9LSHokMnWRn6z3aOkquVVlzl1h0ydw2Df+n7mvoC5W
-t6NlUe07qxS/TFED6F+KBZvuim6c779o+sjaC+NCydAXFJy3SuCvkychVSa1ZC+N
-8f+mQAWFBVzKBxlcCxMoTFh/wqXvRdpg065lYZ1Tg3TCrvJcwhbtkj6EPnNgiLx2
-9CzP0H1907he0ZESEOnN3col49XtmS++dYFLJPlFRpTJKSFTnCZFqhMX5OfNeOI5
-wSsSnqaeG8XmDtkx2Q==
------END CERTIFICATE-----
-
-================================================================
-C: ch
-O: Swisscom
-OU: Digital Certificate Services
-CN: Swisscom Root EV CA 2
------BEGIN CERTIFICATE-----
-MIIF4DCCA8igAwIBAgIRAPL6ZOJ0Y9ON/RAdBB92ylgwDQYJKoZIhvcNAQELBQAw
-ZzELMAkGA1UEBhMCY2gxETAPBgNVBAoTCFN3aXNzY29tMSUwIwYDVQQLExxEaWdp
-dGFsIENlcnRpZmljYXRlIFNlcnZpY2VzMR4wHAYDVQQDExVTd2lzc2NvbSBSb290
-IEVWIENBIDIwHhcNMTEwNjI0MDk0NTA4WhcNMzEwNjI1MDg0NTA4WjBnMQswCQYD
-VQQGEwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsTHERpZ2l0YWwgQ2Vy
-dGlmaWNhdGUgU2VydmljZXMxHjAcBgNVBAMTFVN3aXNzY29tIFJvb3QgRVYgQ0Eg
-MjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMT3HS9X6lds93BdY7Bx
-UglgRCgzo3pOCvrY6myLURYaVa5UJsTMRQdBTxB5f3HSek4/OE6zAMaVylvNwSqD
-1ycfMQ4jFrclyxy0uYAyXhqdk/HoPGAsp15XGVhRXrwsVgu42O+LgrQ8uMIkqBPH
-oCE2G3pXKSinLr9xJZDzRINpUKTk4RtiGZQJo/PDvO/0vezbE53PnUgJUmfANykR
-HvvSEaeFGHR55E+FFOtSN+KxRdjMDUN/rhPSays/p8LiqG12W0OfvrSdsyaGOx9/
-5fLoZigWJdBLlzin5M8J0TbDC77aO0RYjb7xnglrPvMyxyuHxuxenPaHZa0zKcQv
-idm5y8kDnftslFGXEBuGCxobP/YCfnvUxVFkKJ3106yDgYjTdLRZncHrYTNaRdHL
-OdAGalNgHa/2+2m8atwBz735j9m9W8E6X47aD0upm50qKGsaCnw8qyIL5XctcfaC
-NYGu+HuB5ur+rPQam3Rc6I8k9l2dRsQs0h4rIWqDJ2dVSqTjyDKXZpBy2uPUZC5f
-46Fq9mDU5zXNysRojddxyNMkM3OxbPlq4SjbX8Y96L5V5jcb7STZDxmPX2MYWFCB
-UWVv8p9+agTnNCRxunZLWB4ZvRVgRaoMEkABnRDixzgHcgplwLa7JSnaFp6LNYth
-7eVxV4O1PHGf40+/fh6Bn0GXAgMBAAGjgYYwgYMwDgYDVR0PAQH/BAQDAgGGMB0G
-A1UdIQQWMBQwEgYHYIV0AVMCAgYHYIV0AVMCAjASBgNVHRMBAf8ECDAGAQH/AgED
-MB0GA1UdDgQWBBRF2aWBbj2ITY1x0kbBbkUe88SAnTAfBgNVHSMEGDAWgBRF2aWB
-bj2ITY1x0kbBbkUe88SAnTANBgkqhkiG9w0BAQsFAAOCAgEAlDpzBp9SSzBc1P6x
-XCX5145v9Ydkn+0UjrgEjihLj6p7jjm02Vj2e6E1CqGdivdj5eu9OYLU43otb98T
-PLr+flaYC/NUn81ETm484T4VvwYmneTwkLbUwp4wLh/vx3rEUMfqe9pQy3omywC0
-Wqu1kx+AiYQElY2NfwmTv9SoqORjbdlk5LgpWgi/UOGED1V7XwgiG/W9mR4U9s70
-WBCCswo9GcG/W6uqmdjyMb3lOGbcWAXH7WMaLgqXfIeTK7KK4/HsGOV1timH59yL
-Gn602MnTihdsfSlEvoqq9X46Lmgxk7lq2prg2+kupYTNHAq4Sgj5nPFhJpiTt3tm
-7JFe3VE/23MPrQRYCd0EApUKPtN236YQHoA96M2kZNEzx5LH4k5E4wnJTsJdhw4S
-nr8PyQUQ3nqjsTzyP6WqJ3mtMX0f/fwZacXduT98zca0wjAefm6S139hdlqP65VN
-vBFuIXxZN5nQBrz5Bm0yFqXZaajh3DyAHmBR3NdUIR7KYndP+tiPsys6DXhyyWhB
-WkdKwqPrGtcKqzwyVcgKEZzfdNbwQBUdyLmPtTbFr/giuMod89a2GQ+fYWVq6nTI
-fI/DT11lgh/ZDYnadXL77/FHZxOzyNEZiCcmmpl5fx7kLD977vHeTYuWl8PVP3wb
-I+2ksx0WckNLIOFZfsLorSa/ovc=
------END CERTIFICATE-----
-
-================================================================
-CN: ACEDICOM Root
-OU: PKI
-O: EDICOM
-C: ES
------BEGIN CERTIFICATE-----
-MIIFtTCCA52gAwIBAgIIYY3HhjsBggUwDQYJKoZIhvcNAQEFBQAwRDEWMBQGA1UE
-AwwNQUNFRElDT00gUm9vdDEMMAoGA1UECwwDUEtJMQ8wDQYDVQQKDAZFRElDT00x
-CzAJBgNVBAYTAkVTMB4XDTA4MDQxODE2MjQyMloXDTI4MDQxMzE2MjQyMlowRDEW
-MBQGA1UEAwwNQUNFRElDT00gUm9vdDEMMAoGA1UECwwDUEtJMQ8wDQYDVQQKDAZF
-RElDT00xCzAJBgNVBAYTAkVTMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKC
-AgEA/5KV4WgGdrQsyFhIyv2AVClVYyT/kGWbEHV7w2rbYgIB8hiGtXxaOLHkWLn7
-09gtn70yN78sFW2+tfQh0hOR2QetAQXW8713zl9CgQr5auODAKgrLlUTY4HKRxx7
-XBZXehuDYAQ6PmXDzQHe3qTWDLqO3tkE7hdWIpuPY/1NFgu3e3eM+SW10W2ZEi5P
-Grjm6gSSrj0RuVFCPYewMYWveVqc/udOXpJPQ/yrOq2lEiZmueIM15jO1FillUAK
-t0SdE3QrwqXrIhWYENiLxQSfHY9g5QYbm8+5eaA9oiM/Qj9r+hwDezCNzmzAv+Yb
-X79nuIQZ1RXve8uQNjFiybwCq0Zfm/4aaJQ0PZCOrfbkHQl/Sog4P75n/TSW9R28
-MHTLOO7VbKvU/PQAtwBbhTIWdjPp2KOZnQUAqhbm84F9b32qhm2tFXTTxKJxqvQU
-fecyuB+81fFOvW8XAjnXDpVCOscAPukmYxHqC9FK/xidstd7LzrZlvvoHpKuE1XI
-2Sf23EgbsCTBheN3nZqk8wwRHQ3ItBTutYJXCb8gWH8vIiPYcMt5bMlL8qkqyPyH
-K9caUPgn6C9D4zq92Fdx/c6mUlv53U3t5fZvie27k5x2IXXwkkwp9y+cAS7+UEae
-ZAwUswdbxcJzbPEHXEUkFDWug/FqTYl6+rPYLWbwNof1K1MCAwEAAaOBqjCBpzAP
-BgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKaz4SsrSbbXc6GqlPUB53NlTKxQ
-MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUprPhKytJttdzoaqU9QHnc2VMrFAw
-RAYDVR0gBD0wOzA5BgRVHSAAMDEwLwYIKwYBBQUHAgEWI2h0dHA6Ly9hY2VkaWNv
-bS5lZGljb21ncm91cC5jb20vZG9jMA0GCSqGSIb3DQEBBQUAA4ICAQDOLAtSUWIm
-fQwng4/F9tqgaHtPkl7qpHMyEVNEskTLnewPeUKzEKbHDZ3Ltvo/Onzqv4hTGzz3
-gvoFNTPhNahXwOf9jU8/kzJPeGYDdwdY6ZXIfj7QeQCM8htRM5u8lOk6e25SLTKe
-I6RF+7YuE7CLGLHdztUdp0J/Vb77W7tH1PwkzQSulgUV1qzOMPPKC8W64iLgpq0i
-5ALudBF/TP94HTXa5gI06xgSYXcGCRZj6hitoocf8seACQl1ThCojz2GuHURwCRi
-ipZ7SkXp7FnFvmuD5uHorLUwHv4FB4D54SMNUI8FmP8sX+g7tq3PgbUhh8oIKiMn
-MCArz+2UW6yyetLHKKGKC5tNSixthT8Jcjxn4tncB7rrZXtaAWPWkFtPF2Y9fwsZ
-o5NjEFIqnxQWWOLcpfShFosOkYuByptZ+thrkQdlVV9SH686+5DdaaVbnG0OLLb6
-zqylfDJKZ0DcMDQj3dcEI2bw/FWAp/tmGYI1Z2JwOV5vx+qQQEQIHriy1tvuWacN
-GHk0vFQYXlPKNFHtRQrmjseCNj6nOGOpMCwXEGCSn1WHElkQwg9naRHMTh5+Spqt
-r0CodaxWkHS4oJyleW/c6RrIaQXpuvoDs3zk4E7Czp3otkYNbn5XOmeUwssfnHdK
-Z05phkOTOPu220+DkdRgfks+KzgHVZhepA==
------END CERTIFICATE-----
-
-================================================================
-CN: ComSign CA
-O: ComSign
-C: IL
------BEGIN CERTIFICATE-----
-MIIDkzCCAnugAwIBAgIQFBOWgxRVjOp7Y+X8NId3RDANBgkqhkiG9w0BAQUFADA0
-MRMwEQYDVQQDEwpDb21TaWduIENBMRAwDgYDVQQKEwdDb21TaWduMQswCQYDVQQG
-EwJJTDAeFw0wNDAzMjQxMTMyMThaFw0yOTAzMTkxNTAyMThaMDQxEzARBgNVBAMT
-CkNvbVNpZ24gQ0ExEDAOBgNVBAoTB0NvbVNpZ24xCzAJBgNVBAYTAklMMIIBIjAN
-BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA8ORUaSvTx49qROR+WCf4C9DklBKK
-8Rs4OC8fMZwG1Cyn3gsqrhqg455qv588x26i+YtkbDqthVVRVKU4VbirgwTyP2Q2
-98CNQ0NqZtH3FyrV7zb6MBBC11PN+fozc0yz6YQgitZBJzXkOPqUm7h65HkfM/sb
-2CEJKHxNGGleZIp6GZPKfuzzcuc3B1hZKKxC+cX/zT/npfo4sdAMx9lSGlPWgcxC
-ejVb7Us6eva1jsz/D3zkYDaHL63woSV9/9JLEYhwVKZBqGdTUkJe5DSe5L6j7Kpi
-Xd3DTKaCQeQzC6zJMw9kglcq/QytNuEMrkvF7zuZ2SOzW120V+x0cAwqTwIDAQAB
-o4GgMIGdMAwGA1UdEwQFMAMBAf8wPQYDVR0fBDYwNDAyoDCgLoYsaHR0cDovL2Zl
-ZGlyLmNvbXNpZ24uY28uaWwvY3JsL0NvbVNpZ25DQS5jcmwwDgYDVR0PAQH/BAQD
-AgGGMB8GA1UdIwQYMBaAFEsBmz5WGmU2dst7l6qSBe4y5ygxMB0GA1UdDgQWBBRL
-AZs+VhplNnbLe5eqkgXuMucoMTANBgkqhkiG9w0BAQUFAAOCAQEA0Nmlfv4pYEWd
-foPPbrxHbvUanlR2QnG0PFg/LUAlQvaBnPGJEMgOqnhPOAlXsDzACPw1jvFIUY0M
-cXS6hMTXcpuEfDhOZAYnKuGntewImbQKDdSFc8gS4TXt8QUxHXOZDOuWyt3T5oWq
-8Ir7dcHyCTxlZWTzTNity4hp8+SDtwy9F1qWF8pb/627HOkthIDYIb6FUtnUdLlp
-hbpN7Sgy6/lhSuTENh4Z3G+EER+V9YMoGKgzkkMn3V0TBEVPh9VGzT2ouvDzuFYk
-Res3x+F2T3I5GN9+dHLHcy056mDmrRGiVod7w2ia/viMcKjfZTL0pECMocJEAw6U
-AGegcQCCSA==
------END CERTIFICATE-----
-
-================================================================
-CN: ComSign Secured CA
-O: ComSign
-C: IL
------BEGIN CERTIFICATE-----
-MIIDqzCCApOgAwIBAgIRAMcoRwmzuGxFjB36JPU2TukwDQYJKoZIhvcNAQEFBQAw
-PDEbMBkGA1UEAxMSQ29tU2lnbiBTZWN1cmVkIENBMRAwDgYDVQQKEwdDb21TaWdu
-MQswCQYDVQQGEwJJTDAeFw0wNDAzMjQxMTM3MjBaFw0yOTAzMTYxNTA0NTZaMDwx
-GzAZBgNVBAMTEkNvbVNpZ24gU2VjdXJlZCBDQTEQMA4GA1UEChMHQ29tU2lnbjEL
-MAkGA1UEBhMCSUwwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDGtWhf
-HZQVw6QIVS3joFd67+l0Kru5fFdJGhFeTymHDEjWaueP1H5XJLkGieQcPOqs49oh
-gHMhCu95mGwfCP+hUH3ymBvJVG8+pSjsIQQPRbsHPaHA+iqYHU4Gk/v1iDurX8sW
-v+bznkqH7Rnqwp9D5PGBpX8QTz7RSmKtUxvLg/8HZaWSLWapW7ha9B20IZFKF3ue
-Mv5WJDmyVIRD9YTC2LxBkMyd1mja6YJQqTtoz7VdApRgFrFD2UNd3V2Hbuq7s8lr
-9gOUCXDeFhF6K+h2j0kQmHe5Y1yLM5d19guMsqtb3nQgJT/j8xH5h2iGNXHDHYwt
-6+UarA9z1YJZQIDTAgMBAAGjgacwgaQwDAYDVR0TBAUwAwEB/zBEBgNVHR8EPTA7
-MDmgN6A1hjNodHRwOi8vZmVkaXIuY29tc2lnbi5jby5pbC9jcmwvQ29tU2lnblNl
-Y3VyZWRDQS5jcmwwDgYDVR0PAQH/BAQDAgGGMB8GA1UdIwQYMBaAFMFL7XC29z58
-ADsAj8c+DkWfHl3sMB0GA1UdDgQWBBTBS+1wtvc+fAA7AI/HPg5Fnx5d7DANBgkq
-hkiG9w0BAQUFAAOCAQEAFs/ukhNQq3sUnjO2QiBq1BW9Cav8cujvR3qQrFHBZE7p
-iL1DRYHjZiM/EoZNGeQFsOY3wo3aBijJD4mkU6l1P7CW+6tMM1X5eCZGbxs2mPtC
-dsGCuY7e+0X5YxtiOzkGynd6qDwJz2w2PQ8KRUtpFhpFfTMDZflScZAmlaxMDPWL
-kz/MdXSFmLr/YnpNH4n+rr2UAJm/EaXc4HnFFgt9AmEd6oX5AhVP51qJThRv4zdL
-hfXBPGHg/QVBspJ/wx2g0K5SZGBrGMYmnNj1ZOQ2GmKfig8+/21OGVZOIJFsnzQz
-OjRXUDpvgV4GxvU+fE6OK85lBi5d0ipTdF7Tbieejw==
------END CERTIFICATE-----
-
-================================================================
-CN: EBG Elektronik Sertifika Hizmet Sağlayıcısı
-O: EBG BiliÅŸim Teknolojileri ve Hizmetleri A.Åž.
-C: TR
------BEGIN CERTIFICATE-----
-MIIF5zCCA8+gAwIBAgIITK9zQhyOdAIwDQYJKoZIhvcNAQEFBQAwgYAxODA2BgNV
-BAMML0VCRyBFbGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sx
-c8SxMTcwNQYDVQQKDC5FQkcgQmlsacWfaW0gVGVrbm9sb2ppbGVyaSB2ZSBIaXpt
-ZXRsZXJpIEEuxZ4uMQswCQYDVQQGEwJUUjAeFw0wNjA4MTcwMDIxMDlaFw0xNjA4
-MTQwMDMxMDlaMIGAMTgwNgYDVQQDDC9FQkcgRWxla3Ryb25payBTZXJ0aWZpa2Eg
-SGl6bWV0IFNhxJ9sYXnEsWPEsXPEsTE3MDUGA1UECgwuRUJHIEJpbGnFn2ltIFRl
-a25vbG9qaWxlcmkgdmUgSGl6bWV0bGVyaSBBLsWeLjELMAkGA1UEBhMCVFIwggIi
-MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDuoIRh0DpqZhAy2DE4f6en5f2h
-4fuXd7hxlugTlkaDT7byX3JWbhNgpQGR4lvFzVcfd2NR/y8927k/qqk153nQ9dAk
-tiHq6yOU/im/+4mRDGSaBUorzAzu8T2bgmmkTPiab+ci2hC6X5L8GCcKqKpE+i4s
-tPtGmggDg3KriORqcsnlZR9uKg+ds+g75AxuetpX/dfreYteIAbTdgtsApWjluTL
-dlHRKJ2hGvxEok3MenaoDT2/F08iiFD9rrbskFBKW5+VQarKD7JK/oCZTqNGFav4
-c0JqwmZ2sQomFd2TkuzbqV9UIlKRcF0T6kjsbgNs2d1s/OsNA/+mgxKb8amTD8Um
-TDGyY5lhcucqZJnSuOl14nypqZoaqsNW2xCaPINStnuWt6yHd6i58mcLlEOzrz5z
-+kI2sSXFCjEmN1ZnuqMLfdb3ic1nobc6HmZP9qBVFCVMLDMNpkGMvQQxahByCp0O
-Lna9XvNRiYuoP1Vzv9s6xiQFlpJIqkuNKgPlV5EQ9GooFW5Hd4RcUXSfGenmHmMW
-OeMRFeNYGkS9y8RsZteEBt8w9DeiQyJ50hBs37vmExH8nYQKE3vwO9D8owrXieqW
-fo1IhR5kX9tUoqzVegJ5a9KK8GfaZXINFHDk6Y54jzJ0fFfy1tb0Nokb+Clsi7n2
-l9GkLqq+CxnCRelwXQIDAJ3Zo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB
-/wQEAwIBBjAdBgNVHQ4EFgQU587GT/wWZ5b6SqMHwQSny2re2kcwHwYDVR0jBBgw
-FoAU587GT/wWZ5b6SqMHwQSny2re2kcwDQYJKoZIhvcNAQEFBQADggIBAJuYml2+
-8ygjdsZs93/mQJ7ANtyVDR2tFcU22NU57/IeIl6zgrRdu0waypIN30ckHrMk2pGI
-6YNw3ZPX6bqz3xZaPt7gyPvT/Wwp+BVGoGgmzJNSroIBk5DKd8pNSe/iWtkqvTDO
-TLKBtjDOWU/aWR1qeqRFsIImgYZ29fUQALjuswnoT4cCB64kXPBfrAowzIpAoHME
-wfuJJPaaHFy3PApnNgUIMbOv2AFoKuB4j3TeuFGkjGwgPaL7s9QJ/XvCgKqTbCmY
-Iai7FvOpEl90tYeY8pUm3zTvilORiF0alKM/fCL414i6poyWqD1SNGKfAB5UVUJn
-xk1Gj7sURT0KlhaOEKGXmdXTMIXM3rRyt7yKPBgpaP3ccQfuJDlq+u2lrDgv+R4Q
-DgZxGhBM/nV+/x5XOULK1+EVoVZVWRvRo68R2E7DpSvvkL/A7IITW43WciyTTo9q
-Kd+FPNMN4KIYEsxVL0e3p5sC/kH2iExt2qkBR4NkJ2IQgtYSe14DHzSpyZH+r11t
-hie3I6p1GMog57AP14kOpmciY/SDQSsGS7tY1dHXt7kQY9iJSrSq3RZj9W6+YKH4
-7ejWkE8axsWgKdOnIaj1Wjz3x0miIZpKlVIglnKaZsv30oZDfCK+lvm9AahH3eU7
-QPl1K5srRmSGjR70j/sHd9DqSaIcjVIUpgqT
------END CERTIFICATE-----
-
-================================================================
-CN: TÜRKTRUST Elektronik Sertifika Hizmet Sağlayıcısı
-C: TR
-L: ANKARA
-O: (c) 2005 TÜRKTRUST Bilgi İletişim ve Bilişim Güvenliği Hizmetleri A.Ş.
------BEGIN CERTIFICATE-----
-MIID+zCCAuOgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBtzE/MD0GA1UEAww2VMOc
-UktUUlVTVCBFbGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sx
-c8SxMQswCQYDVQQGDAJUUjEPMA0GA1UEBwwGQU5LQVJBMVYwVAYDVQQKDE0oYykg
-MjAwNSBUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmlsacWfaW0gR8O8
-dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLjAeFw0wNTA1MTMxMDI3MTdaFw0xNTAz
-MjIxMDI3MTdaMIG3MT8wPQYDVQQDDDZUw5xSS1RSVVNUIEVsZWt0cm9uaWsgU2Vy
-dGlmaWthIEhpem1ldCBTYcSfbGF5xLFjxLFzxLExCzAJBgNVBAYMAlRSMQ8wDQYD
-VQQHDAZBTktBUkExVjBUBgNVBAoMTShjKSAyMDA1IFTDnFJLVFJVU1QgQmlsZ2kg
-xLBsZXRpxZ9pbSB2ZSBCaWxpxZ9pbSBHw7x2ZW5sacSfaSBIaXptZXRsZXJpIEEu
-xZ4uMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAylIF1mMD2Bxf3dJ7
-XfIMYGFbazt0K3gNfUW9InTojAPBxhEqPZW8qZSwu5GXyGl8hMW0kWxsE2qkVa2k
-heiVfrMArwDCBRj1cJ02i67L5BuBf5OI+2pVu32Fks66WJ/bMsW9Xe8iSi9BB35J
-YbOG7E6mQW6EvAPs9TscyB/C7qju6hJKjRTP8wrgUDn5CDX4EVmt5yLqS8oUBt5C
-urKZ8y1UiBAG6uEaPj1nH/vO+3yC6BFdSsG5FOpU2WabfIl9BJpiyelSPJ6c79L1
-JuTm5Rh8i27fbMx4W09ysstcP4wFjdFMjK2Sx+F4f2VsSQZQLJ4ywtdKxnWKWU51
-b0dewQIDAQABoxAwDjAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQAV
-9VX/N5aAWSGk/KEVTCD21F/aAyT8z5Aa9CEKmu46sWrv7/hg0Uw2ZkUd82YCdAR7
-kjCo3gp2D++Vbr3JN+YaDayJSFvMgzbC9UZcWYJWtNX+I7TYVBxEq8Sn5RTOPEFh
-fEPmzcSBCYsk+1Ql1haolgxnB2+zUEfjHCQo3SqYpGH+2+oSN7wBGjSFvW5P55Fy
-B0SFHljKVETd96y5y4khctuPwGkplyqjrhgjlxxBKot8KsF8kOipKMDTkcatKIdA
-aLX/7KfS0zgYnNN9aV3wxqUeJBujR/xpB2jn5Jq07Q+hh4cCzofSSE7hvP/L8XKS
-RGQDJereW26fyfJOrN3H
------END CERTIFICATE-----
-
-================================================================
-CN: TÜRKTRUST Elektronik Sertifika Hizmet Sağlayıcısı
-C: TR
-L: Ankara
-O: TÜRKTRUST Bilgi İletişim ve Bilişim Güvenliği Hizmetleri A.Ş. (c) Aralık 2007
------BEGIN CERTIFICATE-----
-MIIEPTCCAyWgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBvzE/MD0GA1UEAww2VMOc
-UktUUlVTVCBFbGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sx
-c8SxMQswCQYDVQQGEwJUUjEPMA0GA1UEBwwGQW5rYXJhMV4wXAYDVQQKDFVUw5xS
-S1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnEn2kg
-SGl6bWV0bGVyaSBBLsWeLiAoYykgQXJhbMSxayAyMDA3MB4XDTA3MTIyNTE4Mzcx
-OVoXDTE3MTIyMjE4MzcxOVowgb8xPzA9BgNVBAMMNlTDnFJLVFJVU1QgRWxla3Ry
-b25payBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsTELMAkGA1UEBhMC
-VFIxDzANBgNVBAcMBkFua2FyYTFeMFwGA1UECgxVVMOcUktUUlVTVCBCaWxnaSDE
-sGxldGnFn2ltIHZlIEJpbGnFn2ltIEfDvHZlbmxpxJ9pIEhpem1ldGxlcmkgQS7F
-ni4gKGMpIEFyYWzEsWsgMjAwNzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
-ggEBAKu3PgqMyKVYFeaK7yc9SrToJdPNM8Ig3BnuiD9NYvDdE3ePYakqtdTyuTFY
-KTsvP2qcb3N2Je40IIDu6rfwxArNK4aUyeNgsURSsloptJGXg9i3phQvKUmi8wUG
-+7RP2qFsmmaf8EMJyupyj+sA1zU511YXRxcw9L6/P8JorzZAwan0qafoEGsIiveG
-HtyaKhUG9qPw9ODHFNRRf8+0222vR5YXm3dx2KdxnSQM9pQ/hTEST7ruToK4uT6P
-IzdezKKqdfcYbwnTrqdUKDT74eA7YH2gvnmJhsifLfkKS8RQouf9eRbHegsYz85M
-733WB2+Y8a+xwXrXgTW4qhe04MsCAwEAAaNCMEAwHQYDVR0OBBYEFCnFkKslrxHk
-Yb+j/4hhkeYO/pyBMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0G
-CSqGSIb3DQEBBQUAA4IBAQAQDdr4Ouwo0RSVgrESLFF6QSU2TJ/sPx+EnWVUXKgW
-AkD6bho3hO9ynYYKVZ1WKKxmLNA6VpM0ByWtCLCPyA8JWcqdmBzlVPi5RX9ql2+I
-aE1KBiY3iAIOtsbWcpnOa3faYjGkVh+uX4132l32iPwa2Z61gfAyuOOI0JzzaqC5
-mxRZNTZPz/OOXl0XrRWV2N2y1RVuAE6zS89mlOTgzbUF2mNXi+WzqtvALhyQRNsa
-XRik7r4EW5nVcV9VZWRi1aKbBFmGyGJ353yCRWo9F7/snXUMrqNvWtMvmDb08PUZ
-qxFdyKbjKlhqQgnDvZImZjINXQhVdP+MmNAKpoRq0Tl9
------END CERTIFICATE-----
-
-================================================================
-CN: TÜRKTRUST Elektronik Sertifika Hizmet Sağlayıcısı
-C: TR
-L: Ankara
-O: TÜRKTRUST Bilgi İletişim ve Bilişim Güvenliği Hizmetleri A.Ş. (c) Kasım 2005
------BEGIN CERTIFICATE-----
-MIIEPDCCAySgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBvjE/MD0GA1UEAww2VMOc
-UktUUlVTVCBFbGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sx
-c8SxMQswCQYDVQQGEwJUUjEPMA0GA1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xS
-S1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnEn2kg
-SGl6bWV0bGVyaSBBLsWeLiAoYykgS2FzxLFtIDIwMDUwHhcNMDUxMTA3MTAwNzU3
-WhcNMTUwOTE2MTAwNzU3WjCBvjE/MD0GA1UEAww2VMOcUktUUlVTVCBFbGVrdHJv
-bmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJU
-UjEPMA0GA1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xSS1RSVVNUIEJpbGdpIMSw
-bGV0acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWe
-LiAoYykgS2FzxLFtIDIwMDUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
-AQCpNn7DkUNMwxmYCMjHWHtPFoylzkkBH3MOrHUTpvqeLCDe2JAOCtFp0if7qnef
-J1Il4std2NiDUBd9irWCPwSOtNXwSadktx4uXyCcUHVPr+G1QRT0mJKIx+XlZEdh
-R3n9wFHxwZnn3M5q+6+1ATDcRhzviuyV79z/rxAc653YsKpqhRgNF8k+v/Gb0AmJ
-Qv2gQrSdiVFVKc8bcLyEVK3BEx+Y9C52YItdP5qtygy/p1Zbj3e41Z55SZI/4PGX
-JHpsmxcPbe9TmJEr5A++WXkHeLuXlfSfadRYhwqp48y2WBmfJiGxxFmNskF1wK1p
-zpwACPI2/z7woQ8arBT9pmAPAgMBAAGjQzBBMB0GA1UdDgQWBBTZN7NOBf3Zz58S
-Fq62iS/rJTqIHDAPBgNVHQ8BAf8EBQMDBwYAMA8GA1UdEwEB/wQFMAMBAf8wDQYJ
-KoZIhvcNAQEFBQADggEBAHJglrfJ3NgpXiOFX7KzLXb7iNcX/nttRbj2hWyfIvwq
-ECLsqrkw9qtY1jkQMZkpAL2JZkH7dN6RwRgLn7Vhy506vvWolKMiVW4XSf/SKfE4
-Jl3vpao6+XF75tpYHdN0wgH6PmlYX63LaL4ULptswLbcoCb6dxriJNoaN+BnrdFz
-gw2lGh1uEpJ+hGIAF728JRhX8tepb1mIvDS3LoV4nZbcFMMsilKbloxSZj2GFotH
-uFEJjOp9zYhys2AzsfAKRO8P9Qk3iCQOLGsgOqL6EfJANZxEaGM7rDNvY7wsu/LS
-y3Z9fYjYHcgFHW68lKlmjHdxx/qR+i9Rnuk5UrbnBEI=
------END CERTIFICATE-----
-
-================================================================
-L: ValiCert Validation Network
-O: ValiCert, Inc.
-OU: ValiCert Class 1 Policy Validation Authority
-CN: http://www.valicert.com/
-emailAddress: info@valicert.com
------BEGIN CERTIFICATE-----
-MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0
-IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz
-BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y
-aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG
-9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNTIyMjM0OFoXDTE5MDYy
-NTIyMjM0OFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y
-azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
-YXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw
-Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl
-cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDYWYJ6ibiWuqYvaG9Y
-LqdUHAZu9OqNSLwxlBfw8068srg1knaw0KWlAdcAAxIiGQj4/xEjm84H9b9pGib+
-TunRf50sQB1ZaG6m+FiwnRqP0z/x3BkGgagO4DrdyFNFCQbmD3DD+kCmDuJWBQ8Y
-TfwggtFzVXSNdnKgHZ0dwN0/cQIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFBoPUn0
-LBwGlN+VYH+Wexf+T3GtZMjdd9LvWVXoP+iOBSoh8gfStadS/pyxtuJbdxdA6nLW
-I8sogTLDAHkY7FkXicnGah5xyf23dKUlRWnFSKsZ4UWKJWsZ7uW7EvV/96aNUcPw
-nXS3qT6gpf+2SQMT2iLM7XGCK5nPOrf1LXLI
------END CERTIFICATE-----
-
-================================================================
-L: ValiCert Validation Network
-O: ValiCert, Inc.
-OU: ValiCert Class 2 Policy Validation Authority
-CN: http://www.valicert.com/
-emailAddress: info@valicert.com
------BEGIN CERTIFICATE-----
-MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0
-IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz
-BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y
-aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG
-9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAwMTk1NFoXDTE5MDYy
-NjAwMTk1NFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y
-azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
-YXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw
-Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl
-cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDOOnHK5avIWZJV16vY
-dA757tn2VUdZZUcOBVXc65g2PFxTXdMwzzjsvUGJ7SVCCSRrCl6zfN1SLUzm1NZ9
-WlmpZdRJEy0kTRxQb7XBhVQ7/nHk01xC+YDgkRoKWzk2Z/M/VXwbP7RfZHM047QS
-v4dk+NoS/zcnwbNDu+97bi5p9wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBADt/UG9v
-UJSZSWI4OB9L+KXIPqeCgfYrx+jFzug6EILLGACOTb2oWH+heQC1u+mNr0HZDzTu
-IYEZoDJJKPTEjlbVUjP9UNV+mWwD5MlM/Mtsq2azSiGM5bUMMj4QssxsodyamEwC
-W/POuZ6lcg5Ktz885hZo+L7tdEy8W9ViH0Pd
------END CERTIFICATE-----
-
-================================================================
-L: ValiCert Validation Network
-O: ValiCert, Inc.
-OU: ValiCert Class 3 Policy Validation Authority
-CN: http://www.valicert.com/
-emailAddress: info@valicert.com
------BEGIN CERTIFICATE-----
-MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0
-IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz
-BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y
-aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG
-9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAwMjIzM1oXDTE5MDYy
-NjAwMjIzM1owgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y
-azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
-YXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw
-Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl
-cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDjmFGWHOjVsQaBalfD
-cnWTq8+epvzzFlLWLU2fNUSoLgRNB0mKOCn1dzfnt6td3zZxFJmP3MKS8edgkpfs
-2Ejcv8ECIMYkpChMMFp2bbFc893enhBxoYjHW5tBbcqwuI4V7q0zK89HBFx1cQqY
-JJgpp0lZpd34t0NiYfPT4tBVPwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFa7AliE
-Zwgs3x/be0kz9dNnnfS0ChCzycUs4pJqcXgn8nCDQtM+z6lU9PHYkhaM0QTLS6vJ
-n0WuPIqpsHEzXcjFV9+vqDWzf4mH6eglkrh/hXqu1rweN1gqZ8mRzyqBPu3GOd/A
-PhmcGcwTTYJBtYze4D1gCCAPRX5ron+jjBXu
------END CERTIFICATE-----
-
-================================================================
-O: Cybertrust, Inc
-CN: Cybertrust Global Root
------BEGIN CERTIFICATE-----
-MIIDoTCCAomgAwIBAgILBAAAAAABD4WqLUgwDQYJKoZIhvcNAQEFBQAwOzEYMBYG
-A1UEChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2Jh
-bCBSb290MB4XDTA2MTIxNTA4MDAwMFoXDTIxMTIxNTA4MDAwMFowOzEYMBYGA1UE
-ChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2JhbCBS
-b290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA+Mi8vRRQZhP/8NN5
-7CPytxrHjoXxEnOmGaoQ25yiZXRadz5RfVb23CO21O1fWLE3TdVJDm71aofW0ozS
-J8bi/zafmGWgE07GKmSb1ZASzxQG9Dvj1Ci+6A74q05IlG2OlTEQXO2iLb3VOm2y
-HLtgwEZLAfVJrn5GitB0jaEMAs7u/OePuGtm839EAL9mJRQr3RAwHQeWP032a7iP
-t3sMpTjr3kfb1V05/Iin89cqdPHoWqI7n1C6poxFNcJQZZXcY4Lv3b93TZxiyWNz
-FtApD0mpSPCzqrdsxacwOUBdrsTiXSZT8M4cIwhhqJQZugRiQOwfOHB3EgZxpzAY
-XSUnpQIDAQABo4GlMIGiMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/
-MB0GA1UdDgQWBBS2CHsNesysIEyGVjJez6tuhS1wVzA/BgNVHR8EODA2MDSgMqAw
-hi5odHRwOi8vd3d3Mi5wdWJsaWMtdHJ1c3QuY29tL2NybC9jdC9jdHJvb3QuY3Js
-MB8GA1UdIwQYMBaAFLYIew16zKwgTIZWMl7Pq26FLXBXMA0GCSqGSIb3DQEBBQUA
-A4IBAQBW7wojoFROlZfJ+InaRcHUowAl9B8Tq7ejhVhpwjCt2BWKLePJzYFa+HMj
-Wqd8BfP9IjsO0QbE2zZMcwSO5bAi5MXzLqXZI+O4Tkogp24CJJ8iYGd7ix1yCcUx
-XOl5n4BHPa2hCwcUPUf/A2kaDAtE52Mlp3+yybh2hO0j9n0Hq0V+09+zv+mKts2o
-omcrUtW3ZfA5TGOgkXmTUg9U3YO7n9GPp1Nzw8v/MOx8BLjYRB+TX3EJIrduPuoc
-A06dGiBh+4E37F78CkWr1+cXVdCg6mCbpvbjjFspwgZgFJ0tl0ypkxWdYcQBX0jW
-WL1WMRJOEcgh4LMRkWXbtKaIOM5V
------END CERTIFICATE-----
-
-================================================================
-O: Digital Signature Trust Co.
-CN: DST Root CA X3
------BEGIN CERTIFICATE-----
-MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/
-MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT
-DkRTVCBSb290IENBIFgzMB4XDTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVow
-PzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMRcwFQYDVQQD
-Ew5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
-AN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmTrE4O
-rz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEq
-OLl5CjH9UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9b
-xiqKqy69cK3FCxolkHRyxXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw
-7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40dutolucbY38EVAjqr2m7xPi71XAicPNaD
-aeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNV
-HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQMA0GCSqG
-SIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69
-ikugdB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXr
-AvHRAosZy5Q6XkjEGB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZz
-R8srzJmwN0jP41ZL9c8PDHIyh8bwRLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5
-JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubSfZGL+T0yjWW06XyxV3bqxbYo
-Ob8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ
------END CERTIFICATE-----
-
-================================================================
-O: Entrust.net
-OU: www.entrust.net/CPS_2048 incorp. by ref. (limits liab.)
-OU: (c) 1999 Entrust.net Limited
-CN: Entrust.net Certification Authority (2048)
------BEGIN CERTIFICATE-----
-MIIEKjCCAxKgAwIBAgIEOGPe+DANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChML
-RW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBp
-bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5
-IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENlcnRp
-ZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQxNzUwNTFaFw0yOTA3
-MjQxNDE1MTJaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3
-LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxp
-YWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEG
-A1UEAxMqRW50cnVzdC5uZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgp
-MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArU1LqRKGsuqjIAcVFmQq
-K0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOLGp18EzoOH1u3Hs/lJBQe
-sYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSrhRSGlVuX
-MlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVT
-XTzWnLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/
-HoZdenoVve8AjhUiVBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH
-4QIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNV
-HQ4EFgQUVeSB0RGAvtiJuQijMfmhJAkWuXAwDQYJKoZIhvcNAQEFBQADggEBADub
-j1abMOdTmXx6eadNl9cZlZD7Bh/KM3xGY4+WZiT6QBshJ8rmcnPyT/4xmf3IDExo
-U8aAghOY+rat2l098c5u9hURlIIM7j+VrxGrD9cv3h8Dj1csHsm7mhpElesYT6Yf
-zX1XEC+bBAlahLVu2B064dae0Wx5XnkcFMXj0EyTO2U87d89vqbllRrDtRnDvV5b
-u/8j72gZyxKTJ1wDLW8w0B62GqzeWvfRqqgnpv55gcR5mTNXuhKwqeBCbJPKVt7+
-bYQLCIt+jerXmCHG8+c8eS9enNFMFY3h7CI3zJpDC5fcgJCNs2ebb0gIFVbPv/Er
-fF6adulZkMV8gzURZVE=
------END CERTIFICATE-----
-
-================================================================
-O: RSA Security Inc
-OU: RSA Security 2048 V3
------BEGIN CERTIFICATE-----
-MIIDYTCCAkmgAwIBAgIQCgEBAQAAAnwAAAAKAAAAAjANBgkqhkiG9w0BAQUFADA6
-MRkwFwYDVQQKExBSU0EgU2VjdXJpdHkgSW5jMR0wGwYDVQQLExRSU0EgU2VjdXJp
-dHkgMjA0OCBWMzAeFw0wMTAyMjIyMDM5MjNaFw0yNjAyMjIyMDM5MjNaMDoxGTAX
-BgNVBAoTEFJTQSBTZWN1cml0eSBJbmMxHTAbBgNVBAsTFFJTQSBTZWN1cml0eSAy
-MDQ4IFYzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAt49VcdKA3Xtp
-eafwGFAyPGJn9gqVB93mG/Oe2dJBVGutn3y+Gc37RqtBaB4Y6lXIL5F4iSj7Jylg
-/9+PjDvJSZu1pJTOAeo+tWN7fyb9Gd3AIb2E0S1PRsNO3Ng3OTsor8udGuorryGl
-wSMiuLgbWhOHV4PR8CDn6E8jQrAApX2J6elhc5SYcSa8LWrg903w8bYqODGBDSnh
-AMFRD0xS+ARaqn1y07iHKrtjEAMqs6FPDVpeRrc9DvV07Jmf+T0kgYim3WBU6JU2
-PcYJk5qjEoAAVZkZR73QpXzDuvsf9/UP+Ky5tfQ3mBMY3oVbtwyCO4dvlTlYMNpu
-AWgXIszACwIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB
-BjAfBgNVHSMEGDAWgBQHw1EwpKrpRa41JPr/JCwz0LGdjDAdBgNVHQ4EFgQUB8NR
-MKSq6UWuNST6/yQsM9CxnYwwDQYJKoZIhvcNAQEFBQADggEBAF8+hnZuuDU8TjYc
-HnmYv/3VEhF5Ug7uMYm83X/50cYVIeiKAVQNOvtUudZj1LGqlk2iQk3UUx+LEN5/
-Zb5gEydxiKRz44Rj0aRV4VCT5hsOedBnvEbIvz8XDZXmxpBp3ue0L96VfdASPz0+
-f00/FGj1EVDVwfSQpQgdMWD/YIwjVAqv/qFuxdF6Kmh4zx6CCiC0H63lhbJqaHVO
-rSU3lIW+vaHU6rcMSzyd6BIA8F+sDeGscGNz9395nzIlQnQFgCi/vcEkllgVsRch
-6YlL2weIZ/QVrXA+L02FO8K32/6YaCOJ4XQP3vTFhGMpG8zLB8kApKnXwiJPZ9d3
-7CAFYd4=
------END CERTIFICATE-----
-
-================================================================
-OU: GlobalSign Root CA - R2
-O: GlobalSign
-CN: GlobalSign
------BEGIN CERTIFICATE-----
-MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4G
-A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNp
-Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1
-MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMjETMBEG
-A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI
-hvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6ErPL
-v4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8
-eoLrvozps6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklq
-tTleiDTsvHgMCJiEbKjNS7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzd
-C9XZzPnqJworc5HGnRusyMvo4KD0L5CLTfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pa
-zq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6CygPCm48CAwEAAaOBnDCB
-mTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUm+IH
-V2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5n
-bG9iYWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG
-3lm0mi3f3BmGLjANBgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4Gs
-J0/WwbgcQ3izDJr86iw8bmEbTUsp9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO
-291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu01yiPqFbQfXf5WRDLenVOavS
-ot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG79G+dwfCMNYxd
-AfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7
-TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg==
------END CERTIFICATE-----
-
-================================================================
-OU: GlobalSign Root CA - R3
-O: GlobalSign
-CN: GlobalSign
------BEGIN CERTIFICATE-----
-MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4G
-A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNp
-Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4
-MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMzETMBEG
-A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI
-hvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWtiHL8
-RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsT
-gHeMCOFJ0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmm
-KPZpO/bLyCiR5Z2KYVc3rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zd
-QQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjlOCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZ
-XriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2xmmFghcCAwEAAaNCMEAw
-DgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFI/wS3+o
-LkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZU
-RUm7lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMp
-jjM5RcOO5LlXbKr8EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK
-6fBdRoyV3XpYKBovHd7NADdBj+1EbddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQX
-mcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18YIvDQVETI53O9zJrlAGomecs
-Mx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7rkpeDMdmztcpH
-WD9f
------END CERTIFICATE-----
-
-================================================================
-emailAddress: contacto@procert.net.ve
-L: Chacao
-ST: Miranda
-OU: Proveedor de Certificados PROCERT
-O: Sistema Nacional de Certificacion Electronica
-C: VE
-CN: PSCProcert
------BEGIN CERTIFICATE-----
-MIIJhjCCB26gAwIBAgIBCzANBgkqhkiG9w0BAQsFADCCAR4xPjA8BgNVBAMTNUF1
-dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIFJhaXogZGVsIEVzdGFkbyBWZW5lem9s
-YW5vMQswCQYDVQQGEwJWRTEQMA4GA1UEBxMHQ2FyYWNhczEZMBcGA1UECBMQRGlz
-dHJpdG8gQ2FwaXRhbDE2MDQGA1UEChMtU2lzdGVtYSBOYWNpb25hbCBkZSBDZXJ0
-aWZpY2FjaW9uIEVsZWN0cm9uaWNhMUMwQQYDVQQLEzpTdXBlcmludGVuZGVuY2lh
-IGRlIFNlcnZpY2lvcyBkZSBDZXJ0aWZpY2FjaW9uIEVsZWN0cm9uaWNhMSUwIwYJ
-KoZIhvcNAQkBFhZhY3JhaXpAc3VzY2VydGUuZ29iLnZlMB4XDTEwMTIyODE2NTEw
-MFoXDTIwMTIyNTIzNTk1OVowgdExJjAkBgkqhkiG9w0BCQEWF2NvbnRhY3RvQHBy
-b2NlcnQubmV0LnZlMQ8wDQYDVQQHEwZDaGFjYW8xEDAOBgNVBAgTB01pcmFuZGEx
-KjAoBgNVBAsTIVByb3ZlZWRvciBkZSBDZXJ0aWZpY2Fkb3MgUFJPQ0VSVDE2MDQG
-A1UEChMtU2lzdGVtYSBOYWNpb25hbCBkZSBDZXJ0aWZpY2FjaW9uIEVsZWN0cm9u
-aWNhMQswCQYDVQQGEwJWRTETMBEGA1UEAxMKUFNDUHJvY2VydDCCAiIwDQYJKoZI
-hvcNAQEBBQADggIPADCCAgoCggIBANW39KOUM6FGqVVhSQ2oh3NekS1wwQYalNo9
-7BVCwfWMrmoX8Yqt/ICV6oNEolt6Vc5Pp6XVurgfoCfAUFM+jbnADrgV3NZs+J74
-BCXfgI8Qhd19L3uA3VcAZCP4bsm+lU/hdezgfl6VzbHvvnpC2Mks0+saGiKLt38G
-ieU89RLAu9MLmV+QfI4tL3czkkohRqipCKzx9hEC2ZUWno0vluYC3XXCFCpa1sl9
-JcLB/KpnheLsvtF8PPqv1W7/U0HU9TI4seJfxPmOEO8GqQKJ/+MMbpfg353bIdD0
-PghpbNjU5Db4g7ayNo+c7zo3Fn2/omnXO1ty0K+qP1xmk6wKImG20qCZyFSTXai2
-0b1dCl53lKItwIKOvMoDKjSuc/HUtQy9vmebVOvh+qBa7Dh+PsHMosdEMXXqP+UH
-0quhJZb25uSgXTcYOWEAM11G1ADEtMo88aKjPvM6/2kwLkDd9p+cJsmWN63nOaK/
-6mnbVSKVUyqUtd+tFjiBdWbjxywbk5yqjKPK2Ww8F22c3HxT4CAnQzb5EuE8XL1m
-v6JpIzi4mWCZDlZTOpx+FIywBm/xhnaQr/2v/pDGj59/i5IjnOcVdo/Vi5QTcmn7
-K2FjiO/mpF7moxdqWEfLcU8UC17IAggmosvpr2uKGcfLFFb14dq12fy/czja+eev
-bqQ34gcnAgMBAAGjggMXMIIDEzASBgNVHRMBAf8ECDAGAQH/AgEBMDcGA1UdEgQw
-MC6CD3N1c2NlcnRlLmdvYi52ZaAbBgVghl4CAqASDBBSSUYtRy0yMDAwNDAzNi0w
-MB0GA1UdDgQWBBRBDxk4qpl/Qguk1yeYVKIXTC1RVDCCAVAGA1UdIwSCAUcwggFD
-gBStuyIdxuDSAaj9dlBSk+2YwU2u06GCASakggEiMIIBHjE+MDwGA1UEAxM1QXV0
-b3JpZGFkIGRlIENlcnRpZmljYWNpb24gUmFpeiBkZWwgRXN0YWRvIFZlbmV6b2xh
-bm8xCzAJBgNVBAYTAlZFMRAwDgYDVQQHEwdDYXJhY2FzMRkwFwYDVQQIExBEaXN0
-cml0byBDYXBpdGFsMTYwNAYDVQQKEy1TaXN0ZW1hIE5hY2lvbmFsIGRlIENlcnRp
-ZmljYWNpb24gRWxlY3Ryb25pY2ExQzBBBgNVBAsTOlN1cGVyaW50ZW5kZW5jaWEg
-ZGUgU2VydmljaW9zIGRlIENlcnRpZmljYWNpb24gRWxlY3Ryb25pY2ExJTAjBgkq
-hkiG9w0BCQEWFmFjcmFpekBzdXNjZXJ0ZS5nb2IudmWCAQowDgYDVR0PAQH/BAQD
-AgEGME0GA1UdEQRGMESCDnByb2NlcnQubmV0LnZloBUGBWCGXgIBoAwMClBTQy0w
-MDAwMDKgGwYFYIZeAgKgEgwQUklGLUotMzE2MzUzNzMtNzB2BgNVHR8EbzBtMEag
-RKBChkBodHRwOi8vd3d3LnN1c2NlcnRlLmdvYi52ZS9sY3IvQ0VSVElGSUNBRE8t
-UkFJWi1TSEEzODRDUkxERVIuY3JsMCOgIaAfhh1sZGFwOi8vYWNyYWl6LnN1c2Nl
-cnRlLmdvYi52ZTA3BggrBgEFBQcBAQQrMCkwJwYIKwYBBQUHMAGGG2h0dHA6Ly9v
-Y3NwLnN1c2NlcnRlLmdvYi52ZTBBBgNVHSAEOjA4MDYGBmCGXgMBAjAsMCoGCCsG
-AQUFBwIBFh5odHRwOi8vd3d3LnN1c2NlcnRlLmdvYi52ZS9kcGMwDQYJKoZIhvcN
-AQELBQADggIBACtZ6yKZu4SqT96QxtGGcSOeSwORR3C7wJJg7ODU523G0+1ng3dS
-1fLld6c2suNUvtm7CpsR72H0xpkzmfWvADmNg7+mvTV+LFwxNG9s2/NkAZiqlCxB
-3RWGymspThbASfzXg0gTB1GEMVKIu4YXx2sviiCtxQuPcD4quxtxj7mkoP3Yldmv
-Wb8lK5jpY5MvYB7Eqvh39YtsL+1+LrVPQA3uvFd359m21D+VJzog1eWuq2w1n8Gh
-HVnchIHuTQfiSLaeS5UtQbHh6N5+LwUeaO6/u5BlOsju6rEYNxxik6SgMexxbJHm
-pHmJWhSnFFAFTKQAVzAswbVhltw+HoSvOULP5dAssSS830DD7X9jSr3hTxJkhpXz
-sOfIt+FTvZLm8wyWuevo5pLtp4EJFAv8lXrPj9Y0TzYS3F7RNHXGRoAvlQSMx4bE
-qCaJqD8Zm4G7UaRKhqsLEQ+xrmNTbSjq3TNWOByyrYDT13K9mmyZY+gAu0F2Bbdb
-mRiKw7gSXFbPVgx96OLP7bx0R/vu0xdOIk9W/1DzLuY5poLWccret9W6aAjtmcz9
-opLLabid+Qqkpj5PkygqYWwHJgD/ll9ohri4zspV4KuxPX+Y1zMOWj3YeMLEYC/H
-YvBhkdI4sPaeVdtAgAUSM84dkpvRabP/v/GSCmE1P93+hvS84Bpxs2Km
------END CERTIFICATE-----
-
-================================================================
-emailAddress: pki@sk.ee
-C: EE
-O: AS Sertifitseerimiskeskus
-CN: Juur-SK
------BEGIN CERTIFICATE-----
-MIIE5jCCA86gAwIBAgIEO45L/DANBgkqhkiG9w0BAQUFADBdMRgwFgYJKoZIhvcN
-AQkBFglwa2lAc2suZWUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKExlBUyBTZXJ0aWZp
-dHNlZXJpbWlza2Vza3VzMRAwDgYDVQQDEwdKdXVyLVNLMB4XDTAxMDgzMDE0MjMw
-MVoXDTE2MDgyNjE0MjMwMVowXTEYMBYGCSqGSIb3DQEJARYJcGtpQHNrLmVlMQsw
-CQYDVQQGEwJFRTEiMCAGA1UEChMZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1czEQ
-MA4GA1UEAxMHSnV1ci1TSzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
-AIFxNj4zB9bjMI0TfncyRsvPGbJgMUaXhvSYRqTCZUXP00B841oiqBB4M8yIsdOB
-SvZiF3tfTQou0M+LI+5PAk676w7KvRhj6IAcjeEcjT3g/1tf6mTll+g/mX8MCgkz
-ABpTpyHhOEvWgxutr2TC+Rx6jGZITWYfGAriPrsfB2WThbkasLnE+w0R9vXW+RvH
-LCu3GFH+4Hv2qEivbDtPL+/40UceJlfwUR0zlv/vWT3aTdEVNMfqPxZIe5EcgEMP
-PbgFPtGzlc3Yyg/CQ2fbt5PgIoIuvvVoKIO5wTtpeyDaTpxt4brNj3pssAki14sL
-2xzVWiZbDcDq5WDQn/413z8CAwEAAaOCAawwggGoMA8GA1UdEwEB/wQFMAMBAf8w
-ggEWBgNVHSAEggENMIIBCTCCAQUGCisGAQQBzh8BAQEwgfYwgdAGCCsGAQUFBwIC
-MIHDHoHAAFMAZQBlACAAcwBlAHIAdABpAGYAaQBrAGEAYQB0ACAAbwBuACAAdgDk
-AGwAagBhAHMAdABhAHQAdQBkACAAQQBTAC0AaQBzACAAUwBlAHIAdABpAGYAaQB0
-AHMAZQBlAHIAaQBtAGkAcwBrAGUAcwBrAHUAcwAgAGEAbABhAG0ALQBTAEsAIABz
-AGUAcgB0AGkAZgBpAGsAYQBhAHQAaQBkAGUAIABrAGkAbgBuAGkAdABhAG0AaQBz
-AGUAawBzMCEGCCsGAQUFBwIBFhVodHRwOi8vd3d3LnNrLmVlL2Nwcy8wKwYDVR0f
-BCQwIjAgoB6gHIYaaHR0cDovL3d3dy5zay5lZS9qdXVyL2NybC8wHQYDVR0OBBYE
-FASqekej5ImvGs8KQKcYP2/v6X2+MB8GA1UdIwQYMBaAFASqekej5ImvGs8KQKcY
-P2/v6X2+MA4GA1UdDwEB/wQEAwIB5jANBgkqhkiG9w0BAQUFAAOCAQEAe8EYlFOi
-CfP+JmeaUOTDBS8rNXiRTHyoERF5TElZrMj3hWVcRrs7EKACr81Ptcw2Kuxd/u+g
-kcm2k298gFTsxwhwDY77guwqYHhpNjbRxZyLabVAyJRld/JXIWY7zoVAtjNjGr95
-HvxcHdMdkxuLDF2FvZkwMhgJkVLpfKG6/2SSmuz+Ne6ML678IIbsSt4beDI3poHS
-na9aEhbKmVv8b20OxaAehsmR0FyYgl9jDIpaq9iVpszLita/ZEuOyoqysOkhMp6q
-qIWYNIE5ITuoOlIyPfZrN4YGWhWY3PARZv40ILcD9EEQfTmEeZZyY7aWAuVrua0Z
-TbvGRNs2yyqcjg==
------END CERTIFICATE-----
diff --git a/resources/celerity/map.php b/resources/celerity/map.php
--- a/resources/celerity/map.php
+++ b/resources/celerity/map.php
@@ -91,9 +91,6 @@
'rsrc/css/application/pholio/pholio-edit.css' => '4df55b3b',
'rsrc/css/application/pholio/pholio-inline-comments.css' => '722b48c2',
'rsrc/css/application/pholio/pholio.css' => '88ef5ef1',
- 'rsrc/css/application/phortune/phortune-credit-card-form.css' => '3b9868a8',
- 'rsrc/css/application/phortune/phortune-invoice.css' => '4436b241',
- 'rsrc/css/application/phortune/phortune.css' => '508a1a5e',
'rsrc/css/application/phrequent/phrequent.css' => 'bd79cc67',
'rsrc/css/application/phriction/phriction-document-css.css' => '03380da0',
'rsrc/css/application/policy/policy-edit.css' => '8794e2ed',
@@ -413,9 +410,6 @@
'rsrc/js/application/passphrase/passphrase-credential-control.js' => '48fe33d0',
'rsrc/js/application/pholio/behavior-pholio-mock-edit.js' => '3eed1f2b',
'rsrc/js/application/pholio/behavior-pholio-mock-view.js' => '5aa1544e',
- 'rsrc/js/application/phortune/behavior-stripe-payment-form.js' => '02cb4398',
- 'rsrc/js/application/phortune/behavior-test-payment-form.js' => '4a7fb02b',
- 'rsrc/js/application/phortune/phortune-credit-card-form.js' => 'd12d214f',
'rsrc/js/application/policy/behavior-policy-control.js' => '0eaa33a9',
'rsrc/js/application/policy/behavior-policy-rule-editor.js' => '9347f172',
'rsrc/js/application/projects/WorkboardBoard.js' => 'b46d88c5',
@@ -690,8 +684,6 @@
'javelin-behavior-select-content' => 'e8240b50',
'javelin-behavior-select-on-click' => '66365ee2',
'javelin-behavior-setup-check-https' => '01384686',
- 'javelin-behavior-stripe-payment-form' => '02cb4398',
- 'javelin-behavior-test-payment-form' => '4a7fb02b',
'javelin-behavior-time-typeahead' => '5803b9e7',
'javelin-behavior-toggle-class' => '32db8374',
'javelin-behavior-toggle-widget' => '8f959ad0',
@@ -814,10 +806,6 @@
'pholio-css' => '88ef5ef1',
'pholio-edit-css' => '4df55b3b',
'pholio-inline-comments-css' => '722b48c2',
- 'phortune-credit-card-form' => 'd12d214f',
- 'phortune-credit-card-form-css' => '3b9868a8',
- 'phortune-css' => '508a1a5e',
- 'phortune-invoice-css' => '4436b241',
'phrequent-css' => 'bd79cc67',
'phriction-document-css' => '03380da0',
'phui-action-panel-css' => '6c386cbf',
@@ -942,11 +930,6 @@
'javelin-leader',
'javelin-json',
),
- '02cb4398' => array(
- 'javelin-behavior',
- 'javelin-dom',
- 'phortune-credit-card-form',
- ),
'030b4f7a' => array(
'javelin-stratcom',
'javelin-install',
@@ -1352,11 +1335,6 @@
'490e2e2e' => array(
'phui-oi-list-view-css',
),
- '4a7fb02b' => array(
- 'javelin-behavior',
- 'javelin-dom',
- 'phortune-credit-card-form',
- ),
'4ae58b5a' => array(
'javelin-behavior',
'javelin-dom',
@@ -2068,13 +2046,6 @@
'javelin-dom',
'javelin-stratcom',
),
- 'd12d214f' => array(
- 'javelin-install',
- 'javelin-dom',
- 'javelin-json',
- 'javelin-workflow',
- 'javelin-util',
- ),
'd3799cb4' => array(
'javelin-install',
),
diff --git a/resources/sql/autopatches/20140721.phortune.1.cart.sql b/resources/sql/autopatches/20140721.phortune.1.cart.sql
--- a/resources/sql/autopatches/20140721.phortune.1.cart.sql
+++ b/resources/sql/autopatches/20140721.phortune.1.cart.sql
@@ -1,11 +1 @@
-CREATE TABLE {$NAMESPACE}_phortune.phortune_cart (
- id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
- phid VARCHAR(64) NOT NULL COLLATE utf8_bin,
- accountPHID VARCHAR(64) NOT NULL COLLATE utf8_bin,
- authorPHID VARCHAR(64) NOT NULL COLLATE utf8_bin,
- metadata LONGTEXT NOT NULL COLLATE utf8_bin,
- dateCreated INT UNSIGNED NOT NULL,
- dateModified INT UNSIGNED NOT NULL,
- UNIQUE KEY `key_phid` (phid),
- KEY `key_account` (accountPHID)
-) ENGINE=InnoDB, COLLATE utf8_general_ci;
+/* This file is intentionally left empty, see T15726 */
diff --git a/resources/sql/autopatches/20140721.phortune.2.purchase.sql b/resources/sql/autopatches/20140721.phortune.2.purchase.sql
--- a/resources/sql/autopatches/20140721.phortune.2.purchase.sql
+++ b/resources/sql/autopatches/20140721.phortune.2.purchase.sql
@@ -1,17 +1 @@
-CREATE TABLE {$NAMESPACE}_phortune.phortune_purchase (
- id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
- phid VARCHAR(64) NOT NULL COLLATE utf8_bin,
- productPHID VARCHAR(64) NOT NULL COLLATE utf8_bin,
- accountPHID VARCHAR(64) NOT NULL COLLATE utf8_bin,
- authorPHID VARCHAR(64) NOT NULL COLLATE utf8_bin,
- cartPHID VARCHAR(64) COLLATE utf8_bin,
- basePriceInCents INT NOT NULL,
- quantity INT UNSIGNED NOT NULL,
- totalPriceInCents INT NOT NULL,
- status VARCHAR(32) NOT NULL COLLATE utf8_bin,
- metadata LONGTEXT NOT NULL COLLATE utf8_bin,
- dateCreated INT UNSIGNED NOT NULL,
- dateModified INT UNSIGNED NOT NULL,
- UNIQUE KEY `key_phid` (phid),
- KEY `key_cart` (cartPHID)
-) ENGINE=InnoDB, COLLATE utf8_general_ci;
+/* This file is intentionally left empty, see T15726 */
diff --git a/resources/sql/autopatches/20140721.phortune.3.charge.sql b/resources/sql/autopatches/20140721.phortune.3.charge.sql
--- a/resources/sql/autopatches/20140721.phortune.3.charge.sql
+++ b/resources/sql/autopatches/20140721.phortune.3.charge.sql
@@ -1,16 +1 @@
-CREATE TABLE {$NAMESPACE}_phortune.phortune_charge (
- id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
- phid VARCHAR(64) NOT NULL COLLATE utf8_bin,
- accountPHID VARCHAR(64) NOT NULL COLLATE utf8_bin,
- authorPHID VARCHAR(64) NOT NULL COLLATE utf8_bin,
- cartPHID VARCHAR(64) NOT NULL COLLATE utf8_bin,
- paymentMethodPHID VARCHAR(64) NOT NULL COLLATE utf8_bin,
- amountInCents INT NOT NULL,
- status VARCHAR(32) NOT NULL COLLATE utf8_bin,
- metadata LONGTEXT NOT NULL COLLATE utf8_bin,
- dateCreated INT UNSIGNED NOT NULL,
- dateModified INT UNSIGNED NOT NULL,
- UNIQUE KEY `key_phid` (phid),
- KEY `key_cart` (cartPHID),
- KEY `key_account` (accountPHID)
-) ENGINE=InnoDB, COLLATE utf8_general_ci;
+/* This file is intentionally left empty, see T15726 */
diff --git a/resources/sql/autopatches/20140721.phortune.4.cartstatus.sql b/resources/sql/autopatches/20140721.phortune.4.cartstatus.sql
--- a/resources/sql/autopatches/20140721.phortune.4.cartstatus.sql
+++ b/resources/sql/autopatches/20140721.phortune.4.cartstatus.sql
@@ -1,2 +1 @@
-ALTER TABLE {$NAMESPACE}_phortune.phortune_cart
- ADD status VARCHAR(32) NOT NULL COLLATE utf8_bin;
+/* This file is intentionally left empty, see T15726 */
diff --git a/resources/sql/autopatches/20140721.phortune.5.cstatusdefault.sql b/resources/sql/autopatches/20140721.phortune.5.cstatusdefault.sql
--- a/resources/sql/autopatches/20140721.phortune.5.cstatusdefault.sql
+++ b/resources/sql/autopatches/20140721.phortune.5.cstatusdefault.sql
@@ -1,2 +1 @@
-UPDATE {$NAMESPACE}_phortune.phortune_cart
- SET status = 'cart:ready' WHERE status = '';
+/* This file is intentionally left empty, see T15726 */
diff --git a/resources/sql/autopatches/20140721.phortune.6.onetimecharge.sql b/resources/sql/autopatches/20140721.phortune.6.onetimecharge.sql
--- a/resources/sql/autopatches/20140721.phortune.6.onetimecharge.sql
+++ b/resources/sql/autopatches/20140721.phortune.6.onetimecharge.sql
@@ -1,3 +1 @@
-ALTER TABLE {$NAMESPACE}_phortune.phortune_charge
- ADD paymentProviderKey VARCHAR(128) NOT NULL COLLATE utf8_bin
- AFTER cartPHID;
+/* This file is intentionally left empty, see T15726 */
diff --git a/resources/sql/autopatches/20140721.phortune.7.nullmethod.sql b/resources/sql/autopatches/20140721.phortune.7.nullmethod.sql
--- a/resources/sql/autopatches/20140721.phortune.7.nullmethod.sql
+++ b/resources/sql/autopatches/20140721.phortune.7.nullmethod.sql
@@ -1,4 +1 @@
-/* Make this nullable to support one-time providers. */
-
-ALTER TABLE {$NAMESPACE}_phortune.phortune_charge
- CHANGE paymentMethodPHID paymentMethodPHID VARCHAR(64) COLLATE utf8_bin;
+/* This file is intentionally left empty, see T15726 */
diff --git a/resources/sql/autopatches/20140722.appname.php b/resources/sql/autopatches/20140722.appname.php
--- a/resources/sql/autopatches/20140722.appname.php
+++ b/resources/sql/autopatches/20140722.appname.php
@@ -39,7 +39,6 @@
'Phame',
'Phlux',
'Pholio',
- 'Phortune',
'PHPAST',
'Phragment',
'Phrequent',
diff --git a/resources/sql/autopatches/20140911.fund.1.initiative.sql b/resources/sql/autopatches/20140911.fund.1.initiative.sql
--- a/resources/sql/autopatches/20140911.fund.1.initiative.sql
+++ b/resources/sql/autopatches/20140911.fund.1.initiative.sql
@@ -1,15 +1 @@
-CREATE TABLE {$NAMESPACE}_fund.fund_initiative (
- id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
- phid VARCHAR(64) NOT NULL COLLATE utf8_bin,
- name VARCHAR(255) NOT NULL,
- ownerPHID VARCHAR(64) NOT NULL COLLATE utf8_bin,
- description LONGTEXT NOT NULL,
- viewPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin,
- editPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin,
- status VARCHAR(32) NOT NULL COLLATE utf8_bin,
- dateCreated INT UNSIGNED NOT NULL,
- dateModified INT UNSIGNED NOT NULL,
- UNIQUE KEY `key_phid` (phid),
- KEY `key_status` (status),
- KEY `key_owner` (ownerPHID)
-) ENGINE=InnoDB, COLLATE utf8_general_ci;
+/* This file is intentionally left empty, see T15726 */
diff --git a/resources/sql/autopatches/20140911.fund.2.xaction.sql b/resources/sql/autopatches/20140911.fund.2.xaction.sql
--- a/resources/sql/autopatches/20140911.fund.2.xaction.sql
+++ b/resources/sql/autopatches/20140911.fund.2.xaction.sql
@@ -1,19 +1 @@
-CREATE TABLE {$NAMESPACE}_fund.fund_initiativetransaction (
- id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
- phid VARCHAR(64) COLLATE utf8_bin NOT NULL,
- authorPHID VARCHAR(64) COLLATE utf8_bin NOT NULL,
- objectPHID VARCHAR(64) COLLATE utf8_bin NOT NULL,
- viewPolicy VARCHAR(64) COLLATE utf8_bin NOT NULL,
- editPolicy VARCHAR(64) COLLATE utf8_bin NOT NULL,
- commentPHID VARCHAR(64) COLLATE utf8_bin DEFAULT NULL,
- commentVersion INT UNSIGNED NOT NULL,
- transactionType VARCHAR(32) COLLATE utf8_bin NOT NULL,
- oldValue LONGTEXT COLLATE utf8_bin NOT NULL,
- newValue LONGTEXT COLLATE utf8_bin NOT NULL,
- contentSource LONGTEXT COLLATE utf8_bin NOT NULL,
- metadata LONGTEXT COLLATE utf8_bin NOT NULL,
- dateCreated INT UNSIGNED NOT NULL,
- dateModified INT UNSIGNED NOT NULL,
- UNIQUE KEY `key_phid` (`phid`),
- KEY `key_object` (`objectPHID`)
-) ENGINE=InnoDB, COLLATE utf8_general_ci;
+/* This file is intentionally left empty, see T15726 */
diff --git a/resources/sql/autopatches/20140911.fund.3.edge.sql b/resources/sql/autopatches/20140911.fund.3.edge.sql
--- a/resources/sql/autopatches/20140911.fund.3.edge.sql
+++ b/resources/sql/autopatches/20140911.fund.3.edge.sql
@@ -1,15 +1 @@
-CREATE TABLE {$NAMESPACE}_fund.edge (
- src VARCHAR(64) NOT NULL COLLATE utf8_bin,
- type VARCHAR(64) NOT NULL COLLATE utf8_bin,
- dst VARCHAR(64) NOT NULL COLLATE utf8_bin,
- dateCreated INT UNSIGNED NOT NULL,
- seq INT UNSIGNED NOT NULL,
- dataID INT UNSIGNED,
- PRIMARY KEY (src, type, dst),
- KEY (src, type, dateCreated, seq)
-) ENGINE=InnoDB, COLLATE utf8_general_ci;
-
-CREATE TABLE {$NAMESPACE}_fund.edgedata (
- id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
- data LONGTEXT NOT NULL COLLATE utf8_bin
-) ENGINE=InnoDB, COLLATE utf8_general_ci;
+/* This file is intentionally left empty, see T15726 */
diff --git a/resources/sql/autopatches/20140911.fund.4.backer.sql b/resources/sql/autopatches/20140911.fund.4.backer.sql
--- a/resources/sql/autopatches/20140911.fund.4.backer.sql
+++ b/resources/sql/autopatches/20140911.fund.4.backer.sql
@@ -1,14 +1 @@
-CREATE TABLE {$NAMESPACE}_fund.fund_backer (
- id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
- phid VARCHAR(64) NOT NULL COLLATE utf8_bin,
- initiativePHID VARCHAR(64) NOT NULL COLLATE utf8_bin,
- backerPHID VARCHAR(64) NOT NULL COLLATE utf8_bin,
- status VARCHAR(32) NOT NULL COLLATE utf8_bin,
- amountInCents INT UNSIGNED NOT NULL,
- properties LONGTEXT NOT NULL COLLATE utf8_bin,
- dateCreated INT UNSIGNED NOT NULL,
- dateModified INT UNSIGNED NOT NULL,
- UNIQUE KEY `key_phid` (phid),
- KEY `key_initiative` (initiativePHID),
- KEY `key_backer` (backerPHID)
-) ENGINE=InnoDB, COLLATE utf8_general_ci;
+/* This file is intentionally left empty, see T15726 */
diff --git a/resources/sql/autopatches/20140911.fund.5.backxaction.sql b/resources/sql/autopatches/20140911.fund.5.backxaction.sql
--- a/resources/sql/autopatches/20140911.fund.5.backxaction.sql
+++ b/resources/sql/autopatches/20140911.fund.5.backxaction.sql
@@ -1,19 +1 @@
-CREATE TABLE {$NAMESPACE}_fund.fund_backertransaction (
- id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
- phid VARCHAR(64) COLLATE utf8_bin NOT NULL,
- authorPHID VARCHAR(64) COLLATE utf8_bin NOT NULL,
- objectPHID VARCHAR(64) COLLATE utf8_bin NOT NULL,
- viewPolicy VARCHAR(64) COLLATE utf8_bin NOT NULL,
- editPolicy VARCHAR(64) COLLATE utf8_bin NOT NULL,
- commentPHID VARCHAR(64) COLLATE utf8_bin DEFAULT NULL,
- commentVersion INT UNSIGNED NOT NULL,
- transactionType VARCHAR(32) COLLATE utf8_bin NOT NULL,
- oldValue LONGTEXT COLLATE utf8_bin NOT NULL,
- newValue LONGTEXT COLLATE utf8_bin NOT NULL,
- contentSource LONGTEXT COLLATE utf8_bin NOT NULL,
- metadata LONGTEXT COLLATE utf8_bin NOT NULL,
- dateCreated INT UNSIGNED NOT NULL,
- dateModified INT UNSIGNED NOT NULL,
- UNIQUE KEY `key_phid` (`phid`),
- KEY `key_object` (`objectPHID`)
-) ENGINE=InnoDB, COLLATE utf8_general_ci;
+/* This file is intentionally left empty, see T15726 */
diff --git a/resources/sql/autopatches/20141004.currency.01.sql b/resources/sql/autopatches/20141004.currency.01.sql
--- a/resources/sql/autopatches/20141004.currency.01.sql
+++ b/resources/sql/autopatches/20141004.currency.01.sql
@@ -1,4 +1 @@
-TRUNCATE TABLE {$NAMESPACE}_fund.fund_backer;
-
-ALTER TABLE {$NAMESPACE}_fund.fund_backer
- CHANGE amountInCents amountAsCurrency VARCHAR(64) NOT NULL COLLATE utf8_bin;
+/* This file is intentionally left empty, see T15726 */
diff --git a/resources/sql/autopatches/20141004.currency.02.sql b/resources/sql/autopatches/20141004.currency.02.sql
--- a/resources/sql/autopatches/20141004.currency.02.sql
+++ b/resources/sql/autopatches/20141004.currency.02.sql
@@ -1,2 +1 @@
-ALTER TABLE {$NAMESPACE}_phortune.phortune_account
- DROP balanceInCents;
+/* This file is intentionally left empty, see T15726 */
diff --git a/resources/sql/autopatches/20141004.currency.03.sql b/resources/sql/autopatches/20141004.currency.03.sql
--- a/resources/sql/autopatches/20141004.currency.03.sql
+++ b/resources/sql/autopatches/20141004.currency.03.sql
@@ -1,4 +1 @@
-TRUNCATE {$NAMESPACE}_phortune.phortune_charge;
-
-ALTER TABLE {$NAMESPACE}_phortune.phortune_charge
- CHANGE amountInCents amountAsCurrency VARCHAR(64) NOT NULL COLLATE utf8_bin;
+/* This file is intentionally left empty, see T15726 */
diff --git a/resources/sql/autopatches/20141004.currency.04.sql b/resources/sql/autopatches/20141004.currency.04.sql
--- a/resources/sql/autopatches/20141004.currency.04.sql
+++ b/resources/sql/autopatches/20141004.currency.04.sql
@@ -1,13 +1 @@
-TRUNCATE {$NAMESPACE}_phortune.phortune_product;
-
-ALTER TABLE {$NAMESPACE}_phortune.phortune_product
- DROP status;
-
-ALTER TABLE {$NAMESPACE}_phortune.phortune_product
- DROP billingIntervalInMonths;
-
-ALTER TABLE {$NAMESPACE}_phortune.phortune_product
- DROP trialPeriodInDays;
-
-ALTER TABLE {$NAMESPACE}_phortune.phortune_product
- CHANGE priceInCents priceAsCurrency VARCHAR(64) NOT NULL collate utf8_bin;
+/* This file is intentionally left empty, see T15726 */
diff --git a/resources/sql/autopatches/20141004.currency.05.sql b/resources/sql/autopatches/20141004.currency.05.sql
--- a/resources/sql/autopatches/20141004.currency.05.sql
+++ b/resources/sql/autopatches/20141004.currency.05.sql
@@ -1,8 +1 @@
-TRUNCATE {$NAMESPACE}_phortune.phortune_purchase;
-
-ALTER TABLE {$NAMESPACE}_phortune.phortune_purchase
- DROP totalPriceInCents;
-
-ALTER TABLE {$NAMESPACE}_phortune.phortune_purchase
- CHANGE basePriceInCents basePriceAsCurrency VARCHAR(64)
- NOT NULL collate utf8_bin;
+/* This file is intentionally left empty, see T15726 */
diff --git a/resources/sql/autopatches/20141004.currency.06.sql b/resources/sql/autopatches/20141004.currency.06.sql
--- a/resources/sql/autopatches/20141004.currency.06.sql
+++ b/resources/sql/autopatches/20141004.currency.06.sql
@@ -1,2 +1 @@
-ALTER TABLE {$NAMESPACE}_phortune.phortune_product
- DROP productType;
+/* This file is intentionally left empty, see T15726 */
diff --git a/resources/sql/autopatches/20141005.phortuneproduct.sql b/resources/sql/autopatches/20141005.phortuneproduct.sql
--- a/resources/sql/autopatches/20141005.phortuneproduct.sql
+++ b/resources/sql/autopatches/20141005.phortuneproduct.sql
@@ -1,22 +1 @@
-DROP TABLE {$NAMESPACE}_phortune.phortune_producttransaction;
-
-ALTER TABLE {$NAMESPACE}_phortune.phortune_product
- DROP productName;
-
-ALTER TABLE {$NAMESPACE}_phortune.phortune_product
- DROP priceAsCurrency;
-
-ALTER TABLE {$NAMESPACE}_phortune.phortune_product
- ADD productClassKey BINARY(12) NOT NULL;
-
-ALTER TABLE {$NAMESPACE}_phortune.phortune_product
- ADD productClass VARCHAR(128) NOT NULL COLLATE utf8_bin;
-
-ALTER TABLE {$NAMESPACE}_phortune.phortune_product
- ADD productRefKey BINARY(12) NOT NULL;
-
-ALTER TABLE {$NAMESPACE}_phortune.phortune_product
- ADD productRef VARCHAR(128) NOT NULL COLLATE utf8_bin;
-
-ALTER TABLE {$NAMESPACE}_phortune.phortune_product
- ADD UNIQUE KEY `key_product` (productClassKey, productRefKey);
+/* This file is intentionally left empty, see T15726 */
diff --git a/resources/sql/autopatches/20141006.phortunecart.sql b/resources/sql/autopatches/20141006.phortunecart.sql
--- a/resources/sql/autopatches/20141006.phortunecart.sql
+++ b/resources/sql/autopatches/20141006.phortunecart.sql
@@ -1,4 +1 @@
-TRUNCATE TABLE {$NAMESPACE}_phortune.phortune_cart;
-
-ALTER TABLE {$NAMESPACE}_phortune.phortune_cart
- ADD cartClass VARCHAR(128) NOT NULL COLLATE utf8_bin;
+/* This file is intentionally left empty, see T15726 */
diff --git a/resources/sql/autopatches/20141006.phortunemerchant.sql b/resources/sql/autopatches/20141006.phortunemerchant.sql
--- a/resources/sql/autopatches/20141006.phortunemerchant.sql
+++ b/resources/sql/autopatches/20141006.phortunemerchant.sql
@@ -1,10 +1 @@
-CREATE TABLE {$NAMESPACE}_phortune.phortune_merchant (
- id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
- phid VARCHAR(64) NOT NULL COLLATE utf8_bin,
- name VARCHAR(255) NOT NULL COLLATE utf8_bin,
- viewPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin,
- editPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin,
- dateCreated INT UNSIGNED NOT NULL,
- dateModified INT UNSIGNED NOT NULL,
- UNIQUE KEY `key_phid` (phid)
-) ENGINE=InnoDB, COLLATE=utf8_bin;
+/* This file is intentionally left empty, see T15726 */
diff --git a/resources/sql/autopatches/20141006.phortunemerchantx.sql b/resources/sql/autopatches/20141006.phortunemerchantx.sql
--- a/resources/sql/autopatches/20141006.phortunemerchantx.sql
+++ b/resources/sql/autopatches/20141006.phortunemerchantx.sql
@@ -1,19 +1 @@
-CREATE TABLE {$NAMESPACE}_phortune.phortune_merchanttransaction (
- id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
- phid VARCHAR(64) COLLATE utf8_bin NOT NULL,
- authorPHID VARCHAR(64) COLLATE utf8_bin NOT NULL,
- objectPHID VARCHAR(64) COLLATE utf8_bin NOT NULL,
- viewPolicy VARCHAR(64) COLLATE utf8_bin NOT NULL,
- editPolicy VARCHAR(64) COLLATE utf8_bin NOT NULL,
- commentPHID VARCHAR(64) COLLATE utf8_bin DEFAULT NULL,
- commentVersion INT UNSIGNED NOT NULL,
- transactionType VARCHAR(32) COLLATE utf8_bin NOT NULL,
- oldValue LONGTEXT COLLATE utf8_bin NOT NULL,
- newValue LONGTEXT COLLATE utf8_bin NOT NULL,
- contentSource LONGTEXT COLLATE utf8_bin NOT NULL,
- metadata LONGTEXT COLLATE utf8_bin NOT NULL,
- dateCreated INT UNSIGNED NOT NULL,
- dateModified INT UNSIGNED NOT NULL,
- UNIQUE KEY `key_phid` (`phid`),
- KEY `key_object` (`objectPHID`)
-) ENGINE=InnoDB, COLLATE utf8_general_ci;
+/* This file is intentionally left empty, see T15726 */
diff --git a/resources/sql/autopatches/20141007.fundmerchant.sql b/resources/sql/autopatches/20141007.fundmerchant.sql
--- a/resources/sql/autopatches/20141007.fundmerchant.sql
+++ b/resources/sql/autopatches/20141007.fundmerchant.sql
@@ -1,2 +1 @@
-ALTER TABLE {$NAMESPACE}_fund.fund_initiative
- ADD merchantPHID VARBINARY(64);
+/* This file is intentionally left empty, see T15726 */
diff --git a/resources/sql/autopatches/20141007.fundrisks.sql b/resources/sql/autopatches/20141007.fundrisks.sql
--- a/resources/sql/autopatches/20141007.fundrisks.sql
+++ b/resources/sql/autopatches/20141007.fundrisks.sql
@@ -1,2 +1 @@
-ALTER TABLE {$NAMESPACE}_fund.fund_initiative
- ADD risks LONGTEXT NOT NULL COLLATE utf8_bin;
+/* This file is intentionally left empty, see T15726 */
diff --git a/resources/sql/autopatches/20141007.fundtotal.sql b/resources/sql/autopatches/20141007.fundtotal.sql
--- a/resources/sql/autopatches/20141007.fundtotal.sql
+++ b/resources/sql/autopatches/20141007.fundtotal.sql
@@ -1,4 +1 @@
-ALTER TABLE {$NAMESPACE}_fund.fund_initiative
- ADD totalAsCurrency VARCHAR(64) NOT NULL COLLATE utf8_bin;
-
-UPDATE {$NAMESPACE}_fund.fund_initiative SET totalAsCurrency = '0.00 USD';
+/* This file is intentionally left empty, see T15726 */
diff --git a/resources/sql/autopatches/20141007.phortunecartmerchant.sql b/resources/sql/autopatches/20141007.phortunecartmerchant.sql
--- a/resources/sql/autopatches/20141007.phortunecartmerchant.sql
+++ b/resources/sql/autopatches/20141007.phortunecartmerchant.sql
@@ -1,5 +1 @@
-ALTER TABLE {$NAMESPACE}_phortune.phortune_cart
- ADD merchantPHID VARBINARY(64) NOT NULL;
-
-ALTER TABLE {$NAMESPACE}_phortune.phortune_cart
- ADD KEY `key_merchant` (merchantPHID);
+/* This file is intentionally left empty, see T15726 */
diff --git a/resources/sql/autopatches/20141007.phortunecharge.sql b/resources/sql/autopatches/20141007.phortunecharge.sql
--- a/resources/sql/autopatches/20141007.phortunecharge.sql
+++ b/resources/sql/autopatches/20141007.phortunecharge.sql
@@ -1,16 +1 @@
-TRUNCATE TABLE {$NAMESPACE}_phortune.phortune_charge;
-
-ALTER TABLE {$NAMESPACE}_phortune.phortune_charge
- DROP paymentProviderKey;
-
-ALTER TABLE {$NAMESPACE}_phortune.phortune_charge
- ADD merchantPHID VARBINARY(64) NOT NULL;
-
-ALTER TABLE {$NAMESPACE}_phortune.phortune_charge
- ADD providerPHID VARBINARY(64) NOT NULL;
-
-ALTER TABLE {$NAMESPACE}_phortune.phortune_charge
- ADD KEY `key_merchant` (merchantPHID);
-
-ALTER TABLE {$NAMESPACE}_phortune.phortune_charge
- ADD KEY `key_provider` (providerPHID);
+/* This file is intentionally left empty, see T15726 */
diff --git a/resources/sql/autopatches/20141007.phortunepayment.sql b/resources/sql/autopatches/20141007.phortunepayment.sql
--- a/resources/sql/autopatches/20141007.phortunepayment.sql
+++ b/resources/sql/autopatches/20141007.phortunepayment.sql
@@ -1,16 +1 @@
-TRUNCATE TABLE {$NAMESPACE}_phortune.phortune_paymentmethod;
-
-ALTER TABLE {$NAMESPACE}_phortune.phortune_paymentmethod
- DROP providerType;
-
-ALTER TABLE {$NAMESPACE}_phortune.phortune_paymentmethod
- DROP providerDomain;
-
-ALTER TABLE {$NAMESPACE}_phortune.phortune_paymentmethod
- ADD merchantPHID VARBINARY(64) NOT NULL;
-
-ALTER TABLE {$NAMESPACE}_phortune.phortune_paymentmethod
- ADD providerPHID VARBINARY(64) NOT NULL;
-
-ALTER TABLE {$NAMESPACE}_phortune.phortune_paymentmethod
- ADD KEY `key_merchant` (merchantPHID, accountPHID);
+/* This file is intentionally left empty, see T15726 */
diff --git a/resources/sql/autopatches/20141007.phortuneprovider.sql b/resources/sql/autopatches/20141007.phortuneprovider.sql
--- a/resources/sql/autopatches/20141007.phortuneprovider.sql
+++ b/resources/sql/autopatches/20141007.phortuneprovider.sql
@@ -1,12 +1 @@
-CREATE TABLE {$NAMESPACE}_phortune.phortune_paymentproviderconfig (
- id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
- phid VARCHAR(64) NOT NULL COLLATE utf8_bin,
- merchantPHID VARCHAR(64) NOT NULL COLLATE utf8_bin,
- providerClassKey BINARY(12) NOT NULL,
- providerClass VARCHAR(128) NOT NULL COLLATE utf8_bin,
- metadata LONGTEXT NOT NULL COLLATE utf8_bin,
- dateCreated INT UNSIGNED NOT NULL,
- dateModified INT UNSIGNED NOT NULL,
- UNIQUE KEY `key_phid` (phid),
- UNIQUE KEY `key_merchant` (merchantPHID, providerClassKey)
-) ENGINE=InnoDB, COLLATE=utf8_bin;
+/* This file is intentionally left empty, see T15726 */
diff --git a/resources/sql/autopatches/20141007.phortuneproviderx.sql b/resources/sql/autopatches/20141007.phortuneproviderx.sql
--- a/resources/sql/autopatches/20141007.phortuneproviderx.sql
+++ b/resources/sql/autopatches/20141007.phortuneproviderx.sql
@@ -1,19 +1 @@
-CREATE TABLE {$NAMESPACE}_phortune.phortune_paymentproviderconfigtransaction (
- id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
- phid VARCHAR(64) COLLATE utf8_bin NOT NULL,
- authorPHID VARCHAR(64) COLLATE utf8_bin NOT NULL,
- objectPHID VARCHAR(64) COLLATE utf8_bin NOT NULL,
- viewPolicy VARCHAR(64) COLLATE utf8_bin NOT NULL,
- editPolicy VARCHAR(64) COLLATE utf8_bin NOT NULL,
- commentPHID VARCHAR(64) COLLATE utf8_bin DEFAULT NULL,
- commentVersion INT UNSIGNED NOT NULL,
- transactionType VARCHAR(32) COLLATE utf8_bin NOT NULL,
- oldValue LONGTEXT COLLATE utf8_bin NOT NULL,
- newValue LONGTEXT COLLATE utf8_bin NOT NULL,
- contentSource LONGTEXT COLLATE utf8_bin NOT NULL,
- metadata LONGTEXT COLLATE utf8_bin NOT NULL,
- dateCreated INT UNSIGNED NOT NULL,
- dateModified INT UNSIGNED NOT NULL,
- UNIQUE KEY `key_phid` (`phid`),
- KEY `key_object` (`objectPHID`)
-) ENGINE=InnoDB, COLLATE utf8_general_ci;
+/* This file is intentionally left empty, see T15726 */
diff --git a/resources/sql/autopatches/20141008.phortunemerchdesc.sql b/resources/sql/autopatches/20141008.phortunemerchdesc.sql
--- a/resources/sql/autopatches/20141008.phortunemerchdesc.sql
+++ b/resources/sql/autopatches/20141008.phortunemerchdesc.sql
@@ -1,2 +1 @@
-ALTER TABLE {$NAMESPACE}_phortune.phortune_merchant
- ADD description LONGTEXT NOT NULL COLLATE utf8_bin;
+/* This file is intentionally left empty, see T15726 */
diff --git a/resources/sql/autopatches/20141008.phortuneprovdis.sql b/resources/sql/autopatches/20141008.phortuneprovdis.sql
--- a/resources/sql/autopatches/20141008.phortuneprovdis.sql
+++ b/resources/sql/autopatches/20141008.phortuneprovdis.sql
@@ -1,5 +1 @@
-ALTER TABLE {$NAMESPACE}_phortune.phortune_paymentproviderconfig
- ADD isEnabled BOOL NOT NULL;
-
-UPDATE {$NAMESPACE}_phortune.phortune_paymentproviderconfig
- SET isEnabled = 1;
+/* This file is intentionally left empty, see T15726 */
diff --git a/resources/sql/autopatches/20141008.phortunerefund.sql b/resources/sql/autopatches/20141008.phortunerefund.sql
--- a/resources/sql/autopatches/20141008.phortunerefund.sql
+++ b/resources/sql/autopatches/20141008.phortunerefund.sql
@@ -1,11 +1 @@
-ALTER TABLE {$NAMESPACE}_phortune.phortune_charge
- ADD amountRefundedAsCurrency VARCHAR(64) NOT NULL COLLATE utf8_bin;
-
-UPDATE {$NAMESPACE}_phortune.phortune_charge
- SET amountRefundedAsCurrency = '0.00 USD';
-
-ALTER TABLE {$NAMESPACE}_phortune.phortune_charge
- ADD refundingPHID VARBINARY(64);
-
-ALTER TABLE {$NAMESPACE}_phortune.phortune_charge
- ADD refundedChargePHID VARBINARY(64);
+/* This file is intentionally left empty, see T15726 */
diff --git a/resources/sql/autopatches/20141010.fundmailkey.sql b/resources/sql/autopatches/20141010.fundmailkey.sql
--- a/resources/sql/autopatches/20141010.fundmailkey.sql
+++ b/resources/sql/autopatches/20141010.fundmailkey.sql
@@ -1,2 +1 @@
-ALTER TABLE {$NAMESPACE}_fund.fund_initiative
- ADD mailKey BINARY(20) NOT NULL;
+/* This file is intentionally left empty, see T15726 */
diff --git a/resources/sql/autopatches/20141011.phortunemerchedit.sql b/resources/sql/autopatches/20141011.phortunemerchedit.sql
--- a/resources/sql/autopatches/20141011.phortunemerchedit.sql
+++ b/resources/sql/autopatches/20141011.phortunemerchedit.sql
@@ -1,2 +1 @@
-ALTER TABLE {$NAMESPACE}_phortune.phortune_merchant
- DROP editPolicy;
+/* This file is intentionally left empty, see T15726 */
diff --git a/resources/sql/autopatches/20141012.phortunecartxaction.sql b/resources/sql/autopatches/20141012.phortunecartxaction.sql
--- a/resources/sql/autopatches/20141012.phortunecartxaction.sql
+++ b/resources/sql/autopatches/20141012.phortunecartxaction.sql
@@ -1,19 +1 @@
-CREATE TABLE {$NAMESPACE}_phortune.phortune_carttransaction (
- id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
- phid VARCHAR(64) COLLATE utf8_bin NOT NULL,
- authorPHID VARCHAR(64) COLLATE utf8_bin NOT NULL,
- objectPHID VARCHAR(64) COLLATE utf8_bin NOT NULL,
- viewPolicy VARCHAR(64) COLLATE utf8_bin NOT NULL,
- editPolicy VARCHAR(64) COLLATE utf8_bin NOT NULL,
- commentPHID VARCHAR(64) COLLATE utf8_bin DEFAULT NULL,
- commentVersion INT UNSIGNED NOT NULL,
- transactionType VARCHAR(32) COLLATE utf8_bin NOT NULL,
- oldValue LONGTEXT COLLATE utf8_bin NOT NULL,
- newValue LONGTEXT COLLATE utf8_bin NOT NULL,
- contentSource LONGTEXT COLLATE utf8_bin NOT NULL,
- metadata LONGTEXT COLLATE utf8_bin NOT NULL,
- dateCreated INT UNSIGNED NOT NULL,
- dateModified INT UNSIGNED NOT NULL,
- UNIQUE KEY `key_phid` (`phid`),
- KEY `key_object` (`objectPHID`)
-) ENGINE=InnoDB, COLLATE utf8_general_ci;
+/* This file is intentionally left empty, see T15726 */
diff --git a/resources/sql/autopatches/20141013.phortunecartkey.sql b/resources/sql/autopatches/20141013.phortunecartkey.sql
--- a/resources/sql/autopatches/20141013.phortunecartkey.sql
+++ b/resources/sql/autopatches/20141013.phortunecartkey.sql
@@ -1,2 +1 @@
-ALTER TABLE {$NAMESPACE}_phortune.phortune_cart
- ADD mailKey BINARY(20) NOT NULL;
+/* This file is intentionally left empty, see T15726 */
diff --git a/resources/sql/autopatches/20150124.subs.1.sql b/resources/sql/autopatches/20150124.subs.1.sql
--- a/resources/sql/autopatches/20150124.subs.1.sql
+++ b/resources/sql/autopatches/20150124.subs.1.sql
@@ -1,20 +1 @@
-CREATE TABLE {$NAMESPACE}_phortune.phortune_subscription (
- id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
- phid VARBINARY(64) NOT NULL,
- accountPHID VARBINARY(64) NOT NULL,
- merchantPHID VARBINARY(64) NOT NULL,
- triggerPHID VARBINARY(64) NOT NULL,
- authorPHID VARBINARY(64) NOT NULL,
- subscriptionClassKey BINARY(12) NOT NULL,
- subscriptionClass VARCHAR(128) NOT NULL COLLATE {$COLLATE_TEXT},
- subscriptionRefKey BINARY(12) NOT NULL,
- subscriptionRef VARCHAR(128) NOT NULL COLLATE {$COLLATE_TEXT},
- status VARCHAR(32) NOT NULL COLLATE {$COLLATE_TEXT},
- metadata LONGTEXT NOT NULL COLLATE {$COLLATE_TEXT},
- dateCreated INT UNSIGNED NOT NULL,
- dateModified INT UNSIGNED NOT NULL,
- UNIQUE KEY `key_phid` (phid),
- UNIQUE KEY `key_subscription` (subscriptionClassKey, subscriptionRefKey),
- KEY `key_account` (accountPHID),
- KEY `key_merchant` (merchantPHID)
-) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT};
+/* This file is intentionally left empty, see T15726 */
diff --git a/resources/sql/autopatches/20150130.phortune.1.subphid.sql b/resources/sql/autopatches/20150130.phortune.1.subphid.sql
--- a/resources/sql/autopatches/20150130.phortune.1.subphid.sql
+++ b/resources/sql/autopatches/20150130.phortune.1.subphid.sql
@@ -1,2 +1 @@
-ALTER TABLE {$NAMESPACE}_phortune.phortune_cart
- ADD subscriptionPHID VARBINARY(64);
+/* This file is intentionally left empty, see T15726 */
diff --git a/resources/sql/autopatches/20150130.phortune.2.subkey.sql b/resources/sql/autopatches/20150130.phortune.2.subkey.sql
--- a/resources/sql/autopatches/20150130.phortune.2.subkey.sql
+++ b/resources/sql/autopatches/20150130.phortune.2.subkey.sql
@@ -1,2 +1 @@
-ALTER TABLE {$NAMESPACE}_phortune.phortune_cart
- ADD KEY `key_subscription` (subscriptionPHID);
+/* This file is intentionally left empty, see T15726 */
diff --git a/resources/sql/autopatches/20150131.phortune.1.defaultpayment.sql b/resources/sql/autopatches/20150131.phortune.1.defaultpayment.sql
--- a/resources/sql/autopatches/20150131.phortune.1.defaultpayment.sql
+++ b/resources/sql/autopatches/20150131.phortune.1.defaultpayment.sql
@@ -1,2 +1 @@
-ALTER TABLE {$NAMESPACE}_phortune.phortune_subscription
- ADD defaultPaymentMethodPHID VARBINARY(64);
+/* This file is intentionally left empty, see T15726 */
diff --git a/resources/sql/autopatches/20150420.invoice.1.sql b/resources/sql/autopatches/20150420.invoice.1.sql
--- a/resources/sql/autopatches/20150420.invoice.1.sql
+++ b/resources/sql/autopatches/20150420.invoice.1.sql
@@ -1,2 +1 @@
-ALTER TABLE {$NAMESPACE}_phortune.phortune_cart
- ADD isInvoice BOOL NOT NULL;
+/* This file is intentionally left empty, see T15726 */
diff --git a/resources/sql/autopatches/20150420.invoice.2.sql b/resources/sql/autopatches/20150420.invoice.2.sql
--- a/resources/sql/autopatches/20150420.invoice.2.sql
+++ b/resources/sql/autopatches/20150420.invoice.2.sql
@@ -1,2 +1 @@
-UPDATE {$NAMESPACE}_phortune.phortune_cart
- SET isInvoice = 1 WHERE subscriptionPHID IS NOT NULL;
+/* This file is intentionally left empty, see T15726 */
diff --git a/resources/sql/autopatches/20160331.fund.comments.1.sql b/resources/sql/autopatches/20160331.fund.comments.1.sql
--- a/resources/sql/autopatches/20160331.fund.comments.1.sql
+++ b/resources/sql/autopatches/20160331.fund.comments.1.sql
@@ -1,18 +1 @@
-CREATE TABLE {$NAMESPACE}_fund.fund_initiativetransaction_comment (
- id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
- phid VARCHAR(64) NOT NULL,
- transactionPHID VARCHAR(64),
- authorPHID VARCHAR(64) NOT NULL,
- viewPolicy VARCHAR(64) NOT NULL,
- editPolicy VARCHAR(64) NOT NULL,
- commentVersion INT UNSIGNED NOT NULL,
- content LONGTEXT NOT NULL COLLATE {$COLLATE_TEXT},
- contentSource LONGTEXT NOT NULL COLLATE {$COLLATE_TEXT},
- isDeleted BOOL NOT NULL,
- dateCreated INT UNSIGNED NOT NULL,
- dateModified INT UNSIGNED NOT NULL,
-
- UNIQUE KEY `key_phid` (phid),
- UNIQUE KEY `key_version` (transactionPHID, commentVersion)
-
-) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT};
+/* This file is intentionally left empty, see T15726 */
diff --git a/resources/sql/autopatches/20161025.phortune.contact.1.sql b/resources/sql/autopatches/20161025.phortune.contact.1.sql
--- a/resources/sql/autopatches/20161025.phortune.contact.1.sql
+++ b/resources/sql/autopatches/20161025.phortune.contact.1.sql
@@ -1,2 +1 @@
-ALTER TABLE {$NAMESPACE}_phortune.phortune_merchant
- ADD contactInfo LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL;
+/* This file is intentionally left empty, see T15726 */
diff --git a/resources/sql/autopatches/20161025.phortune.merchant.image.1.sql b/resources/sql/autopatches/20161025.phortune.merchant.image.1.sql
--- a/resources/sql/autopatches/20161025.phortune.merchant.image.1.sql
+++ b/resources/sql/autopatches/20161025.phortune.merchant.image.1.sql
@@ -1,2 +1 @@
-ALTER TABLE {$NAMESPACE}_phortune.phortune_merchant
- ADD profileImagePHID VARBINARY(64);
+/* This file is intentionally left empty, see T15726 */
diff --git a/resources/sql/autopatches/20161029.phortune.invoice.1.sql b/resources/sql/autopatches/20161029.phortune.invoice.1.sql
--- a/resources/sql/autopatches/20161029.phortune.invoice.1.sql
+++ b/resources/sql/autopatches/20161029.phortune.invoice.1.sql
@@ -1,5 +1 @@
-ALTER TABLE {$NAMESPACE}_phortune.phortune_merchant
- ADD invoiceEmail VARCHAR(255) COLLATE {$COLLATE_TEXT} NOT NULL;
-
-ALTER TABLE {$NAMESPACE}_phortune.phortune_merchant
- ADD invoiceFooter LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL;
+/* This file is intentionally left empty, see T15726 */
diff --git a/resources/sql/autopatches/20170907.ferret.04.fund.doc.sql b/resources/sql/autopatches/20170907.ferret.04.fund.doc.sql
--- a/resources/sql/autopatches/20170907.ferret.04.fund.doc.sql
+++ b/resources/sql/autopatches/20170907.ferret.04.fund.doc.sql
@@ -1,9 +1 @@
-CREATE TABLE {$NAMESPACE}_fund.fund_initiative_fdocument (
- id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
- objectPHID VARBINARY(64) NOT NULL,
- isClosed BOOL NOT NULL,
- authorPHID VARBINARY(64),
- ownerPHID VARBINARY(64),
- epochCreated INT UNSIGNED NOT NULL,
- epochModified INT UNSIGNED NOT NULL
-) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT};
+/* This file is intentionally left empty, see T15726 */
diff --git a/resources/sql/autopatches/20170907.ferret.05.fund.field.sql b/resources/sql/autopatches/20170907.ferret.05.fund.field.sql
--- a/resources/sql/autopatches/20170907.ferret.05.fund.field.sql
+++ b/resources/sql/autopatches/20170907.ferret.05.fund.field.sql
@@ -1,8 +1 @@
-CREATE TABLE {$NAMESPACE}_fund.fund_initiative_ffield (
- id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
- documentID INT UNSIGNED NOT NULL,
- fieldKey VARCHAR(4) NOT NULL COLLATE {$COLLATE_TEXT},
- rawCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT},
- termCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT},
- normalCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT}
-) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT};
+/* This file is intentionally left empty, see T15726 */
diff --git a/resources/sql/autopatches/20170907.ferret.06.fund.ngrams.sql b/resources/sql/autopatches/20170907.ferret.06.fund.ngrams.sql
--- a/resources/sql/autopatches/20170907.ferret.06.fund.ngrams.sql
+++ b/resources/sql/autopatches/20170907.ferret.06.fund.ngrams.sql
@@ -1,5 +1 @@
-CREATE TABLE {$NAMESPACE}_fund.fund_initiative_fngrams (
- id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
- documentID INT UNSIGNED NOT NULL,
- ngram CHAR(3) NOT NULL COLLATE {$COLLATE_TEXT}
-) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT};
+/* This file is intentionally left empty, see T15726 */
diff --git a/resources/sql/autopatches/20171002.cngram.04.fund.sql b/resources/sql/autopatches/20171002.cngram.04.fund.sql
--- a/resources/sql/autopatches/20171002.cngram.04.fund.sql
+++ b/resources/sql/autopatches/20171002.cngram.04.fund.sql
@@ -1,7 +1 @@
-CREATE TABLE {$NAMESPACE}_fund.fund_initiative_fngrams_common (
- id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
- ngram CHAR(3) NOT NULL COLLATE {$COLLATE_TEXT},
- needsCollection BOOL NOT NULL,
- UNIQUE KEY `key_ngram` (ngram),
- KEY `key_collect` (needsCollection)
-) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT};
+/* This file is intentionally left empty, see T15726 */
diff --git a/resources/sql/autopatches/20190116.phortune.01.billing.sql b/resources/sql/autopatches/20190116.phortune.01.billing.sql
--- a/resources/sql/autopatches/20190116.phortune.01.billing.sql
+++ b/resources/sql/autopatches/20190116.phortune.01.billing.sql
@@ -1,3 +1 @@
-ALTER TABLE {$NAMESPACE}_phortune.phortune_account
- ADD billingName VARCHAR(255) NOT NULL COLLATE {$COLLATE_TEXT},
- ADD billingAddress LONGTEXT NOT NULL COLLATE {$COLLATE_TEXT};
+/* This file is intentionally left empty, see T15726 */
diff --git a/resources/sql/autopatches/20190802.email.01.storage.sql b/resources/sql/autopatches/20190802.email.01.storage.sql
--- a/resources/sql/autopatches/20190802.email.01.storage.sql
+++ b/resources/sql/autopatches/20190802.email.01.storage.sql
@@ -1,12 +1 @@
-CREATE TABLE {$NAMESPACE}_phortune.phortune_accountemail (
- id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
- phid VARBINARY(64) NOT NULL,
- accountPHID VARBINARY(64) NOT NULL,
- authorPHID VARBINARY(64) NOT NULL,
- address VARCHAR(128) NOT NULL COLLATE {$COLLATE_SORT},
- status VARCHAR(32) NOT NULL COLLATE {$COLLATE_TEXT},
- addressKey VARCHAR(32) NOT NULL COLLATE {$COLLATE_TEXT},
- accessKey VARCHAR(32) NOT NULL COLLATE {$COLLATE_TEXT},
- dateCreated INT UNSIGNED NOT NULL,
- dateModified INT UNSIGNED NOT NULL
-) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE {$COLLATE_TEXT};
+/* This file is intentionally left empty, see T15726 */
diff --git a/resources/sql/autopatches/20190802.email.02.xaction.sql b/resources/sql/autopatches/20190802.email.02.xaction.sql
--- a/resources/sql/autopatches/20190802.email.02.xaction.sql
+++ b/resources/sql/autopatches/20190802.email.02.xaction.sql
@@ -1,19 +1 @@
-CREATE TABLE {$NAMESPACE}_phortune.phortune_accountemailtransaction (
- id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
- phid VARBINARY(64) NOT NULL,
- authorPHID VARBINARY(64) NOT NULL,
- objectPHID VARBINARY(64) NOT NULL,
- viewPolicy VARBINARY(64) NOT NULL,
- editPolicy VARBINARY(64) NOT NULL,
- commentPHID VARBINARY(64) DEFAULT NULL,
- commentVersion INT UNSIGNED NOT NULL,
- transactionType VARCHAR(32) NOT NULL,
- oldValue LONGTEXT NOT NULL,
- newValue LONGTEXT NOT NULL,
- contentSource LONGTEXT NOT NULL,
- metadata LONGTEXT NOT NULL,
- dateCreated INT UNSIGNED NOT NULL,
- dateModified INT UNSIGNED NOT NULL,
- UNIQUE KEY `key_phid` (`phid`),
- KEY `key_object` (`objectPHID`)
-) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE {$COLLATE_TEXT};
+/* This file is intentionally left empty, see T15726 */
diff --git a/resources/sql/autopatches/20190815.account.01.carts.php b/resources/sql/autopatches/20190815.account.01.carts.php
--- a/resources/sql/autopatches/20190815.account.01.carts.php
+++ b/resources/sql/autopatches/20190815.account.01.carts.php
@@ -1,10 +1 @@
-addEdge($cart->getAccountPHID(), $edge_type, $cart->getMerchantPHID())
- ->save();
-}
+/* This file is intentionally left empty, see T15726 */
diff --git a/resources/sql/autopatches/20190815.account.02.subscriptions.php b/resources/sql/autopatches/20190815.account.02.subscriptions.php
--- a/resources/sql/autopatches/20190815.account.02.subscriptions.php
+++ b/resources/sql/autopatches/20190815.account.02.subscriptions.php
@@ -1,10 +1 @@
-addEdge($sub->getAccountPHID(), $edge_type, $sub->getMerchantPHID())
- ->save();
-}
+/* This file is intentionally left empty, see T15726 */
diff --git a/resources/sql/autopatches/20190816.payment.01.xaction.sql b/resources/sql/autopatches/20190816.payment.01.xaction.sql
--- a/resources/sql/autopatches/20190816.payment.01.xaction.sql
+++ b/resources/sql/autopatches/20190816.payment.01.xaction.sql
@@ -1,19 +1 @@
-CREATE TABLE {$NAMESPACE}_phortune.phortune_paymentmethodtransaction (
- id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
- phid VARBINARY(64) NOT NULL,
- authorPHID VARBINARY(64) NOT NULL,
- objectPHID VARBINARY(64) NOT NULL,
- viewPolicy VARBINARY(64) NOT NULL,
- editPolicy VARBINARY(64) NOT NULL,
- commentPHID VARBINARY(64) DEFAULT NULL,
- commentVersion INT UNSIGNED NOT NULL,
- transactionType VARCHAR(32) NOT NULL,
- oldValue LONGTEXT NOT NULL,
- newValue LONGTEXT NOT NULL,
- contentSource LONGTEXT NOT NULL,
- metadata LONGTEXT NOT NULL,
- dateCreated INT UNSIGNED NOT NULL,
- dateModified INT UNSIGNED NOT NULL,
- UNIQUE KEY `key_phid` (`phid`),
- KEY `key_object` (`objectPHID`)
-) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE {$COLLATE_TEXT};
+/* This file is intentionally left empty, see T15726 */
diff --git a/resources/sql/autopatches/20190816.subscription.01.xaction.sql b/resources/sql/autopatches/20190816.subscription.01.xaction.sql
--- a/resources/sql/autopatches/20190816.subscription.01.xaction.sql
+++ b/resources/sql/autopatches/20190816.subscription.01.xaction.sql
@@ -1,19 +1 @@
-CREATE TABLE {$NAMESPACE}_phortune.phortune_subscriptiontransaction (
- id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
- phid VARBINARY(64) NOT NULL,
- authorPHID VARBINARY(64) NOT NULL,
- objectPHID VARBINARY(64) NOT NULL,
- viewPolicy VARBINARY(64) NOT NULL,
- editPolicy VARBINARY(64) NOT NULL,
- commentPHID VARBINARY(64) DEFAULT NULL,
- commentVersion INT UNSIGNED NOT NULL,
- transactionType VARCHAR(32) NOT NULL,
- oldValue LONGTEXT NOT NULL,
- newValue LONGTEXT NOT NULL,
- contentSource LONGTEXT NOT NULL,
- metadata LONGTEXT NOT NULL,
- dateCreated INT UNSIGNED NOT NULL,
- dateModified INT UNSIGNED NOT NULL,
- UNIQUE KEY `key_phid` (`phid`),
- KEY `key_object` (`objectPHID`)
-) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE {$COLLATE_TEXT};
+/* This file is intentionally left empty, see T15726 */
diff --git a/resources/sql/autopatches/20190822.merchant.01.view.sql b/resources/sql/autopatches/20190822.merchant.01.view.sql
--- a/resources/sql/autopatches/20190822.merchant.01.view.sql
+++ b/resources/sql/autopatches/20190822.merchant.01.view.sql
@@ -1,2 +1 @@
-ALTER TABLE {$NAMESPACE}_phortune.phortune_merchant
- DROP viewPolicy;
+/* This file is intentionally left empty, see T15726 */
diff --git a/resources/sql/autopatches/20210316.almanac.15.intiative-mailkey.php b/resources/sql/autopatches/20210316.almanac.15.intiative-mailkey.php
--- a/resources/sql/autopatches/20210316.almanac.15.intiative-mailkey.php
+++ b/resources/sql/autopatches/20210316.almanac.15.intiative-mailkey.php
@@ -1,28 +1 @@
-establishConnection('w');
-
-$properties_table = new PhabricatorMetaMTAMailProperties();
-$conn = $properties_table->establishConnection('w');
-
-$iterator = new LiskRawMigrationIterator(
- $initiative_conn,
- $initiative_table->getTableName());
-
-foreach ($iterator as $row) {
- queryfx(
- $conn,
- 'INSERT IGNORE INTO %R
- (objectPHID, mailProperties, dateCreated, dateModified)
- VALUES
- (%s, %s, %d, %d)',
- $properties_table,
- $row['phid'],
- phutil_json_encode(
- array(
- 'mailKey' => $row['mailKey'],
- )),
- PhabricatorTime::getNow(),
- PhabricatorTime::getNow());
-}
+/* This file is intentionally left empty, see T15726 */
diff --git a/resources/sql/autopatches/20210316.almanac.16.initiative-dropmailkey.sql b/resources/sql/autopatches/20210316.almanac.16.initiative-dropmailkey.sql
--- a/resources/sql/autopatches/20210316.almanac.16.initiative-dropmailkey.sql
+++ b/resources/sql/autopatches/20210316.almanac.16.initiative-dropmailkey.sql
@@ -1,2 +1 @@
-ALTER TABLE {$NAMESPACE}_fund.fund_initiative
- DROP mailKey;
+/* This file is intentionally left empty, see T15726 */
diff --git a/resources/sql/patches/20130322.phortune.sql b/resources/sql/patches/20130322.phortune.sql
--- a/resources/sql/patches/20130322.phortune.sql
+++ b/resources/sql/patches/20130322.phortune.sql
@@ -1,45 +1 @@
-CREATE TABLE {$NAMESPACE}_phortune.phortune_account (
- id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
- phid VARCHAR(64) NOT NULL COLLATE utf8_bin,
- name VARCHAR(255) NOT NULL,
- balanceInCents BIGINT NOT NULL,
- dateCreated INT UNSIGNED NOT NULL,
- dateModified INT UNSIGNED NOT NULL,
- UNIQUE KEY `key_phid` (phid)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-
-CREATE TABLE {$NAMESPACE}_phortune.phortune_accounttransaction (
- id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
- phid VARCHAR(64) NOT NULL COLLATE utf8_bin,
- authorPHID VARCHAR(64) NOT NULL COLLATE utf8_bin,
- objectPHID VARCHAR(64) NOT NULL COLLATE utf8_bin,
- viewPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin,
- editPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin,
- commentPHID VARCHAR(64) COLLATE utf8_bin,
- commentVersion INT UNSIGNED NOT NULL,
- transactionType VARCHAR(32) NOT NULL COLLATE utf8_bin,
- oldValue LONGTEXT NOT NULL COLLATE utf8_bin,
- newValue LONGTEXT NOT NULL COLLATE utf8_bin,
- contentSource LONGTEXT NOT NULL COLLATE utf8_bin,
- metadata LONGTEXT NOT NULL COLLATE utf8_bin,
- dateCreated INT UNSIGNED NOT NULL,
- dateModified INT UNSIGNED NOT NULL,
- UNIQUE KEY `key_phid` (phid),
- KEY `key_object` (objectPHID)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-
-CREATE TABLE {$NAMESPACE}_phortune.edge (
- src VARCHAR(64) NOT NULL COLLATE utf8_bin,
- type INT UNSIGNED NOT NULL COLLATE utf8_bin,
- dst VARCHAR(64) NOT NULL COLLATE utf8_bin,
- dateCreated INT UNSIGNED NOT NULL,
- seq INT UNSIGNED NOT NULL,
- dataID INT UNSIGNED,
- PRIMARY KEY (src, type, dst),
- KEY (src, type, dateCreated, seq)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-
-CREATE TABLE {$NAMESPACE}_phortune.edgedata (
- id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
- data LONGTEXT NOT NULL COLLATE utf8_bin
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+/* This file is intentionally left empty, see T15726 */
diff --git a/resources/sql/patches/20130323.phortunepayment.sql b/resources/sql/patches/20130323.phortunepayment.sql
--- a/resources/sql/patches/20130323.phortunepayment.sql
+++ b/resources/sql/patches/20130323.phortunepayment.sql
@@ -1,14 +1 @@
-CREATE TABLE {$NAMESPACE}_phortune.phortune_paymentmethod (
- id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
- phid VARCHAR(64) NOT NULL COLLATE utf8_bin,
- name VARCHAR(255) NOT NULL,
- status VARCHAR(64) NOT NULL COLLATE utf8_bin,
- accountPHID VARCHAR(64) NOT NULL COLLATE utf8_bin,
- authorPHID VARCHAR(64) NOT NULL COLLATE utf8_bin,
- expiresEpoch INT UNSIGNED,
- metadata LONGTEXT NOT NULL COLLATE utf8_bin,
- dateCreated INT UNSIGNED NOT NULL,
- dateModified INT UNSIGNED NOT NULL,
- UNIQUE KEY `key_phid` (phid),
- KEY `key_account` (accountPHID, status)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+/* This file is intentionally left empty, see T15726 */
diff --git a/resources/sql/patches/20130324.phortuneproduct.sql b/resources/sql/patches/20130324.phortuneproduct.sql
--- a/resources/sql/patches/20130324.phortuneproduct.sql
+++ b/resources/sql/patches/20130324.phortuneproduct.sql
@@ -1,35 +1 @@
-CREATE TABLE {$NAMESPACE}_phortune.phortune_product (
- id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
- phid VARCHAR(64) NOT NULL COLLATE utf8_bin,
- productName VARCHAR(255) NOT NULL,
- productType VARCHAR(64) NOT NULL COLLATE utf8_bin,
- status VARCHAR(64) NOT NULL COLLATE utf8_bin,
- priceInCents BIGINT NOT NULL,
- billingIntervalInMonths INT UNSIGNED,
- trialPeriodInDays INT UNSIGNED,
- metadata LONGTEXT NOT NULL COLLATE utf8_bin,
- dateCreated INT UNSIGNED NOT NULL,
- dateModified INT UNSIGNED NOT NULL,
- UNIQUE KEY `key_phid` (phid),
- KEY `key_status` (status)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-
-CREATE TABLE {$NAMESPACE}_phortune.phortune_producttransaction (
- id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
- phid VARCHAR(64) NOT NULL COLLATE utf8_bin,
- authorPHID VARCHAR(64) NOT NULL COLLATE utf8_bin,
- objectPHID VARCHAR(64) NOT NULL COLLATE utf8_bin,
- viewPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin,
- editPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin,
- commentPHID VARCHAR(64) COLLATE utf8_bin,
- commentVersion INT UNSIGNED NOT NULL,
- transactionType VARCHAR(32) NOT NULL COLLATE utf8_bin,
- oldValue LONGTEXT NOT NULL COLLATE utf8_bin,
- newValue LONGTEXT NOT NULL COLLATE utf8_bin,
- contentSource LONGTEXT NOT NULL COLLATE utf8_bin,
- metadata LONGTEXT NOT NULL COLLATE utf8_bin,
- dateCreated INT UNSIGNED NOT NULL,
- dateModified INT UNSIGNED NOT NULL,
- UNIQUE KEY `key_phid` (phid),
- KEY `key_object` (objectPHID)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+/* This file is intentionally left empty, see T15726 */
diff --git a/resources/sql/patches/20130423.phortunepaymentrevised.sql b/resources/sql/patches/20130423.phortunepaymentrevised.sql
--- a/resources/sql/patches/20130423.phortunepaymentrevised.sql
+++ b/resources/sql/patches/20130423.phortunepaymentrevised.sql
@@ -1,19 +1 @@
-TRUNCATE TABLE {$NAMESPACE}_phortune.phortune_paymentmethod;
-
-ALTER TABLE {$NAMESPACE}_phortune.phortune_paymentmethod
- ADD brand VARCHAR(64) NOT NULL;
-
-ALTER TABLE {$NAMESPACE}_phortune.phortune_paymentmethod
- ADD expires VARCHAR(16) NOT NULL;
-
-ALTER TABLE {$NAMESPACE}_phortune.phortune_paymentmethod
- ADD providerType VARCHAR(16) NOT NULL;
-
-ALTER TABLE {$NAMESPACE}_phortune.phortune_paymentmethod
- ADD providerDomain VARCHAR(64) NOT NULL;
-
-ALTER TABLE {$NAMESPACE}_phortune.phortune_paymentmethod
- ADD lastFourDigits VARCHAR(16) NOT NULL;
-
-ALTER TABLE {$NAMESPACE}_phortune.phortune_paymentmethod
- DROP expiresEpoch;
+/* This file is intentionally left empty, see T15726 */
diff --git a/resources/sql/quickstart.sql b/resources/sql/quickstart.sql
--- a/resources/sql/quickstart.sql
+++ b/resources/sql/quickstart.sql
@@ -3724,234 +3724,6 @@
KEY `objectPHID` (`objectPHID`)
) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT};
-CREATE DATABASE /*!32312 IF NOT EXISTS*/ `{$NAMESPACE}_fund` /*!40100 DEFAULT CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} */;
-
-USE `{$NAMESPACE}_fund`;
-
- SET NAMES utf8 ;
-
- SET character_set_client = {$CHARSET} ;
-
-CREATE TABLE `edge` (
- `src` varbinary(64) NOT NULL,
- `type` int(10) unsigned NOT NULL,
- `dst` varbinary(64) NOT NULL,
- `dateCreated` int(10) unsigned NOT NULL,
- `seq` int(10) unsigned NOT NULL,
- `dataID` int(10) unsigned DEFAULT NULL,
- PRIMARY KEY (`src`,`type`,`dst`),
- UNIQUE KEY `key_dst` (`dst`,`type`,`src`),
- KEY `src` (`src`,`type`,`dateCreated`,`seq`)
-) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT};
-
-USE `{$NAMESPACE}_fund`;
-
- SET NAMES utf8 ;
-
- SET character_set_client = {$CHARSET} ;
-
-CREATE TABLE `edgedata` (
- `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
- `data` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL,
- PRIMARY KEY (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT};
-
-USE `{$NAMESPACE}_fund`;
-
- SET NAMES utf8 ;
-
- SET character_set_client = {$CHARSET} ;
-
-CREATE TABLE `fund_backer` (
- `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
- `phid` varbinary(64) NOT NULL,
- `initiativePHID` varbinary(64) NOT NULL,
- `backerPHID` varbinary(64) NOT NULL,
- `status` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL,
- `amountAsCurrency` varchar(64) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL,
- `properties` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL,
- `dateCreated` int(10) unsigned NOT NULL,
- `dateModified` int(10) unsigned NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `key_phid` (`phid`),
- KEY `key_initiative` (`initiativePHID`),
- KEY `key_backer` (`backerPHID`)
-) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT};
-
-USE `{$NAMESPACE}_fund`;
-
- SET NAMES utf8 ;
-
- SET character_set_client = {$CHARSET} ;
-
-CREATE TABLE `fund_backertransaction` (
- `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
- `phid` varbinary(64) NOT NULL,
- `authorPHID` varbinary(64) NOT NULL,
- `objectPHID` varbinary(64) NOT NULL,
- `viewPolicy` varbinary(64) NOT NULL,
- `editPolicy` varbinary(64) NOT NULL,
- `commentPHID` varbinary(64) DEFAULT NULL,
- `commentVersion` int(10) unsigned NOT NULL,
- `transactionType` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL,
- `oldValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL,
- `newValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL,
- `contentSource` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL,
- `metadata` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL,
- `dateCreated` int(10) unsigned NOT NULL,
- `dateModified` int(10) unsigned NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `key_phid` (`phid`),
- KEY `key_object` (`objectPHID`)
-) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT};
-
-USE `{$NAMESPACE}_fund`;
-
- SET NAMES utf8 ;
-
- SET character_set_client = {$CHARSET} ;
-
-CREATE TABLE `fund_initiative` (
- `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
- `phid` varbinary(64) NOT NULL,
- `name` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL,
- `ownerPHID` varbinary(64) NOT NULL,
- `description` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL,
- `viewPolicy` varbinary(64) NOT NULL,
- `editPolicy` varbinary(64) NOT NULL,
- `status` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL,
- `dateCreated` int(10) unsigned NOT NULL,
- `dateModified` int(10) unsigned NOT NULL,
- `merchantPHID` varbinary(64) DEFAULT NULL,
- `risks` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL,
- `totalAsCurrency` varchar(64) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL,
- `mailKey` binary(20) NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `key_phid` (`phid`),
- KEY `key_status` (`status`),
- KEY `key_owner` (`ownerPHID`)
-) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT};
-
-USE `{$NAMESPACE}_fund`;
-
- SET NAMES utf8 ;
-
- SET character_set_client = {$CHARSET} ;
-
-CREATE TABLE `fund_initiative_fdocument` (
- `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
- `objectPHID` varbinary(64) NOT NULL,
- `isClosed` tinyint(1) NOT NULL,
- `authorPHID` varbinary(64) DEFAULT NULL,
- `ownerPHID` varbinary(64) DEFAULT NULL,
- `epochCreated` int(10) unsigned NOT NULL,
- `epochModified` int(10) unsigned NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `key_object` (`objectPHID`),
- KEY `key_author` (`authorPHID`),
- KEY `key_owner` (`ownerPHID`),
- KEY `key_created` (`epochCreated`),
- KEY `key_modified` (`epochModified`)
-) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT};
-
-USE `{$NAMESPACE}_fund`;
-
- SET NAMES utf8 ;
-
- SET character_set_client = {$CHARSET} ;
-
-CREATE TABLE `fund_initiative_ffield` (
- `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
- `documentID` int(10) unsigned NOT NULL,
- `fieldKey` varchar(4) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL,
- `rawCorpus` longtext CHARACTER SET {$CHARSET_SORT} COLLATE {$COLLATE_SORT} NOT NULL,
- `termCorpus` longtext CHARACTER SET {$CHARSET_SORT} COLLATE {$COLLATE_SORT} NOT NULL,
- `normalCorpus` longtext CHARACTER SET {$CHARSET_SORT} COLLATE {$COLLATE_SORT} NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `key_documentfield` (`documentID`,`fieldKey`)
-) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT};
-
-USE `{$NAMESPACE}_fund`;
-
- SET NAMES utf8 ;
-
- SET character_set_client = {$CHARSET} ;
-
-CREATE TABLE `fund_initiative_fngrams` (
- `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
- `documentID` int(10) unsigned NOT NULL,
- `ngram` char(3) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL,
- PRIMARY KEY (`id`),
- KEY `key_ngram` (`ngram`,`documentID`),
- KEY `key_object` (`documentID`)
-) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT};
-
-USE `{$NAMESPACE}_fund`;
-
- SET NAMES utf8 ;
-
- SET character_set_client = {$CHARSET} ;
-
-CREATE TABLE `fund_initiative_fngrams_common` (
- `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
- `ngram` char(3) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL,
- `needsCollection` tinyint(1) NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `key_ngram` (`ngram`),
- KEY `key_collect` (`needsCollection`)
-) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT};
-
-USE `{$NAMESPACE}_fund`;
-
- SET NAMES utf8 ;
-
- SET character_set_client = {$CHARSET} ;
-
-CREATE TABLE `fund_initiativetransaction` (
- `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
- `phid` varbinary(64) NOT NULL,
- `authorPHID` varbinary(64) NOT NULL,
- `objectPHID` varbinary(64) NOT NULL,
- `viewPolicy` varbinary(64) NOT NULL,
- `editPolicy` varbinary(64) NOT NULL,
- `commentPHID` varbinary(64) DEFAULT NULL,
- `commentVersion` int(10) unsigned NOT NULL,
- `transactionType` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL,
- `oldValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL,
- `newValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL,
- `contentSource` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL,
- `metadata` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL,
- `dateCreated` int(10) unsigned NOT NULL,
- `dateModified` int(10) unsigned NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `key_phid` (`phid`),
- KEY `key_object` (`objectPHID`)
-) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT};
-
-USE `{$NAMESPACE}_fund`;
-
- SET NAMES utf8 ;
-
- SET character_set_client = {$CHARSET} ;
-
-CREATE TABLE `fund_initiativetransaction_comment` (
- `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
- `phid` varbinary(64) NOT NULL,
- `transactionPHID` varbinary(64) DEFAULT NULL,
- `authorPHID` varbinary(64) NOT NULL,
- `viewPolicy` varbinary(64) NOT NULL,
- `editPolicy` varbinary(64) NOT NULL,
- `commentVersion` int(10) unsigned NOT NULL,
- `content` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL,
- `contentSource` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL,
- `isDeleted` tinyint(1) NOT NULL,
- `dateCreated` int(10) unsigned NOT NULL,
- `dateModified` int(10) unsigned NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `key_phid` (`phid`),
- UNIQUE KEY `key_version` (`transactionPHID`,`commentVersion`)
-) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT};
-
CREATE DATABASE /*!32312 IF NOT EXISTS*/ `{$NAMESPACE}_harbormaster` /*!40100 DEFAULT CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} */;
USE `{$NAMESPACE}_harbormaster`;
@@ -5132,7 +4904,7 @@
PRIMARY KEY (`patch`)
) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT};
-INSERT INTO `patch_status` VALUES ('phabricator:000.project.sql',1556231684,NULL),('phabricator:0000.legacy.sql',1556231684,NULL),('phabricator:001.maniphest_projects.sql',1556231684,NULL),('phabricator:002.oauth.sql',1556231684,NULL),('phabricator:003.more_oauth.sql',1556231684,NULL),('phabricator:004.daemonrepos.sql',1556231684,NULL),('phabricator:005.workers.sql',1556231684,NULL),('phabricator:006.repository.sql',1556231684,NULL),('phabricator:007.daemonlog.sql',1556231684,NULL),('phabricator:008.repoopt.sql',1556231684,NULL),('phabricator:009.repo_summary.sql',1556231684,NULL),('phabricator:010.herald.sql',1556231684,NULL),('phabricator:011.badcommit.sql',1556231684,NULL),('phabricator:012.dropphidtype.sql',1556231684,NULL),('phabricator:013.commitdetail.sql',1556231684,NULL),('phabricator:014.shortcuts.sql',1556231684,NULL),('phabricator:015.preferences.sql',1556231684,NULL),('phabricator:016.userrealnameindex.sql',1556231684,NULL),('phabricator:017.sessionkeys.sql',1556231684,NULL),('phabricator:018.owners.sql',1556231684,NULL),('phabricator:019.arcprojects.sql',1556231684,NULL),('phabricator:020.pathcapital.sql',1556231684,NULL),('phabricator:021.xhpastview.sql',1556231684,NULL),('phabricator:022.differentialcommit.sql',1556231684,NULL),('phabricator:023.dxkeys.sql',1556231685,NULL),('phabricator:024.mlistkeys.sql',1556231685,NULL),('phabricator:025.commentopt.sql',1556231685,NULL),('phabricator:026.diffpropkey.sql',1556231685,NULL),('phabricator:027.metamtakeys.sql',1556231685,NULL),('phabricator:028.systemagent.sql',1556231685,NULL),('phabricator:029.cursors.sql',1556231685,NULL),('phabricator:030.imagemacro.sql',1556231685,NULL),('phabricator:031.workerrace.sql',1556231685,NULL),('phabricator:032.viewtime.sql',1556231685,NULL),('phabricator:033.privtest.sql',1556231685,NULL),('phabricator:034.savedheader.sql',1556231685,NULL),('phabricator:035.proxyimage.sql',1556231685,NULL),('phabricator:036.mailkey.sql',1556231685,NULL),('phabricator:037.setuptest.sql',1556231685,NULL),('phabricator:038.admin.sql',1556231685,NULL),('phabricator:039.userlog.sql',1556231685,NULL),('phabricator:040.transform.sql',1556231685,NULL),('phabricator:041.heraldrepetition.sql',1556231685,NULL),('phabricator:042.commentmetadata.sql',1556231685,NULL),('phabricator:043.pastebin.sql',1556231685,NULL),('phabricator:044.countdown.sql',1556231685,NULL),('phabricator:045.timezone.sql',1556231685,NULL),('phabricator:046.conduittoken.sql',1556231685,NULL),('phabricator:047.projectstatus.sql',1556231685,NULL),('phabricator:048.relationshipkeys.sql',1556231685,NULL),('phabricator:049.projectowner.sql',1556231685,NULL),('phabricator:050.taskdenormal.sql',1556231685,NULL),('phabricator:051.projectfilter.sql',1556231685,NULL),('phabricator:052.pastelanguage.sql',1556231685,NULL),('phabricator:053.feed.sql',1556231685,NULL),('phabricator:054.subscribers.sql',1556231685,NULL),('phabricator:055.add_author_to_files.sql',1556231685,NULL),('phabricator:056.slowvote.sql',1556231685,NULL),('phabricator:057.parsecache.sql',1556231685,NULL),('phabricator:058.missingkeys.sql',1556231685,NULL),('phabricator:059.engines.php',1556231685,NULL),('phabricator:060.phriction.sql',1556231685,NULL),('phabricator:061.phrictioncontent.sql',1556231685,NULL),('phabricator:062.phrictionmenu.sql',1556231685,NULL),('phabricator:063.pasteforks.sql',1556231685,NULL),('phabricator:064.subprojects.sql',1556231685,NULL),('phabricator:065.sshkeys.sql',1556231685,NULL),('phabricator:066.phrictioncontent.sql',1556231685,NULL),('phabricator:067.preferences.sql',1556231685,NULL),('phabricator:068.maniphestauxiliarystorage.sql',1556231685,NULL),('phabricator:069.heraldxscript.sql',1556231685,NULL),('phabricator:070.differentialaux.sql',1556231685,NULL),('phabricator:071.contentsource.sql',1556231685,NULL),('phabricator:072.blamerevert.sql',1556231685,NULL),('phabricator:073.reposymbols.sql',1556231685,NULL),('phabricator:074.affectedpath.sql',1556231685,NULL),('phabricator:075.revisionhash.sql',1556231685,NULL),('phabricator:076.indexedlanguages.sql',1556231685,NULL),('phabricator:077.originalemail.sql',1556231685,NULL),('phabricator:078.nametoken.sql',1556231685,NULL),('phabricator:079.nametokenindex.php',1556231685,NULL),('phabricator:080.filekeys.sql',1556231685,NULL),('phabricator:081.filekeys.php',1556231685,NULL),('phabricator:082.xactionkey.sql',1556231685,NULL),('phabricator:083.dxviewtime.sql',1556231685,NULL),('phabricator:084.pasteauthorkey.sql',1556231685,NULL),('phabricator:085.packagecommitrelationship.sql',1556231685,NULL),('phabricator:086.formeraffil.sql',1556231685,NULL),('phabricator:087.phrictiondelete.sql',1556231685,NULL),('phabricator:088.audit.sql',1556231685,NULL),('phabricator:089.projectwiki.sql',1556231685,NULL),('phabricator:090.forceuniqueprojectnames.php',1556231685,NULL),('phabricator:091.uniqueslugkey.sql',1556231686,NULL),('phabricator:092.dropgithubnotification.sql',1556231686,NULL),('phabricator:093.gitremotes.php',1556231686,NULL),('phabricator:094.phrictioncolumn.sql',1556231686,NULL),('phabricator:095.directory.sql',1556231686,NULL),('phabricator:096.filename.sql',1556231686,NULL),('phabricator:097.heraldruletypes.sql',1556231686,NULL),('phabricator:098.heraldruletypemigration.php',1556231686,NULL),('phabricator:099.drydock.sql',1556231686,NULL),('phabricator:100.projectxaction.sql',1556231686,NULL),('phabricator:101.heraldruleapplied.sql',1556231686,NULL),('phabricator:102.heraldcleanup.php',1556231686,NULL),('phabricator:103.heraldedithistory.sql',1556231686,NULL),('phabricator:104.searchkey.sql',1556231686,NULL),('phabricator:105.mimetype.sql',1556231686,NULL),('phabricator:106.chatlog.sql',1556231686,NULL),('phabricator:107.oauthserver.sql',1556231686,NULL),('phabricator:108.oauthscope.sql',1556231686,NULL),('phabricator:109.oauthclientphidkey.sql',1556231686,NULL),('phabricator:110.commitaudit.sql',1556231686,NULL),('phabricator:111.commitauditmigration.php',1556231686,NULL),('phabricator:112.oauthaccesscoderedirecturi.sql',1556231686,NULL),('phabricator:113.lastreviewer.sql',1556231686,NULL),('phabricator:114.auditrequest.sql',1556231686,NULL),('phabricator:115.prepareutf8.sql',1556231686,NULL),('phabricator:116.utf8-backup-first-expect-wait.sql',1556231688,NULL),('phabricator:117.repositorydescription.php',1556231688,NULL),('phabricator:118.auditinline.sql',1556231688,NULL),('phabricator:119.filehash.sql',1556231688,NULL),('phabricator:120.noop.sql',1556231688,NULL),('phabricator:121.drydocklog.sql',1556231688,NULL),('phabricator:122.flag.sql',1556231688,NULL),('phabricator:123.heraldrulelog.sql',1556231688,NULL),('phabricator:124.subpriority.sql',1556231688,NULL),('phabricator:125.ipv6.sql',1556231688,NULL),('phabricator:126.edges.sql',1556231688,NULL),('phabricator:127.userkeybody.sql',1556231688,NULL),('phabricator:128.phabricatorcom.sql',1556231688,NULL),('phabricator:129.savedquery.sql',1556231688,NULL),('phabricator:130.denormalrevisionquery.sql',1556231688,NULL),('phabricator:131.migraterevisionquery.php',1556231688,NULL),('phabricator:132.phame.sql',1556231688,NULL),('phabricator:133.imagemacro.sql',1556231688,NULL),('phabricator:134.emptysearch.sql',1556231688,NULL),('phabricator:135.datecommitted.sql',1556231688,NULL),('phabricator:136.sex.sql',1556231688,NULL),('phabricator:137.auditmetadata.sql',1556231688,NULL),('phabricator:138.notification.sql',1556231688,NULL),('phabricator:20121209.pholioxactions.sql',1556231689,NULL),('phabricator:20121209.xmacroadd.sql',1556231689,NULL),('phabricator:20121209.xmacromigrate.php',1556231689,NULL),('phabricator:20121209.xmacromigratekey.sql',1556231689,NULL),('phabricator:20121220.generalcache.sql',1556231689,NULL),('phabricator:20121226.config.sql',1556231689,NULL),('phabricator:20130101.confxaction.sql',1556231689,NULL),('phabricator:20130102.metamtareceivedmailmessageidhash.sql',1556231689,NULL),('phabricator:20130103.filemetadata.sql',1556231689,NULL),('phabricator:20130111.conpherence.sql',1556231689,NULL),('phabricator:20130127.altheraldtranscript.sql',1556231689,NULL),('phabricator:20130131.conpherencepics.sql',1556231689,NULL),('phabricator:20130201.revisionunsubscribed.php',1556231689,NULL),('phabricator:20130201.revisionunsubscribed.sql',1556231689,NULL),('phabricator:20130214.chatlogchannel.sql',1556231689,NULL),('phabricator:20130214.chatlogchannelid.sql',1556231689,NULL),('phabricator:20130214.token.sql',1556231689,NULL),('phabricator:20130215.phabricatorfileaddttl.sql',1556231689,NULL),('phabricator:20130217.cachettl.sql',1556231689,NULL),('phabricator:20130218.longdaemon.sql',1556231689,NULL),('phabricator:20130218.updatechannelid.php',1556231689,NULL),('phabricator:20130219.commitsummary.sql',1556231689,NULL),('phabricator:20130219.commitsummarymig.php',1556231689,NULL),('phabricator:20130222.dropchannel.sql',1556231689,NULL),('phabricator:20130226.commitkey.sql',1556231689,NULL),('phabricator:20130304.lintauthor.sql',1556231689,NULL),('phabricator:20130310.xactionmeta.sql',1556231689,NULL),('phabricator:20130317.phrictionedge.sql',1556231689,NULL),('phabricator:20130319.conpherence.sql',1556231689,NULL),('phabricator:20130319.phabricatorfileexplicitupload.sql',1556231689,NULL),('phabricator:20130320.phlux.sql',1556231689,NULL),('phabricator:20130321.token.sql',1556231689,NULL),('phabricator:20130322.phortune.sql',1556231689,NULL),('phabricator:20130323.phortunepayment.sql',1556231689,NULL),('phabricator:20130324.phortuneproduct.sql',1556231689,NULL),('phabricator:20130330.phrequent.sql',1556231689,NULL),('phabricator:20130403.conpherencecache.sql',1556231689,NULL),('phabricator:20130403.conpherencecachemig.php',1556231689,NULL),('phabricator:20130409.commitdrev.php',1556231689,NULL),('phabricator:20130417.externalaccount.sql',1556231689,NULL),('phabricator:20130423.conpherenceindices.sql',1556231690,NULL),('phabricator:20130423.phortunepaymentrevised.sql',1556231690,NULL),('phabricator:20130423.updateexternalaccount.sql',1556231689,NULL),('phabricator:20130426.search_savedquery.sql',1556231690,NULL),('phabricator:20130502.countdownrevamp1.sql',1556231690,NULL),('phabricator:20130502.countdownrevamp2.php',1556231690,NULL),('phabricator:20130502.countdownrevamp3.sql',1556231690,NULL),('phabricator:20130507.releephrqmailkey.sql',1556231690,NULL),('phabricator:20130507.releephrqmailkeypop.php',1556231690,NULL),('phabricator:20130507.releephrqsimplifycols.sql',1556231690,NULL),('phabricator:20130508.releephtransactions.sql',1556231690,NULL),('phabricator:20130508.releephtransactionsmig.php',1556231690,NULL),('phabricator:20130508.search_namedquery.sql',1556231690,NULL),('phabricator:20130513.receviedmailstatus.sql',1556231690,NULL),('phabricator:20130519.diviner.sql',1556231690,NULL),('phabricator:20130521.dropconphimages.sql',1556231690,NULL),('phabricator:20130523.maniphest_owners.sql',1556231690,NULL),('phabricator:20130524.repoxactions.sql',1556231690,NULL),('phabricator:20130529.macroauthor.sql',1556231690,NULL),('phabricator:20130529.macroauthormig.php',1556231690,NULL),('phabricator:20130530.macrodatekey.sql',1556231690,NULL),('phabricator:20130530.pastekeys.sql',1556231690,NULL),('phabricator:20130530.sessionhash.php',1556231690,NULL),('phabricator:20130531.filekeys.sql',1556231690,NULL),('phabricator:20130602.morediviner.sql',1556231690,NULL),('phabricator:20130602.namedqueries.sql',1556231690,NULL),('phabricator:20130606.userxactions.sql',1556231690,NULL),('phabricator:20130607.xaccount.sql',1556231690,NULL),('phabricator:20130611.migrateoauth.php',1556231690,NULL),('phabricator:20130611.nukeldap.php',1556231690,NULL),('phabricator:20130613.authdb.sql',1556231690,NULL),('phabricator:20130619.authconf.php',1556231690,NULL),('phabricator:20130620.diffxactions.sql',1556231690,NULL),('phabricator:20130621.diffcommentphid.sql',1556231690,NULL),('phabricator:20130621.diffcommentphidmig.php',1556231690,NULL),('phabricator:20130621.diffcommentunphid.sql',1556231690,NULL),('phabricator:20130622.doorkeeper.sql',1556231690,NULL),('phabricator:20130628.legalpadv0.sql',1556231690,NULL),('phabricator:20130701.conduitlog.sql',1556231690,NULL),('phabricator:20130703.legalpaddocdenorm.php',1556231690,NULL),('phabricator:20130703.legalpaddocdenorm.sql',1556231690,NULL),('phabricator:20130709.droptimeline.sql',1556231690,NULL),('phabricator:20130709.legalpadsignature.sql',1556231690,NULL),('phabricator:20130711.pholioimageobsolete.php',1556231690,NULL),('phabricator:20130711.pholioimageobsolete.sql',1556231690,NULL),('phabricator:20130711.pholioimageobsolete2.sql',1556231690,NULL),('phabricator:20130711.trimrealnames.php',1556231690,NULL),('phabricator:20130714.votexactions.sql',1556231690,NULL),('phabricator:20130715.votecomments.php',1556231690,NULL),('phabricator:20130715.voteedges.sql',1556231690,NULL),('phabricator:20130716.archivememberlessprojects.php',1556231690,NULL),('phabricator:20130722.pholioreplace.sql',1556231690,NULL),('phabricator:20130723.taskstarttime.sql',1556231690,NULL),('phabricator:20130726.ponderxactions.sql',1556231690,NULL),('phabricator:20130727.ponderquestionstatus.sql',1556231690,NULL),('phabricator:20130728.ponderunique.php',1556231690,NULL),('phabricator:20130728.ponderuniquekey.sql',1556231690,NULL),('phabricator:20130728.ponderxcomment.php',1556231690,NULL),('phabricator:20130731.releephcutpointidentifier.sql',1556231690,NULL),('phabricator:20130731.releephproject.sql',1556231690,NULL),('phabricator:20130731.releephrepoid.sql',1556231690,NULL),('phabricator:20130801.pastexactions.php',1556231690,NULL),('phabricator:20130801.pastexactions.sql',1556231690,NULL),('phabricator:20130802.heraldphid.sql',1556231690,NULL),('phabricator:20130802.heraldphids.php',1556231690,NULL),('phabricator:20130802.heraldphidukey.sql',1556231690,NULL),('phabricator:20130802.heraldxactions.sql',1556231690,NULL),('phabricator:20130805.pasteedges.sql',1556231690,NULL),('phabricator:20130805.pastemailkey.sql',1556231690,NULL),('phabricator:20130805.pastemailkeypop.php',1556231690,NULL),('phabricator:20130814.usercustom.sql',1556231690,NULL),('phabricator:20130820.file-mailkey-populate.php',1556231691,NULL),('phabricator:20130820.filemailkey.sql',1556231691,NULL),('phabricator:20130820.filexactions.sql',1556231691,NULL),('phabricator:20130820.releephxactions.sql',1556231690,NULL),('phabricator:20130826.divinernode.sql',1556231691,NULL),('phabricator:20130912.maniphest.1.touch.sql',1556231691,NULL),('phabricator:20130912.maniphest.2.created.sql',1556231691,NULL),('phabricator:20130912.maniphest.3.nameindex.sql',1556231691,NULL),('phabricator:20130912.maniphest.4.fillindex.php',1556231691,NULL),('phabricator:20130913.maniphest.1.migratesearch.php',1556231691,NULL),('phabricator:20130914.usercustom.sql',1556231691,NULL),('phabricator:20130915.maniphestcustom.sql',1556231691,NULL),('phabricator:20130915.maniphestmigrate.php',1556231691,NULL),('phabricator:20130915.maniphestqdrop.sql',1556231691,NULL),('phabricator:20130919.mfieldconf.php',1556231691,NULL),('phabricator:20130920.repokeyspolicy.sql',1556231691,NULL),('phabricator:20130921.mtransactions.sql',1556231691,NULL),('phabricator:20130921.xmigratemaniphest.php',1556231691,NULL),('phabricator:20130923.mrename.sql',1556231691,NULL),('phabricator:20130924.mdraftkey.sql',1556231691,NULL),('phabricator:20130925.mpolicy.sql',1556231691,NULL),('phabricator:20130925.xpolicy.sql',1556231691,NULL),('phabricator:20130926.dcustom.sql',1556231691,NULL),('phabricator:20130926.dinkeys.sql',1556231691,NULL),('phabricator:20130926.dinline.php',1556231691,NULL),('phabricator:20130927.audiomacro.sql',1556231691,NULL),('phabricator:20130929.filepolicy.sql',1556231691,NULL),('phabricator:20131004.dxedgekey.sql',1556231691,NULL),('phabricator:20131004.dxreviewers.php',1556231691,NULL),('phabricator:20131006.hdisable.sql',1556231691,NULL),('phabricator:20131010.pstorage.sql',1556231691,NULL),('phabricator:20131015.cpolicy.sql',1556231691,NULL),('phabricator:20131020.col1.sql',1556231691,NULL),('phabricator:20131020.harbormaster.sql',1556231691,NULL),('phabricator:20131020.pcustom.sql',1556231691,NULL),('phabricator:20131020.pxaction.sql',1556231691,NULL),('phabricator:20131020.pxactionmig.php',1556231691,NULL),('phabricator:20131025.repopush.sql',1556231691,NULL),('phabricator:20131026.commitstatus.sql',1556231691,NULL),('phabricator:20131030.repostatusmessage.sql',1556231691,NULL),('phabricator:20131031.vcspassword.sql',1556231691,NULL),('phabricator:20131105.buildstep.sql',1556231691,NULL),('phabricator:20131106.diffphid.1.col.sql',1556231691,NULL),('phabricator:20131106.diffphid.2.mig.php',1556231691,NULL),('phabricator:20131106.diffphid.3.key.sql',1556231691,NULL),('phabricator:20131106.nuance-v0.sql',1556231691,NULL),('phabricator:20131107.buildlog.sql',1556231691,NULL),('phabricator:20131112.userverified.1.col.sql',1556231691,NULL),('phabricator:20131112.userverified.2.mig.php',1556231691,NULL),('phabricator:20131118.ownerorder.php',1556231691,NULL),('phabricator:20131119.passphrase.sql',1556231691,NULL),('phabricator:20131120.nuancesourcetype.sql',1556231691,NULL),('phabricator:20131121.passphraseedge.sql',1556231691,NULL),('phabricator:20131121.repocredentials.1.col.sql',1556231691,NULL),('phabricator:20131121.repocredentials.2.mig.php',1556231691,NULL),('phabricator:20131122.repomirror.sql',1556231691,NULL),('phabricator:20131123.drydockblueprintpolicy.sql',1556231691,NULL),('phabricator:20131129.drydockresourceblueprint.sql',1556231691,NULL),('phabricator:20131204.pushlog.sql',1556231691,NULL),('phabricator:20131205.buildsteporder.sql',1556231691,NULL),('phabricator:20131205.buildstepordermig.php',1556231691,NULL),('phabricator:20131205.buildtargets.sql',1556231691,NULL),('phabricator:20131206.phragment.sql',1556231691,NULL),('phabricator:20131206.phragmentnull.sql',1556231691,NULL),('phabricator:20131208.phragmentsnapshot.sql',1556231691,NULL),('phabricator:20131211.phragmentedges.sql',1556231691,NULL),('phabricator:20131217.pushlogphid.1.col.sql',1556231691,NULL),('phabricator:20131217.pushlogphid.2.mig.php',1556231691,NULL),('phabricator:20131217.pushlogphid.3.key.sql',1556231692,NULL),('phabricator:20131219.pxdrop.sql',1556231692,NULL),('phabricator:20131224.harbormanual.sql',1556231692,NULL),('phabricator:20131227.heraldobject.sql',1556231692,NULL),('phabricator:20131231.dropshortcut.sql',1556231692,NULL),('phabricator:20131302.maniphestvalue.sql',1556231689,NULL),('phabricator:20140104.harbormastercmd.sql',1556231692,NULL),('phabricator:20140106.macromailkey.1.sql',1556231692,NULL),('phabricator:20140106.macromailkey.2.php',1556231692,NULL),('phabricator:20140108.ddbpname.1.sql',1556231692,NULL),('phabricator:20140108.ddbpname.2.php',1556231692,NULL),('phabricator:20140109.ddxactions.sql',1556231692,NULL),('phabricator:20140109.projectcolumnsdates.sql',1556231692,NULL),('phabricator:20140113.legalpadsig.1.sql',1556231692,NULL),('phabricator:20140113.legalpadsig.2.php',1556231692,NULL),('phabricator:20140115.auth.1.id.sql',1556231692,NULL),('phabricator:20140115.auth.2.expires.sql',1556231692,NULL),('phabricator:20140115.auth.3.unlimit.php',1556231692,NULL),('phabricator:20140115.legalpadsigkey.sql',1556231692,NULL),('phabricator:20140116.reporefcursor.sql',1556231692,NULL),('phabricator:20140126.diff.1.parentrevisionid.sql',1556231692,NULL),('phabricator:20140126.diff.2.repositoryphid.sql',1556231692,NULL),('phabricator:20140130.dash.1.board.sql',1556231692,NULL),('phabricator:20140130.dash.2.panel.sql',1556231692,NULL),('phabricator:20140130.dash.3.boardxaction.sql',1556231692,NULL),('phabricator:20140130.dash.4.panelxaction.sql',1556231692,NULL),('phabricator:20140130.mail.1.retry.sql',1556231692,NULL),('phabricator:20140130.mail.2.next.sql',1556231692,NULL),('phabricator:20140201.gc.1.mailsent.sql',1556231692,NULL),('phabricator:20140201.gc.2.mailreceived.sql',1556231692,NULL),('phabricator:20140205.cal.1.rename.sql',1556231692,NULL),('phabricator:20140205.cal.2.phid-col.sql',1556231692,NULL),('phabricator:20140205.cal.3.phid-mig.php',1556231692,NULL),('phabricator:20140205.cal.4.phid-key.sql',1556231692,NULL),('phabricator:20140210.herald.rule-condition-mig.php',1556231692,NULL),('phabricator:20140210.projcfield.1.blurb.php',1556231692,NULL),('phabricator:20140210.projcfield.2.piccol.sql',1556231692,NULL),('phabricator:20140210.projcfield.3.picmig.sql',1556231692,NULL),('phabricator:20140210.projcfield.4.memmig.sql',1556231692,NULL),('phabricator:20140210.projcfield.5.dropprofile.sql',1556231692,NULL),('phabricator:20140211.dx.1.nullablechangesetid.sql',1556231692,NULL),('phabricator:20140211.dx.2.migcommenttext.php',1556231692,NULL),('phabricator:20140211.dx.3.migsubscriptions.sql',1556231692,NULL),('phabricator:20140211.dx.999.drop.relationships.sql',1556231692,NULL),('phabricator:20140212.dx.1.armageddon.php',1556231692,NULL),('phabricator:20140214.clean.1.legacycommentid.sql',1556231692,NULL),('phabricator:20140214.clean.2.dropcomment.sql',1556231692,NULL),('phabricator:20140214.clean.3.dropinline.sql',1556231692,NULL),('phabricator:20140218.differentialdraft.sql',1556231692,NULL),('phabricator:20140218.passwords.1.extend.sql',1556231692,NULL),('phabricator:20140218.passwords.2.prefix.sql',1556231692,NULL),('phabricator:20140218.passwords.3.vcsextend.sql',1556231692,NULL),('phabricator:20140218.passwords.4.vcs.php',1556231692,NULL),('phabricator:20140223.bigutf8scratch.sql',1556231692,NULL),('phabricator:20140224.dxclean.1.datecommitted.sql',1556231692,NULL),('phabricator:20140226.dxcustom.1.fielddata.php',1556231692,NULL),('phabricator:20140226.dxcustom.99.drop.sql',1556231692,NULL),('phabricator:20140228.dxcomment.1.sql',1556231692,NULL),('phabricator:20140305.diviner.1.slugcol.sql',1556231692,NULL),('phabricator:20140305.diviner.2.slugkey.sql',1556231692,NULL),('phabricator:20140311.mdroplegacy.sql',1556231692,NULL),('phabricator:20140314.projectcolumn.1.statuscol.sql',1556231692,NULL),('phabricator:20140314.projectcolumn.2.statuskey.sql',1556231692,NULL),('phabricator:20140317.mupdatedkey.sql',1556231692,NULL),('phabricator:20140321.harbor.1.bxaction.sql',1556231692,NULL),('phabricator:20140321.mstatus.1.col.sql',1556231692,NULL),('phabricator:20140321.mstatus.2.mig.php',1556231692,NULL),('phabricator:20140323.harbor.1.renames.php',1556231692,NULL),('phabricator:20140323.harbor.2.message.sql',1556231692,NULL),('phabricator:20140325.push.1.event.sql',1556231692,NULL),('phabricator:20140325.push.2.eventphid.sql',1556231692,NULL),('phabricator:20140325.push.3.groups.php',1556231692,NULL),('phabricator:20140325.push.4.prune.sql',1556231692,NULL),('phabricator:20140326.project.1.colxaction.sql',1556231692,NULL),('phabricator:20140328.releeph.1.productxaction.sql',1556231692,NULL),('phabricator:20140330.flagtext.sql',1556231692,NULL),('phabricator:20140402.actionlog.sql',1556231692,NULL),('phabricator:20140410.accountsecret.1.sql',1556231692,NULL),('phabricator:20140410.accountsecret.2.php',1556231692,NULL),('phabricator:20140416.harbor.1.sql',1556231692,NULL),('phabricator:20140420.rel.1.objectphid.sql',1556231692,NULL),('phabricator:20140420.rel.2.objectmig.php',1556231692,NULL),('phabricator:20140421.slowvotecolumnsisclosed.sql',1556231692,NULL),('phabricator:20140423.session.1.hisec.sql',1556231692,NULL),('phabricator:20140427.mfactor.1.sql',1556231692,NULL),('phabricator:20140430.auth.1.partial.sql',1556231692,NULL),('phabricator:20140430.dash.1.paneltype.sql',1556231692,NULL),('phabricator:20140430.dash.2.edge.sql',1556231692,NULL),('phabricator:20140501.passphraselockcredential.sql',1556231692,NULL),('phabricator:20140501.remove.1.dlog.sql',1556231692,NULL),('phabricator:20140507.smstable.sql',1556231692,NULL),('phabricator:20140509.coverage.1.sql',1556231692,NULL),('phabricator:20140509.dashboardlayoutconfig.sql',1556231692,NULL),('phabricator:20140512.dparents.1.sql',1556231692,NULL),('phabricator:20140514.harbormasterbuildabletransaction.sql',1556231692,NULL),('phabricator:20140514.pholiomockclose.sql',1556231692,NULL),('phabricator:20140515.trust-emails.sql',1556231692,NULL),('phabricator:20140517.dxbinarycache.sql',1556231692,NULL),('phabricator:20140518.dxmorebinarycache.sql',1556231693,NULL),('phabricator:20140519.dashboardinstall.sql',1556231693,NULL),('phabricator:20140520.authtemptoken.sql',1556231693,NULL),('phabricator:20140521.projectslug.1.create.sql',1556231693,NULL),('phabricator:20140521.projectslug.2.mig.php',1556231693,NULL),('phabricator:20140522.projecticon.sql',1556231693,NULL),('phabricator:20140524.auth.mfa.cache.sql',1556231693,NULL),('phabricator:20140525.hunkmodern.sql',1556231693,NULL),('phabricator:20140615.pholioedit.1.sql',1556231693,NULL),('phabricator:20140615.pholioedit.2.sql',1556231693,NULL),('phabricator:20140617.daemon.explicit-argv.sql',1556231693,NULL),('phabricator:20140617.daemonlog.sql',1556231693,NULL),('phabricator:20140624.projcolor.1.sql',1556231693,NULL),('phabricator:20140624.projcolor.2.sql',1556231693,NULL),('phabricator:20140629.dasharchive.1.sql',1556231693,NULL),('phabricator:20140629.legalsig.1.sql',1556231693,NULL),('phabricator:20140629.legalsig.2.php',1556231693,NULL),('phabricator:20140701.legalexemption.1.sql',1556231693,NULL),('phabricator:20140701.legalexemption.2.sql',1556231693,NULL),('phabricator:20140703.legalcorp.1.sql',1556231693,NULL),('phabricator:20140703.legalcorp.2.sql',1556231693,NULL),('phabricator:20140703.legalcorp.3.sql',1556231693,NULL),('phabricator:20140703.legalcorp.4.sql',1556231693,NULL),('phabricator:20140703.legalcorp.5.sql',1556231693,NULL),('phabricator:20140704.harbormasterstep.1.sql',1556231693,NULL),('phabricator:20140704.harbormasterstep.2.sql',1556231693,NULL),('phabricator:20140704.legalpreamble.1.sql',1556231693,NULL),('phabricator:20140706.harbormasterdepend.1.php',1556231693,NULL),('phabricator:20140706.pedge.1.sql',1556231693,NULL),('phabricator:20140711.pnames.1.sql',1556231693,NULL),('phabricator:20140711.pnames.2.php',1556231693,NULL),('phabricator:20140711.workerpriority.sql',1556231693,NULL),('phabricator:20140712.projcoluniq.sql',1556231693,NULL),('phabricator:20140721.phortune.1.cart.sql',1556231693,NULL),('phabricator:20140721.phortune.2.purchase.sql',1556231693,NULL),('phabricator:20140721.phortune.3.charge.sql',1556231693,NULL),('phabricator:20140721.phortune.4.cartstatus.sql',1556231693,NULL),('phabricator:20140721.phortune.5.cstatusdefault.sql',1556231693,NULL),('phabricator:20140721.phortune.6.onetimecharge.sql',1556231693,NULL),('phabricator:20140721.phortune.7.nullmethod.sql',1556231693,NULL),('phabricator:20140722.appname.php',1556231693,NULL),('phabricator:20140722.audit.1.xactions.sql',1556231693,NULL),('phabricator:20140722.audit.2.comments.sql',1556231693,NULL),('phabricator:20140722.audit.3.miginlines.php',1556231693,NULL),('phabricator:20140722.audit.4.migtext.php',1556231693,NULL),('phabricator:20140722.renameauth.php',1556231693,NULL),('phabricator:20140723.apprenamexaction.sql',1556231693,NULL),('phabricator:20140725.audit.1.migxactions.php',1556231693,NULL),('phabricator:20140731.audit.1.subscribers.php',1556231693,NULL),('phabricator:20140731.cancdn.php',1556231693,NULL),('phabricator:20140731.harbormasterstepdesc.sql',1556231693,NULL),('phabricator:20140805.boardcol.1.sql',1556231693,NULL),('phabricator:20140805.boardcol.2.php',1556231693,NULL),('phabricator:20140807.harbormastertargettime.sql',1556231693,NULL),('phabricator:20140808.boardprop.1.sql',1556231693,NULL),('phabricator:20140808.boardprop.2.sql',1556231693,NULL),('phabricator:20140808.boardprop.3.php',1556231693,NULL),('phabricator:20140811.blob.1.sql',1556231693,NULL),('phabricator:20140811.blob.2.sql',1556231693,NULL),('phabricator:20140812.projkey.1.sql',1556231693,NULL),('phabricator:20140812.projkey.2.sql',1556231693,NULL),('phabricator:20140814.passphrasecredentialconduit.sql',1556231693,NULL),('phabricator:20140815.cancdncase.php',1556231693,NULL),('phabricator:20140818.harbormasterindex.1.sql',1556231693,NULL),('phabricator:20140821.harbormasterbuildgen.1.sql',1556231693,NULL),('phabricator:20140822.daemonenvhash.sql',1556231693,NULL),('phabricator:20140902.almanacdevice.1.sql',1556231693,NULL),('phabricator:20140904.macroattach.php',1556231693,NULL),('phabricator:20140911.fund.1.initiative.sql',1556231693,NULL),('phabricator:20140911.fund.2.xaction.sql',1556231693,NULL),('phabricator:20140911.fund.3.edge.sql',1556231693,NULL),('phabricator:20140911.fund.4.backer.sql',1556231693,NULL),('phabricator:20140911.fund.5.backxaction.sql',1556231693,NULL),('phabricator:20140914.betaproto.php',1556231693,NULL),('phabricator:20140917.project.canlock.sql',1556231693,NULL),('phabricator:20140918.schema.1.dropaudit.sql',1556231693,NULL),('phabricator:20140918.schema.2.dropauditinline.sql',1556231693,NULL),('phabricator:20140918.schema.3.wipecache.sql',1556231693,NULL),('phabricator:20140918.schema.4.cachetype.sql',1556231693,NULL),('phabricator:20140918.schema.5.slowvote.sql',1556231693,NULL),('phabricator:20140919.schema.01.calstatus.sql',1556231693,NULL),('phabricator:20140919.schema.02.calname.sql',1556231693,NULL),('phabricator:20140919.schema.03.dropaux.sql',1556231693,NULL),('phabricator:20140919.schema.04.droptaskproj.sql',1556231693,NULL),('phabricator:20140926.schema.01.droprelev.sql',1556231693,NULL),('phabricator:20140926.schema.02.droprelreqev.sql',1556231693,NULL),('phabricator:20140926.schema.03.dropldapinfo.sql',1556231693,NULL),('phabricator:20140926.schema.04.dropoauthinfo.sql',1556231693,NULL),('phabricator:20140926.schema.05.dropprojaffil.sql',1556231693,NULL),('phabricator:20140926.schema.06.dropsubproject.sql',1556231693,NULL),('phabricator:20140926.schema.07.droppondcom.sql',1556231693,NULL),('phabricator:20140927.schema.01.dropsearchq.sql',1556231693,NULL),('phabricator:20140927.schema.02.pholio1.sql',1556231693,NULL),('phabricator:20140927.schema.03.pholio2.sql',1556231693,NULL),('phabricator:20140927.schema.04.pholio3.sql',1556231693,NULL),('phabricator:20140927.schema.05.phragment1.sql',1556231693,NULL),('phabricator:20140927.schema.06.releeph1.sql',1556231693,NULL),('phabricator:20141001.schema.01.version.sql',1556231693,NULL),('phabricator:20141001.schema.02.taskmail.sql',1556231693,NULL),('phabricator:20141002.schema.01.liskcounter.sql',1556231693,NULL),('phabricator:20141002.schema.02.draftnull.sql',1556231693,NULL),('phabricator:20141004.currency.01.sql',1556231693,NULL),('phabricator:20141004.currency.02.sql',1556231693,NULL),('phabricator:20141004.currency.03.sql',1556231693,NULL),('phabricator:20141004.currency.04.sql',1556231693,NULL),('phabricator:20141004.currency.05.sql',1556231693,NULL),('phabricator:20141004.currency.06.sql',1556231693,NULL),('phabricator:20141004.harborliskcounter.sql',1556231693,NULL),('phabricator:20141005.phortuneproduct.sql',1556231694,NULL),('phabricator:20141006.phortunecart.sql',1556231694,NULL),('phabricator:20141006.phortunemerchant.sql',1556231694,NULL),('phabricator:20141006.phortunemerchantx.sql',1556231694,NULL),('phabricator:20141007.fundmerchant.sql',1556231694,NULL),('phabricator:20141007.fundrisks.sql',1556231694,NULL),('phabricator:20141007.fundtotal.sql',1556231694,NULL),('phabricator:20141007.phortunecartmerchant.sql',1556231694,NULL),('phabricator:20141007.phortunecharge.sql',1556231694,NULL),('phabricator:20141007.phortunepayment.sql',1556231694,NULL),('phabricator:20141007.phortuneprovider.sql',1556231694,NULL),('phabricator:20141007.phortuneproviderx.sql',1556231694,NULL),('phabricator:20141008.phortunemerchdesc.sql',1556231694,NULL),('phabricator:20141008.phortuneprovdis.sql',1556231694,NULL),('phabricator:20141008.phortunerefund.sql',1556231694,NULL),('phabricator:20141010.fundmailkey.sql',1556231694,NULL),('phabricator:20141011.phortunemerchedit.sql',1556231694,NULL),('phabricator:20141012.phortunecartxaction.sql',1556231694,NULL),('phabricator:20141013.phortunecartkey.sql',1556231694,NULL),('phabricator:20141016.almanac.device.sql',1556231694,NULL),('phabricator:20141016.almanac.dxaction.sql',1556231694,NULL),('phabricator:20141016.almanac.interface.sql',1556231694,NULL),('phabricator:20141016.almanac.network.sql',1556231694,NULL),('phabricator:20141016.almanac.nxaction.sql',1556231694,NULL),('phabricator:20141016.almanac.service.sql',1556231694,NULL),('phabricator:20141016.almanac.sxaction.sql',1556231694,NULL),('phabricator:20141017.almanac.binding.sql',1556231694,NULL),('phabricator:20141017.almanac.bxaction.sql',1556231694,NULL),('phabricator:20141025.phriction.1.xaction.sql',1556231694,NULL),('phabricator:20141025.phriction.2.xaction.sql',1556231694,NULL),('phabricator:20141025.phriction.mailkey.sql',1556231694,NULL),('phabricator:20141103.almanac.1.delprop.sql',1556231694,NULL),('phabricator:20141103.almanac.2.addprop.sql',1556231694,NULL),('phabricator:20141104.almanac.3.edge.sql',1556231694,NULL),('phabricator:20141105.ssh.1.rename.sql',1556231694,NULL),('phabricator:20141106.dropold.sql',1556231694,NULL),('phabricator:20141106.uniqdrafts.php',1556231694,NULL),('phabricator:20141107.phriction.policy.1.sql',1556231694,NULL),('phabricator:20141107.phriction.policy.2.php',1556231694,NULL),('phabricator:20141107.phriction.popkeys.php',1556231694,NULL),('phabricator:20141107.ssh.1.colname.sql',1556231694,NULL),('phabricator:20141107.ssh.2.keyhash.sql',1556231694,NULL),('phabricator:20141107.ssh.3.keyindex.sql',1556231694,NULL),('phabricator:20141107.ssh.4.keymig.php',1556231694,NULL),('phabricator:20141107.ssh.5.indexnull.sql',1556231694,NULL),('phabricator:20141107.ssh.6.indexkey.sql',1556231694,NULL),('phabricator:20141107.ssh.7.colnull.sql',1556231694,NULL),('phabricator:20141113.auditdupes.php',1556231694,NULL),('phabricator:20141118.diffxaction.sql',1556231694,NULL),('phabricator:20141119.commitpedge.sql',1556231694,NULL),('phabricator:20141119.differential.diff.policy.sql',1556231694,NULL),('phabricator:20141119.sshtrust.sql',1556231694,NULL),('phabricator:20141123.taskpriority.1.sql',1556231694,NULL),('phabricator:20141123.taskpriority.2.sql',1556231694,NULL),('phabricator:20141210.maniphestsubscribersmig.1.sql',1556231694,NULL),('phabricator:20141210.maniphestsubscribersmig.2.sql',1556231694,NULL),('phabricator:20141210.reposervice.sql',1556231694,NULL),('phabricator:20141212.conduittoken.sql',1556231694,NULL),('phabricator:20141215.almanacservicetype.sql',1556231694,NULL),('phabricator:20141217.almanacdevicelock.sql',1556231694,NULL),('phabricator:20141217.almanaclock.sql',1556231694,NULL),('phabricator:20141218.maniphestcctxn.php',1556231694,NULL),('phabricator:20141222.maniphestprojtxn.php',1556231694,NULL),('phabricator:20141223.daemonloguser.sql',1556231694,NULL),('phabricator:20141223.daemonobjectphid.sql',1556231694,NULL),('phabricator:20141230.pasteeditpolicycolumn.sql',1556231694,NULL),('phabricator:20141230.pasteeditpolicyexisting.sql',1556231694,NULL),('phabricator:20150102.policyname.php',1556231694,NULL),('phabricator:20150102.tasksubscriber.sql',1556231694,NULL),('phabricator:20150105.conpsearch.sql',1556231694,NULL),('phabricator:20150114.oauthserver.client.policy.sql',1556231694,NULL),('phabricator:20150115.applicationemails.sql',1556231694,NULL),('phabricator:20150115.trigger.1.sql',1556231694,NULL),('phabricator:20150115.trigger.2.sql',1556231694,NULL),('phabricator:20150116.maniphestapplicationemails.php',1556231694,NULL),('phabricator:20150120.maniphestdefaultauthor.php',1556231694,NULL),('phabricator:20150124.subs.1.sql',1556231694,NULL),('phabricator:20150129.pastefileapplicationemails.php',1556231694,NULL),('phabricator:20150130.phortune.1.subphid.sql',1556231694,NULL),('phabricator:20150130.phortune.2.subkey.sql',1556231695,NULL),('phabricator:20150131.phortune.1.defaultpayment.sql',1556231695,NULL),('phabricator:20150205.authprovider.autologin.sql',1556231695,NULL),('phabricator:20150205.daemonenv.sql',1556231695,NULL),('phabricator:20150209.invite.sql',1556231695,NULL),('phabricator:20150209.oauthclient.trust.sql',1556231695,NULL),('phabricator:20150210.invitephid.sql',1556231695,NULL),('phabricator:20150212.legalpad.session.1.sql',1556231695,NULL),('phabricator:20150212.legalpad.session.2.sql',1556231695,NULL),('phabricator:20150219.scratch.nonmutable.sql',1556231695,NULL),('phabricator:20150223.daemon.1.id.sql',1556231695,NULL),('phabricator:20150223.daemon.2.idlegacy.sql',1556231695,NULL),('phabricator:20150223.daemon.3.idkey.sql',1556231695,NULL),('phabricator:20150312.filechunk.1.sql',1556231695,NULL),('phabricator:20150312.filechunk.2.sql',1556231695,NULL),('phabricator:20150312.filechunk.3.sql',1556231695,NULL),('phabricator:20150317.conpherence.isroom.1.sql',1556231695,NULL),('phabricator:20150317.conpherence.isroom.2.sql',1556231695,NULL),('phabricator:20150317.conpherence.policy.sql',1556231695,NULL),('phabricator:20150410.nukeruleedit.sql',1556231695,NULL),('phabricator:20150420.invoice.1.sql',1556231695,NULL),('phabricator:20150420.invoice.2.sql',1556231695,NULL),('phabricator:20150425.isclosed.sql',1556231695,NULL),('phabricator:20150427.calendar.1.edge.sql',1556231695,NULL),('phabricator:20150427.calendar.1.xaction.sql',1556231695,NULL),('phabricator:20150427.calendar.2.xaction.sql',1556231695,NULL),('phabricator:20150428.calendar.1.iscancelled.sql',1556231695,NULL),('phabricator:20150428.calendar.1.name.sql',1556231695,NULL),('phabricator:20150429.calendar.1.invitee.sql',1556231695,NULL),('phabricator:20150430.calendar.1.policies.sql',1556231695,NULL),('phabricator:20150430.multimeter.1.sql',1556231695,NULL),('phabricator:20150430.multimeter.2.host.sql',1556231695,NULL),('phabricator:20150430.multimeter.3.viewer.sql',1556231695,NULL),('phabricator:20150430.multimeter.4.context.sql',1556231695,NULL),('phabricator:20150430.multimeter.5.label.sql',1556231695,NULL),('phabricator:20150501.calendar.1.reply.sql',1556231695,NULL),('phabricator:20150501.calendar.2.reply.php',1556231695,NULL),('phabricator:20150501.conpherencepics.sql',1556231695,NULL),('phabricator:20150503.repositorysymbols.1.sql',1556231695,NULL),('phabricator:20150503.repositorysymbols.2.php',1556231695,NULL),('phabricator:20150503.repositorysymbols.3.sql',1556231695,NULL),('phabricator:20150504.symbolsproject.1.php',1556231695,NULL),('phabricator:20150504.symbolsproject.2.sql',1556231695,NULL),('phabricator:20150506.calendarunnamedevents.1.php',1556231695,NULL),('phabricator:20150507.calendar.1.isallday.sql',1556231695,NULL),('phabricator:20150513.user.cache.1.sql',1556231695,NULL),('phabricator:20150514.calendar.status.sql',1556231695,NULL),('phabricator:20150514.phame.blog.xaction.sql',1556231695,NULL),('phabricator:20150514.user.cache.2.sql',1556231695,NULL),('phabricator:20150515.phame.post.xaction.sql',1556231695,NULL),('phabricator:20150515.project.mailkey.1.sql',1556231695,NULL),('phabricator:20150515.project.mailkey.2.php',1556231695,NULL),('phabricator:20150519.calendar.calendaricon.sql',1556231695,NULL),('phabricator:20150521.releephrepository.sql',1556231695,NULL),('phabricator:20150525.diff.hidden.1.sql',1556231695,NULL),('phabricator:20150526.owners.mailkey.1.sql',1556231695,NULL),('phabricator:20150526.owners.mailkey.2.php',1556231695,NULL),('phabricator:20150526.owners.xaction.sql',1556231695,NULL),('phabricator:20150527.calendar.recurringevents.sql',1556231695,NULL),('phabricator:20150601.spaces.1.namespace.sql',1556231695,NULL),('phabricator:20150601.spaces.2.xaction.sql',1556231695,NULL),('phabricator:20150602.mlist.1.sql',1556231695,NULL),('phabricator:20150602.mlist.2.php',1556231695,NULL),('phabricator:20150604.spaces.1.sql',1556231695,NULL),('phabricator:20150605.diviner.edges.sql',1556231695,NULL),('phabricator:20150605.diviner.editPolicy.sql',1556231695,NULL),('phabricator:20150605.diviner.xaction.sql',1556231695,NULL),('phabricator:20150606.mlist.1.php',1556231695,NULL),('phabricator:20150609.inline.sql',1556231695,NULL),('phabricator:20150609.spaces.1.pholio.sql',1556231695,NULL),('phabricator:20150609.spaces.2.maniphest.sql',1556231695,NULL),('phabricator:20150610.spaces.1.desc.sql',1556231695,NULL),('phabricator:20150610.spaces.2.edge.sql',1556231695,NULL),('phabricator:20150610.spaces.3.archive.sql',1556231695,NULL),('phabricator:20150611.spaces.1.mailxaction.sql',1556231695,NULL),('phabricator:20150611.spaces.2.appmail.sql',1556231695,NULL),('phabricator:20150616.divinerrepository.sql',1556231695,NULL),('phabricator:20150617.harbor.1.lint.sql',1556231695,NULL),('phabricator:20150617.harbor.2.unit.sql',1556231695,NULL),('phabricator:20150618.harbor.1.planauto.sql',1556231695,NULL),('phabricator:20150618.harbor.2.stepauto.sql',1556231695,NULL),('phabricator:20150618.harbor.3.buildauto.sql',1556231695,NULL),('phabricator:20150619.conpherencerooms.1.sql',1556231695,NULL),('phabricator:20150619.conpherencerooms.2.sql',1556231695,NULL),('phabricator:20150619.conpherencerooms.3.sql',1556231695,NULL),('phabricator:20150621.phrase.1.sql',1556231695,NULL),('phabricator:20150621.phrase.2.sql',1556231695,NULL),('phabricator:20150622.bulk.1.job.sql',1556231695,NULL),('phabricator:20150622.bulk.2.task.sql',1556231695,NULL),('phabricator:20150622.bulk.3.xaction.sql',1556231695,NULL),('phabricator:20150622.bulk.4.edge.sql',1556231696,NULL),('phabricator:20150622.metamta.1.phid-col.sql',1556231696,NULL),('phabricator:20150622.metamta.2.phid-mig.php',1556231696,NULL),('phabricator:20150622.metamta.3.phid-key.sql',1556231696,NULL),('phabricator:20150622.metamta.4.actor-phid-col.sql',1556231696,NULL),('phabricator:20150622.metamta.5.actor-phid-mig.php',1556231696,NULL),('phabricator:20150622.metamta.6.actor-phid-key.sql',1556231696,NULL),('phabricator:20150624.spaces.1.repo.sql',1556231696,NULL),('phabricator:20150626.spaces.1.calendar.sql',1556231696,NULL),('phabricator:20150630.herald.1.sql',1556231696,NULL),('phabricator:20150630.herald.2.sql',1556231696,NULL),('phabricator:20150701.herald.1.sql',1556231696,NULL),('phabricator:20150701.herald.2.sql',1556231696,NULL),('phabricator:20150702.spaces.1.slowvote.sql',1556231696,NULL),('phabricator:20150706.herald.1.sql',1556231696,NULL),('phabricator:20150707.herald.1.sql',1556231696,NULL),('phabricator:20150708.arcanistproject.sql',1556231696,NULL),('phabricator:20150708.herald.1.sql',1556231696,NULL),('phabricator:20150708.herald.2.sql',1556231696,NULL),('phabricator:20150708.herald.3.sql',1556231696,NULL),('phabricator:20150712.badges.1.sql',1556231696,NULL),('phabricator:20150714.spaces.countdown.1.sql',1556231696,NULL),('phabricator:20150717.herald.1.sql',1556231696,NULL),('phabricator:20150719.countdown.1.sql',1556231696,NULL),('phabricator:20150719.countdown.2.sql',1556231696,NULL),('phabricator:20150719.countdown.3.sql',1556231696,NULL),('phabricator:20150721.phurl.1.url.sql',1556231696,NULL),('phabricator:20150721.phurl.2.xaction.sql',1556231696,NULL),('phabricator:20150721.phurl.3.xactioncomment.sql',1556231696,NULL),('phabricator:20150721.phurl.4.url.sql',1556231696,NULL),('phabricator:20150721.phurl.5.edge.sql',1556231696,NULL),('phabricator:20150721.phurl.6.alias.sql',1556231696,NULL),('phabricator:20150721.phurl.7.authorphid.sql',1556231696,NULL),('phabricator:20150722.dashboard.1.sql',1556231696,NULL),('phabricator:20150722.dashboard.2.sql',1556231696,NULL),('phabricator:20150723.countdown.1.sql',1556231696,NULL),('phabricator:20150724.badges.comments.1.sql',1556231696,NULL),('phabricator:20150724.countdown.comments.1.sql',1556231696,NULL),('phabricator:20150725.badges.mailkey.1.sql',1556231696,NULL),('phabricator:20150725.badges.mailkey.2.php',1556231696,NULL),('phabricator:20150725.badges.viewpolicy.3.sql',1556231696,NULL),('phabricator:20150725.countdown.mailkey.1.sql',1556231696,NULL),('phabricator:20150725.countdown.mailkey.2.php',1556231696,NULL),('phabricator:20150725.slowvote.mailkey.1.sql',1556231696,NULL),('phabricator:20150725.slowvote.mailkey.2.php',1556231696,NULL),('phabricator:20150727.heraldaction.1.sql',1556231696,NULL),('phabricator:20150730.herald.1.sql',1556231696,NULL),('phabricator:20150730.herald.2.sql',1556231696,NULL),('phabricator:20150730.herald.3.sql',1556231696,NULL),('phabricator:20150730.herald.4.sql',1556231696,NULL),('phabricator:20150730.herald.5.sql',1556231696,NULL),('phabricator:20150730.herald.6.sql',1556231696,NULL),('phabricator:20150730.herald.7.sql',1556231696,NULL),('phabricator:20150803.herald.1.sql',1556231696,NULL),('phabricator:20150803.herald.2.sql',1556231696,NULL),('phabricator:20150804.ponder.answer.mailkey.1.sql',1556231696,NULL),('phabricator:20150804.ponder.answer.mailkey.2.php',1556231696,NULL),('phabricator:20150804.ponder.question.1.sql',1556231696,NULL),('phabricator:20150804.ponder.question.2.sql',1556231696,NULL),('phabricator:20150804.ponder.question.3.sql',1556231696,NULL),('phabricator:20150804.ponder.spaces.4.sql',1556231696,NULL),('phabricator:20150805.paste.status.1.sql',1556231696,NULL),('phabricator:20150805.paste.status.2.sql',1556231696,NULL),('phabricator:20150806.ponder.answer.1.sql',1556231696,NULL),('phabricator:20150806.ponder.editpolicy.2.sql',1556231696,NULL),('phabricator:20150806.ponder.status.1.sql',1556231696,NULL),('phabricator:20150806.ponder.status.2.sql',1556231696,NULL),('phabricator:20150806.ponder.status.3.sql',1556231696,NULL),('phabricator:20150808.ponder.vote.1.sql',1556231696,NULL),('phabricator:20150808.ponder.vote.2.sql',1556231696,NULL),('phabricator:20150812.ponder.answer.1.sql',1556231696,NULL),('phabricator:20150812.ponder.answer.2.sql',1556231696,NULL),('phabricator:20150814.harbormater.artifact.phid.sql',1556231696,NULL),('phabricator:20150815.owners.status.1.sql',1556231696,NULL),('phabricator:20150815.owners.status.2.sql',1556231696,NULL),('phabricator:20150823.nuance.queue.1.sql',1556231696,NULL),('phabricator:20150823.nuance.queue.2.sql',1556231696,NULL),('phabricator:20150823.nuance.queue.3.sql',1556231696,NULL),('phabricator:20150823.nuance.queue.4.sql',1556231696,NULL),('phabricator:20150828.ponder.wiki.1.sql',1556231696,NULL),('phabricator:20150829.ponder.dupe.1.sql',1556231696,NULL),('phabricator:20150904.herald.1.sql',1556231696,NULL),('phabricator:20150906.mailinglist.sql',1556231696,NULL),('phabricator:20150910.owners.custom.1.sql',1556231696,NULL),('phabricator:20150916.drydock.slotlocks.1.sql',1556231696,NULL),('phabricator:20150922.drydock.commands.1.sql',1556231696,NULL),('phabricator:20150923.drydock.resourceid.1.sql',1556231696,NULL),('phabricator:20150923.drydock.resourceid.2.sql',1556231696,NULL),('phabricator:20150923.drydock.resourceid.3.sql',1556231696,NULL),('phabricator:20150923.drydock.taskid.1.sql',1556231696,NULL),('phabricator:20150924.drydock.disable.1.sql',1556231696,NULL),('phabricator:20150924.drydock.status.1.sql',1556231696,NULL),('phabricator:20150928.drydock.rexpire.1.sql',1556231696,NULL),('phabricator:20150930.drydock.log.1.sql',1556231696,NULL),('phabricator:20151001.drydock.rname.1.sql',1556231696,NULL),('phabricator:20151002.dashboard.status.1.sql',1556231696,NULL),('phabricator:20151002.harbormaster.bparam.1.sql',1556231696,NULL),('phabricator:20151009.drydock.auth.1.sql',1556231696,NULL),('phabricator:20151010.drydock.auth.2.sql',1556231696,NULL),('phabricator:20151013.drydock.op.1.sql',1556231696,NULL),('phabricator:20151023.harborpolicy.1.sql',1556231696,NULL),('phabricator:20151023.harborpolicy.2.php',1556231696,NULL),('phabricator:20151023.patchduration.sql',1556231697,141072),('phabricator:20151030.harbormaster.initiator.sql',1556231697,14355),('phabricator:20151106.editengine.1.table.sql',1556231697,7000),('phabricator:20151106.editengine.2.xactions.sql',1556231697,6327),('phabricator:20151106.phame.post.mailkey.1.sql',1556231697,13453),('phabricator:20151106.phame.post.mailkey.2.php',1556231697,1570),('phabricator:20151107.phame.blog.mailkey.1.sql',1556231697,11087),('phabricator:20151107.phame.blog.mailkey.2.php',1556231697,970),('phabricator:20151108.phame.blog.joinpolicy.sql',1556231697,11189),('phabricator:20151108.xhpast.stderr.sql',1556231697,18926),('phabricator:20151109.phame.post.comments.1.sql',1556231697,7158),('phabricator:20151109.repository.coverage.1.sql',1556231697,1260),('phabricator:20151109.xhpast.db.1.sql',1556231697,3950),('phabricator:20151109.xhpast.db.2.sql',1556231697,1156),('phabricator:20151110.daemonenvhash.sql',1556231697,24270),('phabricator:20151111.phame.blog.archive.1.sql',1556231697,11808),('phabricator:20151111.phame.blog.archive.2.sql',1556231697,570),('phabricator:20151112.herald.edge.sql',1556231697,10237),('phabricator:20151116.owners.edge.sql',1556231697,10178),('phabricator:20151128.phame.blog.picture.1.sql',1556231697,12092),('phabricator:20151130.phurl.mailkey.1.sql',1556231697,9727),('phabricator:20151130.phurl.mailkey.2.php',1556231697,1287),('phabricator:20151202.versioneddraft.1.sql',1556231697,5191),('phabricator:20151207.editengine.1.sql',1556231697,48281),('phabricator:20151210.land.1.refphid.sql',1556231697,9677),('phabricator:20151210.land.2.refphid.php',1556231697,629),('phabricator:20151215.phame.1.autotitle.sql',1556231697,20604),('phabricator:20151218.key.1.keyphid.sql',1556231697,13167),('phabricator:20151218.key.2.keyphid.php',1556231697,423),('phabricator:20151219.proj.01.prislug.sql',1556231697,13742),('phabricator:20151219.proj.02.prislugkey.sql',1556231697,8362),('phabricator:20151219.proj.03.copyslug.sql',1556231697,517),('phabricator:20151219.proj.04.dropslugkey.sql',1556231697,6993),('phabricator:20151219.proj.05.dropslug.sql',1556231697,14034),('phabricator:20151219.proj.06.defaultpolicy.php',1556231697,1187),('phabricator:20151219.proj.07.viewnull.sql',1556231697,17899),('phabricator:20151219.proj.08.editnull.sql',1556231697,17020),('phabricator:20151219.proj.09.joinnull.sql',1556231697,17501),('phabricator:20151219.proj.10.subcolumns.sql',1556231697,77351),('phabricator:20151219.proj.11.subprojectphids.sql',1556231697,14306),('phabricator:20151221.search.1.version.sql',1556231697,5434),('phabricator:20151221.search.2.ownersngrams.sql',1556231697,5494),('phabricator:20151221.search.3.reindex.php',1556231697,84),('phabricator:20151223.proj.01.paths.sql',1556231697,15641),('phabricator:20151223.proj.02.depths.sql',1556231697,15239),('phabricator:20151223.proj.03.pathkey.sql',1556231697,9414),('phabricator:20151223.proj.04.keycol.sql',1556231697,16788),('phabricator:20151223.proj.05.updatekeys.php',1556231697,483),('phabricator:20151223.proj.06.uniq.sql',1556231697,10101),('phabricator:20151226.reop.1.sql',1556231697,12605),('phabricator:20151227.proj.01.materialize.sql',1556231697,586),('phabricator:20151231.proj.01.icon.php',1556231697,2511),('phabricator:20160102.badges.award.sql',1556231697,6329),('phabricator:20160110.repo.01.slug.sql',1556231697,20421),('phabricator:20160110.repo.02.slug.php',1556231697,678),('phabricator:20160111.repo.01.slugx.sql',1556231697,1338),('phabricator:20160112.repo.01.uri.sql',1556231697,5759),('phabricator:20160112.repo.02.uri.index.php',1556231697,105),('phabricator:20160113.propanel.1.storage.sql',1556231697,6417),('phabricator:20160113.propanel.2.xaction.sql',1556231697,7222),('phabricator:20160119.project.1.silence.sql',1556231697,547),('phabricator:20160122.project.1.boarddefault.php',1556231697,759),('phabricator:20160124.people.1.icon.sql',1556231697,10389),('phabricator:20160124.people.2.icondefault.sql',1556231697,597),('phabricator:20160128.repo.1.pull.sql',1556231697,6188),('phabricator:20160201.revision.properties.1.sql',1556231697,13671),('phabricator:20160201.revision.properties.2.sql',1556231697,582),('phabricator:20160202.board.1.proxy.sql',1556231697,11473),('phabricator:20160202.ipv6.1.sql',1556231697,29431),('phabricator:20160202.ipv6.2.php',1556231697,1039),('phabricator:20160206.cover.1.sql',1556231697,16645),('phabricator:20160208.task.1.sql',1556231697,17354),('phabricator:20160208.task.2.sql',1556231697,28687),('phabricator:20160208.task.3.sql',1556231697,21722),('phabricator:20160212.proj.1.sql',1556231697,18838),('phabricator:20160212.proj.2.sql',1556231697,682),('phabricator:20160215.owners.policy.1.sql',1556231698,13159),('phabricator:20160215.owners.policy.2.sql',1556231698,13532),('phabricator:20160215.owners.policy.3.sql',1556231698,781),('phabricator:20160215.owners.policy.4.sql',1556231698,575),('phabricator:20160218.callsigns.1.sql',1556231698,18754),('phabricator:20160221.almanac.1.devicen.sql',1556231698,5402),('phabricator:20160221.almanac.2.devicei.php',1556231698,86),('phabricator:20160221.almanac.3.servicen.sql',1556231698,5514),('phabricator:20160221.almanac.4.servicei.php',1556231698,88),('phabricator:20160221.almanac.5.networkn.sql',1556231698,5797),('phabricator:20160221.almanac.6.networki.php',1556231698,98),('phabricator:20160221.almanac.7.namespacen.sql',1556231698,6222),('phabricator:20160221.almanac.8.namespace.sql',1556231698,6967),('phabricator:20160221.almanac.9.namespacex.sql',1556231698,6258),('phabricator:20160222.almanac.1.properties.php',1556231698,1785),('phabricator:20160223.almanac.1.bound.sql',1556231698,12636),('phabricator:20160223.almanac.2.lockbind.sql',1556231698,555),('phabricator:20160223.almanac.3.devicelock.sql',1556231698,12370),('phabricator:20160223.almanac.4.servicelock.sql',1556231698,12403),('phabricator:20160223.paste.fileedges.php',1556231698,563),('phabricator:20160225.almanac.1.disablebinding.sql',1556231698,13239),('phabricator:20160225.almanac.2.stype.sql',1556231698,5306),('phabricator:20160225.almanac.3.stype.php',1556231698,854),('phabricator:20160227.harbormaster.1.plann.sql',1556231698,5517),('phabricator:20160227.harbormaster.2.plani.php',1556231698,85),('phabricator:20160303.drydock.1.bluen.sql',1556231698,5916),('phabricator:20160303.drydock.2.bluei.php',1556231698,84),('phabricator:20160303.drydock.3.edge.sql',1556231698,9299),('phabricator:20160308.nuance.01.disabled.sql',1556231698,11938),('phabricator:20160308.nuance.02.cursordata.sql',1556231698,5933),('phabricator:20160308.nuance.03.sourcen.sql',1556231698,5421),('phabricator:20160308.nuance.04.sourcei.php',1556231698,84),('phabricator:20160308.nuance.05.sourcename.sql',1556231698,14051),('phabricator:20160308.nuance.06.label.sql',1556231698,14773),('phabricator:20160308.nuance.07.itemtype.sql',1556231698,12745),('phabricator:20160308.nuance.08.itemkey.sql',1556231698,12490),('phabricator:20160308.nuance.09.itemcontainer.sql',1556231698,14099),('phabricator:20160308.nuance.10.itemkeyu.sql',1556231698,525),('phabricator:20160308.nuance.11.requestor.sql',1556231698,16661),('phabricator:20160308.nuance.12.queue.sql',1556231698,12884),('phabricator:20160316.lfs.01.token.resource.sql',1556231698,14175),('phabricator:20160316.lfs.02.token.user.sql',1556231698,10063),('phabricator:20160316.lfs.03.token.properties.sql',1556231698,10329),('phabricator:20160316.lfs.04.token.default.sql',1556231698,508),('phabricator:20160317.lfs.01.ref.sql',1556231698,5342),('phabricator:20160321.nuance.01.taskbridge.sql',1556231698,17760),('phabricator:20160322.nuance.01.itemcommand.sql',1556231698,4975),('phabricator:20160323.badgemigrate.sql',1556231698,1649),('phabricator:20160329.nuance.01.requestor.sql',1556231698,3782),('phabricator:20160329.nuance.02.requestorsource.sql',1556231698,4055),('phabricator:20160329.nuance.03.requestorxaction.sql',1556231698,4785),('phabricator:20160329.nuance.04.requestorcomment.sql',1556231698,4420),('phabricator:20160330.badges.migratequality.sql',1556231698,15822),('phabricator:20160330.badges.qualityxaction.mig.sql',1556231698,2799),('phabricator:20160331.fund.comments.1.sql',1556231698,6871),('phabricator:20160404.oauth.1.xaction.sql',1556231698,6721),('phabricator:20160405.oauth.2.disable.sql',1556231698,10930),('phabricator:20160406.badges.ngrams.php',1556231698,97),('phabricator:20160406.badges.ngrams.sql',1556231698,6525),('phabricator:20160406.columns.1.php',1556231698,500),('phabricator:20160411.repo.1.version.sql',1556231698,5519),('phabricator:20160418.repouri.1.sql',1556231698,6074),('phabricator:20160418.repouri.2.sql',1556231698,11525),('phabricator:20160418.repoversion.1.sql',1556231698,10689),('phabricator:20160419.pushlog.1.sql',1556231698,14353),('phabricator:20160424.locks.1.sql',1556231698,10204),('phabricator:20160426.searchedge.sql',1556231698,9947),('phabricator:20160428.repo.1.urixaction.sql',1556231698,7021),('phabricator:20160503.repo.01.lpath.sql',1556231698,13307),('phabricator:20160503.repo.02.lpathkey.sql',1556231698,8490),('phabricator:20160503.repo.03.lpathmigrate.php',1556231698,504),('phabricator:20160503.repo.04.mirrormigrate.php',1556231698,850),('phabricator:20160503.repo.05.urimigrate.php',1556231698,424),('phabricator:20160510.repo.01.uriindex.php',1556231698,4595),('phabricator:20160513.owners.01.autoreview.sql',1556231698,10941),('phabricator:20160513.owners.02.autoreviewnone.sql',1556231698,564),('phabricator:20160516.owners.01.dominion.sql',1556231698,10783),('phabricator:20160516.owners.02.dominionstrong.sql',1556231698,572),('phabricator:20160517.oauth.01.edge.sql',1556231698,10687),('phabricator:20160518.ssh.01.activecol.sql',1556231698,10789),('phabricator:20160518.ssh.02.activeval.sql',1556231698,581),('phabricator:20160518.ssh.03.activekey.sql',1556231698,6783),('phabricator:20160519.ssh.01.xaction.sql',1556231698,6533),('phabricator:20160531.pref.01.xaction.sql',1556231698,7117),('phabricator:20160531.pref.02.datecreatecol.sql',1556231698,9742),('phabricator:20160531.pref.03.datemodcol.sql',1556231698,9161),('phabricator:20160531.pref.04.datecreateval.sql',1556231698,581),('phabricator:20160531.pref.05.datemodval.sql',1556231698,500),('phabricator:20160531.pref.06.phidcol.sql',1556231698,9802),('phabricator:20160531.pref.07.phidval.php',1556231698,812),('phabricator:20160601.user.01.cache.sql',1556231698,7441),('phabricator:20160601.user.02.copyprefs.php',1556231698,1761),('phabricator:20160601.user.03.removetime.sql',1556231698,15650),('phabricator:20160601.user.04.removetranslation.sql',1556231698,15109),('phabricator:20160601.user.05.removesex.sql',1556231698,14245),('phabricator:20160603.user.01.removedcenabled.sql',1556231698,13434),('phabricator:20160603.user.02.removedctab.sql',1556231698,14889),('phabricator:20160603.user.03.removedcvisible.sql',1556231698,14290),('phabricator:20160604.user.01.stringmailprefs.php',1556231698,605),('phabricator:20160604.user.02.removeimagecache.sql',1556231698,13598),('phabricator:20160605.user.01.prefnulluser.sql',1556231698,13603),('phabricator:20160605.user.02.prefbuiltin.sql',1556231698,9726),('phabricator:20160605.user.03.builtinunique.sql',1556231698,5808),('phabricator:20160616.phame.blog.header.1.sql',1556231698,10765),('phabricator:20160616.repo.01.oldref.sql',1556231698,5571),('phabricator:20160617.harbormaster.01.arelease.sql',1556231698,11995),('phabricator:20160618.phame.blog.subtitle.sql',1556231698,11187),('phabricator:20160620.phame.blog.parentdomain.2.sql',1556231698,11609),('phabricator:20160620.phame.blog.parentsite.1.sql',1556231698,13040),('phabricator:20160623.phame.blog.fulldomain.1.sql',1556231698,12008),('phabricator:20160623.phame.blog.fulldomain.2.sql',1556231698,564),('phabricator:20160623.phame.blog.fulldomain.3.sql',1556231698,1211),('phabricator:20160706.phame.blog.parentdomain.2.sql',1556231698,12418),('phabricator:20160706.phame.blog.parentsite.1.sql',1556231699,13036),('phabricator:20160707.calendar.01.stub.sql',1556231699,12754),('phabricator:20160711.files.01.builtin.sql',1556231699,15129),('phabricator:20160711.files.02.builtinkey.sql',1556231699,8836),('phabricator:20160713.event.01.host.sql',1556231699,15511),('phabricator:20160715.event.01.alldayfrom.sql',1556231699,14131),('phabricator:20160715.event.02.alldayto.sql',1556231699,12699),('phabricator:20160715.event.03.allday.php',1556231699,86),('phabricator:20160720.calendar.invitetxn.php',1556231699,1319),('phabricator:20160721.pack.01.pub.sql',1556231699,5812),('phabricator:20160721.pack.02.pubxaction.sql',1556231699,6139),('phabricator:20160721.pack.03.edge.sql',1556231699,10806),('phabricator:20160721.pack.04.pkg.sql',1556231699,6295),('phabricator:20160721.pack.05.pkgxaction.sql',1556231699,6625),('phabricator:20160721.pack.06.version.sql',1556231699,5517),('phabricator:20160721.pack.07.versionxaction.sql',1556231699,6541),('phabricator:20160722.pack.01.pubngrams.sql',1556231699,5991),('phabricator:20160722.pack.02.pkgngrams.sql',1556231699,6165),('phabricator:20160722.pack.03.versionngrams.sql',1556231699,5845),('phabricator:20160810.commit.01.summarylength.sql',1556231699,16647),('phabricator:20160824.connectionlog.sql',1556231699,3624),('phabricator:20160824.repohint.01.hint.sql',1556231699,5880),('phabricator:20160824.repohint.02.movebad.php',1556231699,610),('phabricator:20160824.repohint.03.nukebad.sql',1556231699,3549),('phabricator:20160825.ponder.sql',1556231699,635),('phabricator:20160829.pastebin.01.language.sql',1556231699,16331),('phabricator:20160829.pastebin.02.language.sql',1556231699,560),('phabricator:20160913.conpherence.topic.1.sql',1556231699,11148),('phabricator:20160919.repo.messagecount.sql',1556231699,10883),('phabricator:20160919.repo.messagedefault.sql',1556231699,3870),('phabricator:20160921.fileexternalrequest.sql',1556231699,6461),('phabricator:20160927.phurl.ngrams.php',1556231699,88),('phabricator:20160927.phurl.ngrams.sql',1556231699,5450),('phabricator:20160928.repo.messagecount.sql',1556231699,513),('phabricator:20160928.tokentoken.sql',1556231699,7220),('phabricator:20161003.cal.01.utcepoch.sql',1556231699,39888),('phabricator:20161003.cal.02.parameters.sql',1556231699,13545),('phabricator:20161004.cal.01.noepoch.php',1556231699,1824),('phabricator:20161005.cal.01.rrules.php',1556231699,313),('phabricator:20161005.cal.02.export.sql',1556231699,6093),('phabricator:20161005.cal.03.exportxaction.sql',1556231699,6495),('phabricator:20161005.conpherence.image.1.sql',1556231699,12059),('phabricator:20161005.conpherence.image.2.php',1556231699,85),('phabricator:20161011.conpherence.ngrams.php',1556231699,65),('phabricator:20161011.conpherence.ngrams.sql',1556231699,5332),('phabricator:20161012.cal.01.import.sql',1556231699,6181),('phabricator:20161012.cal.02.importxaction.sql',1556231699,6973),('phabricator:20161012.cal.03.eventimport.sql',1556231699,52644),('phabricator:20161013.cal.01.importlog.sql',1556231699,5063),('phabricator:20161016.conpherence.imagephids.sql',1556231699,10859),('phabricator:20161025.phortune.contact.1.sql',1556231699,9620),('phabricator:20161025.phortune.merchant.image.1.sql',1556231699,11081),('phabricator:20161026.calendar.01.importtriggers.sql',1556231699,23297),('phabricator:20161027.calendar.01.externalinvitee.sql',1556231699,5726),('phabricator:20161029.phortune.invoice.1.sql',1556231699,20493),('phabricator:20161031.calendar.01.seriesparent.sql',1556231699,13938),('phabricator:20161031.calendar.02.notifylog.sql',1556231699,5033),('phabricator:20161101.calendar.01.noholiday.sql',1556231699,3280),('phabricator:20161101.calendar.02.removecolumns.sql',1556231699,78114),('phabricator:20161104.calendar.01.availability.sql',1556231699,11128),('phabricator:20161104.calendar.02.availdefault.sql',1556231699,550),('phabricator:20161115.phamepost.01.subtitle.sql',1556231699,11909),('phabricator:20161115.phamepost.02.header.sql',1556231699,13239),('phabricator:20161121.cluster.01.hoststate.sql',1556231699,4824),('phabricator:20161124.search.01.stopwords.sql',1556231699,4622),('phabricator:20161125.search.01.stemmed.sql',1556231699,7243),('phabricator:20161130.search.01.manual.sql',1556231699,5811),('phabricator:20161130.search.02.rebuild.php',1556231699,1398),('phabricator:20161210.dashboards.01.author.sql',1556231699,11083),('phabricator:20161210.dashboards.02.author.php',1556231699,1611),('phabricator:20161211.menu.01.itemkey.sql',1556231699,4255),('phabricator:20161211.menu.02.itemprops.sql',1556231699,3566),('phabricator:20161211.menu.03.order.sql',1556231699,3844),('phabricator:20161212.dashboardpanel.01.author.sql',1556231699,10207),('phabricator:20161212.dashboardpanel.02.author.php',1556231699,836),('phabricator:20161212.dashboards.01.icon.sql',1556231699,11227),('phabricator:20161213.diff.01.hunks.php',1556231699,747),('phabricator:20161216.dashboard.ngram.01.sql',1556231699,10936),('phabricator:20161216.dashboard.ngram.02.php',1556231699,114),('phabricator:20170106.menu.01.customphd.sql',1556231699,10393),('phabricator:20170109.diff.01.commit.sql',1556231699,12971),('phabricator:20170119.menuitem.motivator.01.php',1556231699,407),('phabricator:20170131.dashboard.personal.01.php',1556231699,1445),('phabricator:20170301.subtype.01.col.sql',1556231699,12251),('phabricator:20170301.subtype.02.default.sql',1556231699,687),('phabricator:20170301.subtype.03.taskcol.sql',1556231699,17435),('phabricator:20170301.subtype.04.taskdefault.sql',1556231699,554),('phabricator:20170303.people.01.avatar.sql',1556231699,27615),('phabricator:20170313.reviewers.01.sql',1556231699,5349),('phabricator:20170316.rawfiles.01.php',1556231699,1720),('phabricator:20170320.reviewers.01.lastaction.sql',1556231699,11553),('phabricator:20170320.reviewers.02.lastcomment.sql',1556231699,10266),('phabricator:20170320.reviewers.03.migrate.php',1556231699,1127),('phabricator:20170322.reviewers.04.actor.sql',1556231699,10051),('phabricator:20170328.reviewers.01.void.sql',1556231699,11143),('phabricator:20170404.files.retroactive-content-hash.sql',1556231699,19835),('phabricator:20170406.hmac.01.keystore.sql',1556231699,5350),('phabricator:20170410.calendar.01.repair.php',1556231699,576),('phabricator:20170412.conpherence.01.picturecrop.sql',1556231699,499),('phabricator:20170413.conpherence.01.recentparty.sql',1556231700,11833),('phabricator:20170417.files.ngrams.sql',1556231700,5606),('phabricator:20170418.1.application.01.xaction.sql',1556231700,6959),('phabricator:20170418.1.application.02.edge.sql',1556231700,9907),('phabricator:20170418.files.isDeleted.sql',1556231700,16731),('phabricator:20170419.app.01.table.sql',1556231700,5395),('phabricator:20170419.thread.01.behind.sql',1556231700,11820),('phabricator:20170419.thread.02.status.sql',1556231700,11320),('phabricator:20170419.thread.03.touched.sql',1556231700,12098),('phabricator:20170424.user.01.verify.php',1556231700,450),('phabricator:20170427.owners.01.long.sql',1556231700,10936),('phabricator:20170504.1.slowvote.shuffle.sql',1556231700,13917),('phabricator:20170522.nuance.01.itemkey.sql',1556231700,13967),('phabricator:20170524.nuance.01.command.sql',1556231700,29175),('phabricator:20170524.nuance.02.commandstatus.sql',1556231700,10499),('phabricator:20170526.dropdifferentialdrafts.sql',1556231700,4528),('phabricator:20170526.milestones.php',1556231700,82),('phabricator:20170528.maniphestdupes.php',1556231700,407),('phabricator:20170612.repository.image.01.sql',1556231700,14513),('phabricator:20170614.taskstatus.sql',1556231700,22946),('phabricator:20170725.legalpad.date.01.sql',1556231700,1121),('phabricator:20170811.differential.01.status.php',1556231700,436),('phabricator:20170811.differential.02.modernstatus.sql',1556231700,1112),('phabricator:20170811.differential.03.modernxaction.php',1556231700,946),('phabricator:20170814.search.01.qconfig.sql',1556231700,5484),('phabricator:20170820.phame.01.post.views.sql',1556231700,12773),('phabricator:20170820.phame.02.post.views.sql',1556231700,492),('phabricator:20170824.search.01.saved.php',1556231700,1093),('phabricator:20170825.phame.01.post.views.sql',1556231700,14383),('phabricator:20170828.ferret.01.taskdoc.sql',1556231700,4720),('phabricator:20170828.ferret.02.taskfield.sql',1556231700,4430),('phabricator:20170828.ferret.03.taskngrams.sql',1556231700,4459),('phabricator:20170830.ferret.01.unique.sql',1556231700,11567),('phabricator:20170830.ferret.02.term.sql',1556231700,10544),('phabricator:20170905.ferret.01.diff.doc.sql',1556231700,4638),('phabricator:20170905.ferret.02.diff.field.sql',1556231700,4380),('phabricator:20170905.ferret.03.diff.ngrams.sql',1556231700,4849),('phabricator:20170907.ferret.01.user.doc.sql',1556231700,4719),('phabricator:20170907.ferret.02.user.field.sql',1556231700,4741),('phabricator:20170907.ferret.03.user.ngrams.sql',1556231700,4472),('phabricator:20170907.ferret.04.fund.doc.sql',1556231700,6308),('phabricator:20170907.ferret.05.fund.field.sql',1556231700,4669),('phabricator:20170907.ferret.06.fund.ngrams.sql',1556231700,4853),('phabricator:20170907.ferret.07.passphrase.doc.sql',1556231700,4554),('phabricator:20170907.ferret.08.passphrase.field.sql',1556231700,5115),('phabricator:20170907.ferret.09.passphrase.ngrams.sql',1556231700,4083),('phabricator:20170907.ferret.10.owners.doc.sql',1556231700,4723),('phabricator:20170907.ferret.11.owners.field.sql',1556231700,5061),('phabricator:20170907.ferret.12.owners.ngrams.sql',1556231700,4786),('phabricator:20170907.ferret.13.blog.doc.sql',1556231700,4252),('phabricator:20170907.ferret.14.blog.field.sql',1556231700,4923),('phabricator:20170907.ferret.15.blog.ngrams.sql',1556231700,4231),('phabricator:20170907.ferret.16.post.doc.sql',1556231700,4741),('phabricator:20170907.ferret.17.post.field.sql',1556231700,4888),('phabricator:20170907.ferret.18.post.ngrams.sql',1556231700,5208),('phabricator:20170907.ferret.19.project.doc.sql',1556231700,4908),('phabricator:20170907.ferret.20.project.field.sql',1556231700,5022),('phabricator:20170907.ferret.21.project.ngrams.sql',1556231700,4594),('phabricator:20170907.ferret.22.phriction.doc.sql',1556231700,4889),('phabricator:20170907.ferret.23.phriction.field.sql',1556231700,4387),('phabricator:20170907.ferret.24.phriction.ngrams.sql',1556231700,4437),('phabricator:20170907.ferret.25.event.doc.sql',1556231700,5550),('phabricator:20170907.ferret.26.event.field.sql',1556231700,4987),('phabricator:20170907.ferret.27.event.ngrams.sql',1556231700,4139),('phabricator:20170907.ferret.28.mock.doc.sql',1556231700,5204),('phabricator:20170907.ferret.29.mock.field.sql',1556231700,4481),('phabricator:20170907.ferret.30.mock.ngrams.sql',1556231700,4263),('phabricator:20170907.ferret.31.repo.doc.sql',1556231700,4498),('phabricator:20170907.ferret.32.repo.field.sql',1556231700,5632),('phabricator:20170907.ferret.33.repo.ngrams.sql',1556231700,4712),('phabricator:20170907.ferret.34.commit.doc.sql',1556231700,5410),('phabricator:20170907.ferret.35.commit.field.sql',1556231700,4832),('phabricator:20170907.ferret.36.commit.ngrams.sql',1556231700,4997),('phabricator:20170912.ferret.01.activity.php',1556231700,358),('phabricator:20170914.ref.01.position.sql',1556231700,4702),('phabricator:20170915.ref.01.migrate.php',1556231700,735),('phabricator:20170915.ref.02.drop.id.sql',1556231700,11053),('phabricator:20170915.ref.03.drop.closed.sql',1556231700,10493),('phabricator:20170915.ref.04.uniq.sql',1556231700,6301),('phabricator:20170918.ref.01.position.php',1556231700,6814),('phabricator:20171002.cngram.01.maniphest.sql',1556231700,6208),('phabricator:20171002.cngram.02.event.sql',1556231700,6453),('phabricator:20171002.cngram.03.revision.sql',1556231700,5686),('phabricator:20171002.cngram.04.fund.sql',1556231700,5388),('phabricator:20171002.cngram.05.owners.sql',1556231700,5625),('phabricator:20171002.cngram.06.passphrase.sql',1556231700,6665),('phabricator:20171002.cngram.07.blog.sql',1556231700,5687),('phabricator:20171002.cngram.08.post.sql',1556231700,5555),('phabricator:20171002.cngram.09.pholio.sql',1556231700,5669),('phabricator:20171002.cngram.10.phriction.sql',1556231700,5644),('phabricator:20171002.cngram.11.project.sql',1556231700,5239),('phabricator:20171002.cngram.12.user.sql',1556231700,6475),('phabricator:20171002.cngram.13.repository.sql',1556231700,5340),('phabricator:20171002.cngram.14.commit.sql',1556231700,5519),('phabricator:20171026.ferret.01.ponder.doc.sql',1556231700,4734),('phabricator:20171026.ferret.02.ponder.field.sql',1556231700,4312),('phabricator:20171026.ferret.03.ponder.ngrams.sql',1556231700,4486),('phabricator:20171026.ferret.04.ponder.cngrams.sql',1556231700,6303),('phabricator:20171026.ferret.05.ponder.index.php',1556231700,111),('phabricator:20171101.diff.01.active.sql',1556231700,13157),('phabricator:20171101.diff.02.populate.php',1556231700,466),('phabricator:20180119.bulk.01.silent.sql',1556231700,12179),('phabricator:20180120.auth.01.password.sql',1556231700,5465),('phabricator:20180120.auth.02.passwordxaction.sql',1556231700,7117),('phabricator:20180120.auth.03.vcsdata.sql',1556231700,1196),('phabricator:20180120.auth.04.vcsphid.php',1556231700,751),('phabricator:20180121.auth.01.vcsnuke.sql',1556231700,3980),('phabricator:20180121.auth.02.passsalt.sql',1556231700,9066),('phabricator:20180121.auth.03.accountdata.sql',1556231700,607),('phabricator:20180121.auth.04.accountphid.php',1556231700,431),('phabricator:20180121.auth.05.accountnuke.sql',1556231700,29120),('phabricator:20180121.auth.06.legacydigest.sql',1556231700,9699),('phabricator:20180121.auth.07.marklegacy.sql',1556231700,567),('phabricator:20180124.herald.01.repetition.sql',1556231700,17664),('phabricator:20180207.mail.01.task.sql',1556231700,18090),('phabricator:20180207.mail.02.revision.sql',1556231700,13051),('phabricator:20180207.mail.03.mock.sql',1556231700,11482),('phabricator:20180208.maniphest.01.close.sql',1556231700,34873),('phabricator:20180208.maniphest.02.populate.php',1556231700,494),('phabricator:20180209.hook.01.hook.sql',1556231700,5084),('phabricator:20180209.hook.02.hookxaction.sql',1556231700,6844),('phabricator:20180209.hook.03.hookrequest.sql',1556231700,4822),('phabricator:20180210.hunk.01.droplegacy.sql',1556231700,4058),('phabricator:20180210.hunk.02.renamemodern.sql',1556231700,4436),('phabricator:20180212.harbor.01.receiver.sql',1556231700,14179),('phabricator:20180214.harbor.01.aborted.php',1556231700,902),('phabricator:20180215.phriction.01.phidcol.sql',1556231701,12098),('phabricator:20180215.phriction.02.phidvalues.php',1556231701,643),('phabricator:20180215.phriction.03.descempty.sql',1556231701,535),('phabricator:20180215.phriction.04.descnull.sql',1556231701,14930),('phabricator:20180215.phriction.05.statustext.sql',1556231701,15691),('phabricator:20180215.phriction.06.statusvalue.sql',1556231701,904),('phabricator:20180218.fact.01.dim.key.sql',1556231701,5182),('phabricator:20180218.fact.02.dim.obj.sql',1556231701,4795),('phabricator:20180218.fact.03.data.int.sql',1556231701,4788),('phabricator:20180222.log.01.filephid.sql',1556231701,12884),('phabricator:20180223.log.01.bytelength.sql',1556231701,11783),('phabricator:20180223.log.02.chunkformat.sql',1556231701,10735),('phabricator:20180223.log.03.chunkdefault.sql',1556231701,508),('phabricator:20180223.log.04.linemap.sql',1556231701,12025),('phabricator:20180223.log.05.linemapdefault.sql',1556231701,597),('phabricator:20180228.log.01.offset.sql',1556231701,20084),('phabricator:20180305.lock.01.locklog.sql',1556231701,4480),('phabricator:20180306.opath.01.digest.sql',1556231701,11285),('phabricator:20180306.opath.02.digestpopulate.php',1556231701,636),('phabricator:20180306.opath.03.purge.php',1556231701,422),('phabricator:20180306.opath.04.unique.sql',1556231701,6155),('phabricator:20180306.opath.05.longpath.sql',1556231701,12989),('phabricator:20180306.opath.06.pathdisplay.sql',1556231701,10854),('phabricator:20180306.opath.07.copypaths.sql',1556231701,667),('phabricator:20180309.owners.01.primaryowner.sql',1556231701,12220),('phabricator:20180312.reviewers.01.options.sql',1556231701,10529),('phabricator:20180312.reviewers.02.optionsdefault.sql',1556231701,514),('phabricator:20180322.lock.01.identifier.sql',1556231701,18925),('phabricator:20180322.lock.02.wait.sql',1556231701,35843),('phabricator:20180326.lock.03.nonunique.sql',1556231701,5998),('phabricator:20180403.draft.01.broadcast.php',1556231701,689),('phabricator:20180410.almanac.01.iface.xaction.sql',1556231701,6457),('phabricator:20180418.alamanc.interface.unique.php',1556231701,8603),('phabricator:20180418.almanac.network.unique.php',1556231701,6736),('phabricator:20180419.phlux.edges.sql',1556231701,10016),('phabricator:20180423.mail.01.properties.sql',1556231701,5352),('phabricator:20180430.repo_identity.sql',1556231701,6953),('phabricator:20180504.owners.01.mailkey.php',1556231701,613),('phabricator:20180504.owners.02.rmkey.sql',1556231701,10972),('phabricator:20180504.owners.03.properties.sql',1556231701,11898),('phabricator:20180504.owners.04.default.sql',1556231701,626),('phabricator:20180504.repo_identity.author.sql',1556231701,11039),('phabricator:20180504.repo_identity.xaction.sql',1556231701,7323),('phabricator:20180509.repo_identity.commits.sql',1556231701,13684),('phabricator:20180730.phriction.01.spaces.sql',1556231701,12193),('phabricator:20180730.project.01.spaces.sql',1556231701,16504),('phabricator:20180809.repo_identities.activity.php',1556231701,412),('phabricator:20180827.drydock.01.acquired.sql',1556231701,11934),('phabricator:20180827.drydock.02.activated.sql',1556231701,10516),('phabricator:20180828.phriction.01.contentphid.sql',1556231701,12373),('phabricator:20180828.phriction.02.documentphid.sql',1556231701,12991),('phabricator:20180828.phriction.03.editedepoch.sql',1556231701,12601),('phabricator:20180828.phriction.04.migrate.php',1556231701,612),('phabricator:20180828.phriction.05.contentid.sql',1556231701,11315),('phabricator:20180828.phriction.06.c.documentid.php',1556231701,4931),('phabricator:20180828.phriction.06.documentid.sql',1556231701,12630),('phabricator:20180828.phriction.07.c.documentuniq.sql',1556231701,539),('phabricator:20180828.phriction.07.documentkey.sql',1556231701,6810),('phabricator:20180829.phriction.01.mailkey.php',1556231701,454),('phabricator:20180829.phriction.02.rmkey.sql',1556231701,12074),('phabricator:20180830.phriction.01.maxversion.sql',1556231701,12437),('phabricator:20180830.phriction.02.maxes.php',1556231701,429),('phabricator:20180910.audit.01.searches.php',1556231701,358),('phabricator:20180910.audit.02.string.sql',1556231701,27220),('phabricator:20180910.audit.03.status.php',1556231701,1070),('phabricator:20180910.audit.04.xactions.php',1556231701,1835),('phabricator:20180914.audit.01.mailkey.php',1556231701,501),('phabricator:20180914.audit.02.rmkey.sql',1556231701,15907),('phabricator:20180914.drydock.01.operationphid.sql',1556231701,11675),('phabricator:20181024.drydock.01.commandprops.sql',1556231701,10537),('phabricator:20181024.drydock.02.commanddefaults.sql',1556231701,562),('phabricator:20181031.board.01.queryreset.php',1556231701,2252),('phabricator:20181106.repo.01.sync.sql',1556231701,5414),('phabricator:20181106.repo.02.hook.sql',1556231701,10859),('phabricator:20181213.auth.01.sessionphid.sql',1556231701,11625),('phabricator:20181213.auth.02.populatephid.php',1556231701,418),('phabricator:20181213.auth.03.phidkey.sql',1556231701,8125),('phabricator:20181213.auth.04.longerhashes.sql',1556231701,15735),('phabricator:20181213.auth.05.longerloghashes.sql',1556231701,17050),('phabricator:20181213.auth.06.challenge.sql',1556231701,5795),('phabricator:20181214.auth.01.workflowkey.sql',1556231701,9956),('phabricator:20181217.auth.01.digest.sql',1556231701,10408),('phabricator:20181217.auth.02.ttl.sql',1556231701,10154),('phabricator:20181217.auth.03.completed.sql',1556231701,10782),('phabricator:20181218.pholio.01.imageauthor.sql',1556231701,11427),('phabricator:20181219.pholio.01.imagephid.sql',1556231701,11379),('phabricator:20181219.pholio.02.imagemigrate.php',1556231701,707),('phabricator:20181219.pholio.03.imageid.sql',1556231701,11959),('phabricator:20181220.pholio.01.mailkey.php',1556231701,444),('phabricator:20181220.pholio.02.dropmailkey.sql',1556231701,11687),('phabricator:20181228.auth.01.provider.sql',1556231701,4634),('phabricator:20181228.auth.02.xaction.sql',1556231701,6313),('phabricator:20181228.auth.03.name.sql',1556231701,10666),('phabricator:20190101.sms.01.drop.sql',1556231701,4467),('phabricator:20190115.mfa.01.provider.sql',1556231701,11158),('phabricator:20190115.mfa.02.migrate.php',1556231701,974),('phabricator:20190115.mfa.03.factorkey.sql',1556231701,10875),('phabricator:20190116.contact.01.number.sql',1556231701,5635),('phabricator:20190116.contact.02.xaction.sql',1556231701,6947),('phabricator:20190116.phortune.01.billing.sql',1556231701,9904),('phabricator:20190117.authmessage.01.message.sql',1556231701,4988),('phabricator:20190117.authmessage.02.xaction.sql',1556231701,6637),('phabricator:20190121.contact.01.primary.sql',1556231701,11548),('phabricator:20190127.project.01.subtype.sql',1556231701,17416),('phabricator:20190127.project.02.default.sql',1556231701,555),('phabricator:20190129.project.01.spaces.php',1556231701,406),('phabricator:20190206.external.01.legalpad.sql',1556231701,485),('phabricator:20190206.external.02.email.sql',1556231701,524),('phabricator:20190206.external.03.providerphid.sql',1556231701,13239),('phabricator:20190206.external.04.providerlink.php',1556231701,698),('phabricator:20190207.packages.01.state.sql',1556231702,10942),('phabricator:20190207.packages.02.migrate.sql',1556231702,565),('phabricator:20190207.packages.03.drop.sql',1556231702,11126),('phabricator:20190207.packages.04.xactions.php',1556231702,1229),('phabricator:20190215.daemons.01.dropdataid.php',1556231702,5352),('phabricator:20190215.daemons.02.nulldataid.sql',1556231702,13353),('phabricator:20190215.harbor.01.stringindex.sql',1556231702,5418),('phabricator:20190215.harbor.02.stringcol.sql',1556231702,10942),('phabricator:20190220.daemon_worker.completed.01.sql',1556231702,12323),('phabricator:20190220.daemon_worker.completed.02.sql',1556231702,12844),('phabricator:20190226.harbor.01.planprops.sql',1556231702,10963),('phabricator:20190226.harbor.02.planvalue.sql',1556231702,644),('phabricator:20190307.herald.01.comments.sql',1556231702,4292),('phabricator:20190312.triggers.01.trigger.sql',1556231702,5749),('phabricator:20190312.triggers.02.xaction.sql',1556231702,7189),('phabricator:20190312.triggers.03.triggerphid.sql',1556231702,12671),('phabricator:20190322.triggers.01.usage.sql',1556231702,5436),('phabricator:20190329.portals.01.create.sql',1556231702,4633),('phabricator:20190329.portals.02.xaction.sql',1556231702,8280),('phabricator:20190410.portals.01.ferret.doc.sql',1556231702,5198),('phabricator:20190410.portals.02.ferret.field.sql',1556231702,4797),('phabricator:20190410.portals.03.ferret.ngrams.sql',1556231702,4275),('phabricator:20190410.portals.04.ferret.cngrams.sql',1556231702,5990),('phabricator:20190412.dashboard.01.panels.php',1556231702,453),('phabricator:20190412.dashboard.02.install.sql',1556231702,3768),('phabricator:20190412.dashboard.03.dashngrams.sql',1556231702,4706),('phabricator:20190412.dashboard.04.panelngrams.sql',1556231702,4492),('phabricator:20190412.dashboard.05.dferret.doc.sql',1556231702,4528),('phabricator:20190412.dashboard.06.dferret.field.sql',1556231702,5105),('phabricator:20190412.dashboard.07.dferret.ngrams.sql',1556231702,4069),('phabricator:20190412.dashboard.08.dferret.cngrams.sql',1556231702,5099),('phabricator:20190412.dashboard.09.pferret.doc.sql',1556231702,4827),('phabricator:20190412.dashboard.10.pferret.field.sql',1556231702,5374),('phabricator:20190412.dashboard.11.pferret.ngrams.sql',1556231702,5073),('phabricator:20190412.dashboard.12.pferret.cngrams.sql',1556231702,5528),('phabricator:20190412.dashboard.13.rebuild.php',1556231702,7019),('phabricator:20190412.herald.01.rebuild.php',1556231702,1878),('phabricator:20190416.chart.01.storage.sql',1556231702,4935),('phabricator:daemonstatus.sql',1556231688,NULL),('phabricator:daemonstatuskey.sql',1556231689,NULL),('phabricator:daemontaskarchive.sql',1556231689,NULL),('phabricator:db.almanac',1556231684,NULL),('phabricator:db.application',1556231684,NULL),('phabricator:db.audit',1556231684,NULL),('phabricator:db.auth',1556231684,NULL),('phabricator:db.badges',1556231684,NULL),('phabricator:db.cache',1556231684,NULL),('phabricator:db.calendar',1556231684,NULL),('phabricator:db.chatlog',1556231684,NULL),('phabricator:db.conduit',1556231684,NULL),('phabricator:db.config',1556231684,NULL),('phabricator:db.conpherence',1556231684,NULL),('phabricator:db.countdown',1556231684,NULL),('phabricator:db.daemon',1556231684,NULL),('phabricator:db.dashboard',1556231684,NULL),('phabricator:db.differential',1556231684,NULL),('phabricator:db.diviner',1556231684,NULL),('phabricator:db.doorkeeper',1556231684,NULL),('phabricator:db.draft',1556231684,NULL),('phabricator:db.drydock',1556231684,NULL),('phabricator:db.fact',1556231684,NULL),('phabricator:db.feed',1556231684,NULL),('phabricator:db.file',1556231684,NULL),('phabricator:db.flag',1556231684,NULL),('phabricator:db.fund',1556231684,NULL),('phabricator:db.harbormaster',1556231684,NULL),('phabricator:db.herald',1556231684,NULL),('phabricator:db.legalpad',1556231684,NULL),('phabricator:db.maniphest',1556231684,NULL),('phabricator:db.meta_data',1556231684,NULL),('phabricator:db.metamta',1556231684,NULL),('phabricator:db.multimeter',1556231684,NULL),('phabricator:db.nuance',1556231684,NULL),('phabricator:db.oauth_server',1556231684,NULL),('phabricator:db.owners',1556231684,NULL),('phabricator:db.packages',1556231684,NULL),('phabricator:db.passphrase',1556231684,NULL),('phabricator:db.pastebin',1556231684,NULL),('phabricator:db.phame',1556231684,NULL),('phabricator:db.phlux',1556231684,NULL),('phabricator:db.pholio',1556231684,NULL),('phabricator:db.phortune',1556231684,NULL),('phabricator:db.phragment',1556231684,NULL),('phabricator:db.phrequent',1556231684,NULL),('phabricator:db.phriction',1556231684,NULL),('phabricator:db.phurl',1556231684,NULL),('phabricator:db.policy',1556231684,NULL),('phabricator:db.ponder',1556231684,NULL),('phabricator:db.project',1556231684,NULL),('phabricator:db.releeph',1556231684,NULL),('phabricator:db.repository',1556231684,NULL),('phabricator:db.search',1556231684,NULL),('phabricator:db.slowvote',1556231684,NULL),('phabricator:db.spaces',1556231684,NULL),('phabricator:db.system',1556231684,NULL),('phabricator:db.timeline',1556231684,NULL),('phabricator:db.token',1556231684,NULL),('phabricator:db.user',1556231684,NULL),('phabricator:db.worker',1556231684,NULL),('phabricator:db.xhpast',1556231684,NULL),('phabricator:db.xhpastview',1556231684,NULL),('phabricator:db.xhprof',1556231684,NULL),('phabricator:differentialbookmarks.sql',1556231688,NULL),('phabricator:draft-metadata.sql',1556231689,NULL),('phabricator:dropfileproxyimage.sql',1556231689,NULL),('phabricator:drydockresoucetype.sql',1556231689,NULL),('phabricator:drydocktaskid.sql',1556231689,NULL),('phabricator:edgetype.sql',1556231689,NULL),('phabricator:emailtable.sql',1556231688,NULL),('phabricator:emailtableport.sql',1556231688,NULL),('phabricator:emailtableremove.sql',1556231688,NULL),('phabricator:fact-raw.sql',1556231688,NULL),('phabricator:harbormasterobject.sql',1556231688,NULL),('phabricator:holidays.sql',1556231688,NULL),('phabricator:ldapinfo.sql',1556231688,NULL),('phabricator:legalpad-mailkey-populate.php',1556231690,NULL),('phabricator:legalpad-mailkey.sql',1556231690,NULL),('phabricator:liskcounters-task.sql',1556231689,NULL),('phabricator:liskcounters.php',1556231689,NULL),('phabricator:liskcounters.sql',1556231689,NULL),('phabricator:maniphestxcache.sql',1556231688,NULL),('phabricator:markupcache.sql',1556231688,NULL),('phabricator:migrate-differential-dependencies.php',1556231688,NULL),('phabricator:migrate-maniphest-dependencies.php',1556231688,NULL),('phabricator:migrate-maniphest-revisions.php',1556231688,NULL),('phabricator:migrate-project-edges.php',1556231688,NULL),('phabricator:owners-exclude.sql',1556231689,NULL),('phabricator:pastepolicy.sql',1556231689,NULL),('phabricator:phameblog.sql',1556231688,NULL),('phabricator:phamedomain.sql',1556231689,NULL),('phabricator:phameoneblog.sql',1556231689,NULL),('phabricator:phamepolicy.sql',1556231689,NULL),('phabricator:phiddrop.sql',1556231688,NULL),('phabricator:pholio.sql',1556231689,NULL),('phabricator:policy-project.sql',1556231689,NULL),('phabricator:ponder-comments.sql',1556231689,NULL),('phabricator:ponder-mailkey-populate.php',1556231689,NULL),('phabricator:ponder-mailkey.sql',1556231689,NULL),('phabricator:ponder.sql',1556231688,NULL),('phabricator:releeph.sql',1556231689,NULL),('phabricator:repository-lint.sql',1556231689,NULL),('phabricator:statustxt.sql',1556231689,NULL),('phabricator:symbolcontexts.sql',1556231688,NULL),('phabricator:testdatabase.sql',1556231688,NULL),('phabricator:threadtopic.sql',1556231688,NULL),('phabricator:userstatus.sql',1556231688,NULL),('phabricator:usertranslation.sql',1556231688,NULL),('phabricator:xhprof.sql',1556231689,NULL);
+INSERT INTO `patch_status` VALUES ('phabricator:000.project.sql',1556231684,NULL),('phabricator:0000.legacy.sql',1556231684,NULL),('phabricator:001.maniphest_projects.sql',1556231684,NULL),('phabricator:002.oauth.sql',1556231684,NULL),('phabricator:003.more_oauth.sql',1556231684,NULL),('phabricator:004.daemonrepos.sql',1556231684,NULL),('phabricator:005.workers.sql',1556231684,NULL),('phabricator:006.repository.sql',1556231684,NULL),('phabricator:007.daemonlog.sql',1556231684,NULL),('phabricator:008.repoopt.sql',1556231684,NULL),('phabricator:009.repo_summary.sql',1556231684,NULL),('phabricator:010.herald.sql',1556231684,NULL),('phabricator:011.badcommit.sql',1556231684,NULL),('phabricator:012.dropphidtype.sql',1556231684,NULL),('phabricator:013.commitdetail.sql',1556231684,NULL),('phabricator:014.shortcuts.sql',1556231684,NULL),('phabricator:015.preferences.sql',1556231684,NULL),('phabricator:016.userrealnameindex.sql',1556231684,NULL),('phabricator:017.sessionkeys.sql',1556231684,NULL),('phabricator:018.owners.sql',1556231684,NULL),('phabricator:019.arcprojects.sql',1556231684,NULL),('phabricator:020.pathcapital.sql',1556231684,NULL),('phabricator:021.xhpastview.sql',1556231684,NULL),('phabricator:022.differentialcommit.sql',1556231684,NULL),('phabricator:023.dxkeys.sql',1556231685,NULL),('phabricator:024.mlistkeys.sql',1556231685,NULL),('phabricator:025.commentopt.sql',1556231685,NULL),('phabricator:026.diffpropkey.sql',1556231685,NULL),('phabricator:027.metamtakeys.sql',1556231685,NULL),('phabricator:028.systemagent.sql',1556231685,NULL),('phabricator:029.cursors.sql',1556231685,NULL),('phabricator:030.imagemacro.sql',1556231685,NULL),('phabricator:031.workerrace.sql',1556231685,NULL),('phabricator:032.viewtime.sql',1556231685,NULL),('phabricator:033.privtest.sql',1556231685,NULL),('phabricator:034.savedheader.sql',1556231685,NULL),('phabricator:035.proxyimage.sql',1556231685,NULL),('phabricator:036.mailkey.sql',1556231685,NULL),('phabricator:037.setuptest.sql',1556231685,NULL),('phabricator:038.admin.sql',1556231685,NULL),('phabricator:039.userlog.sql',1556231685,NULL),('phabricator:040.transform.sql',1556231685,NULL),('phabricator:041.heraldrepetition.sql',1556231685,NULL),('phabricator:042.commentmetadata.sql',1556231685,NULL),('phabricator:043.pastebin.sql',1556231685,NULL),('phabricator:044.countdown.sql',1556231685,NULL),('phabricator:045.timezone.sql',1556231685,NULL),('phabricator:046.conduittoken.sql',1556231685,NULL),('phabricator:047.projectstatus.sql',1556231685,NULL),('phabricator:048.relationshipkeys.sql',1556231685,NULL),('phabricator:049.projectowner.sql',1556231685,NULL),('phabricator:050.taskdenormal.sql',1556231685,NULL),('phabricator:051.projectfilter.sql',1556231685,NULL),('phabricator:052.pastelanguage.sql',1556231685,NULL),('phabricator:053.feed.sql',1556231685,NULL),('phabricator:054.subscribers.sql',1556231685,NULL),('phabricator:055.add_author_to_files.sql',1556231685,NULL),('phabricator:056.slowvote.sql',1556231685,NULL),('phabricator:057.parsecache.sql',1556231685,NULL),('phabricator:058.missingkeys.sql',1556231685,NULL),('phabricator:059.engines.php',1556231685,NULL),('phabricator:060.phriction.sql',1556231685,NULL),('phabricator:061.phrictioncontent.sql',1556231685,NULL),('phabricator:062.phrictionmenu.sql',1556231685,NULL),('phabricator:063.pasteforks.sql',1556231685,NULL),('phabricator:064.subprojects.sql',1556231685,NULL),('phabricator:065.sshkeys.sql',1556231685,NULL),('phabricator:066.phrictioncontent.sql',1556231685,NULL),('phabricator:067.preferences.sql',1556231685,NULL),('phabricator:068.maniphestauxiliarystorage.sql',1556231685,NULL),('phabricator:069.heraldxscript.sql',1556231685,NULL),('phabricator:070.differentialaux.sql',1556231685,NULL),('phabricator:071.contentsource.sql',1556231685,NULL),('phabricator:072.blamerevert.sql',1556231685,NULL),('phabricator:073.reposymbols.sql',1556231685,NULL),('phabricator:074.affectedpath.sql',1556231685,NULL),('phabricator:075.revisionhash.sql',1556231685,NULL),('phabricator:076.indexedlanguages.sql',1556231685,NULL),('phabricator:077.originalemail.sql',1556231685,NULL),('phabricator:078.nametoken.sql',1556231685,NULL),('phabricator:079.nametokenindex.php',1556231685,NULL),('phabricator:080.filekeys.sql',1556231685,NULL),('phabricator:081.filekeys.php',1556231685,NULL),('phabricator:082.xactionkey.sql',1556231685,NULL),('phabricator:083.dxviewtime.sql',1556231685,NULL),('phabricator:084.pasteauthorkey.sql',1556231685,NULL),('phabricator:085.packagecommitrelationship.sql',1556231685,NULL),('phabricator:086.formeraffil.sql',1556231685,NULL),('phabricator:087.phrictiondelete.sql',1556231685,NULL),('phabricator:088.audit.sql',1556231685,NULL),('phabricator:089.projectwiki.sql',1556231685,NULL),('phabricator:090.forceuniqueprojectnames.php',1556231685,NULL),('phabricator:091.uniqueslugkey.sql',1556231686,NULL),('phabricator:092.dropgithubnotification.sql',1556231686,NULL),('phabricator:093.gitremotes.php',1556231686,NULL),('phabricator:094.phrictioncolumn.sql',1556231686,NULL),('phabricator:095.directory.sql',1556231686,NULL),('phabricator:096.filename.sql',1556231686,NULL),('phabricator:097.heraldruletypes.sql',1556231686,NULL),('phabricator:098.heraldruletypemigration.php',1556231686,NULL),('phabricator:099.drydock.sql',1556231686,NULL),('phabricator:100.projectxaction.sql',1556231686,NULL),('phabricator:101.heraldruleapplied.sql',1556231686,NULL),('phabricator:102.heraldcleanup.php',1556231686,NULL),('phabricator:103.heraldedithistory.sql',1556231686,NULL),('phabricator:104.searchkey.sql',1556231686,NULL),('phabricator:105.mimetype.sql',1556231686,NULL),('phabricator:106.chatlog.sql',1556231686,NULL),('phabricator:107.oauthserver.sql',1556231686,NULL),('phabricator:108.oauthscope.sql',1556231686,NULL),('phabricator:109.oauthclientphidkey.sql',1556231686,NULL),('phabricator:110.commitaudit.sql',1556231686,NULL),('phabricator:111.commitauditmigration.php',1556231686,NULL),('phabricator:112.oauthaccesscoderedirecturi.sql',1556231686,NULL),('phabricator:113.lastreviewer.sql',1556231686,NULL),('phabricator:114.auditrequest.sql',1556231686,NULL),('phabricator:115.prepareutf8.sql',1556231686,NULL),('phabricator:116.utf8-backup-first-expect-wait.sql',1556231688,NULL),('phabricator:117.repositorydescription.php',1556231688,NULL),('phabricator:118.auditinline.sql',1556231688,NULL),('phabricator:119.filehash.sql',1556231688,NULL),('phabricator:120.noop.sql',1556231688,NULL),('phabricator:121.drydocklog.sql',1556231688,NULL),('phabricator:122.flag.sql',1556231688,NULL),('phabricator:123.heraldrulelog.sql',1556231688,NULL),('phabricator:124.subpriority.sql',1556231688,NULL),('phabricator:125.ipv6.sql',1556231688,NULL),('phabricator:126.edges.sql',1556231688,NULL),('phabricator:127.userkeybody.sql',1556231688,NULL),('phabricator:128.phabricatorcom.sql',1556231688,NULL),('phabricator:129.savedquery.sql',1556231688,NULL),('phabricator:130.denormalrevisionquery.sql',1556231688,NULL),('phabricator:131.migraterevisionquery.php',1556231688,NULL),('phabricator:132.phame.sql',1556231688,NULL),('phabricator:133.imagemacro.sql',1556231688,NULL),('phabricator:134.emptysearch.sql',1556231688,NULL),('phabricator:135.datecommitted.sql',1556231688,NULL),('phabricator:136.sex.sql',1556231688,NULL),('phabricator:137.auditmetadata.sql',1556231688,NULL),('phabricator:138.notification.sql',1556231688,NULL),('phabricator:20121209.pholioxactions.sql',1556231689,NULL),('phabricator:20121209.xmacroadd.sql',1556231689,NULL),('phabricator:20121209.xmacromigrate.php',1556231689,NULL),('phabricator:20121209.xmacromigratekey.sql',1556231689,NULL),('phabricator:20121220.generalcache.sql',1556231689,NULL),('phabricator:20121226.config.sql',1556231689,NULL),('phabricator:20130101.confxaction.sql',1556231689,NULL),('phabricator:20130102.metamtareceivedmailmessageidhash.sql',1556231689,NULL),('phabricator:20130103.filemetadata.sql',1556231689,NULL),('phabricator:20130111.conpherence.sql',1556231689,NULL),('phabricator:20130127.altheraldtranscript.sql',1556231689,NULL),('phabricator:20130131.conpherencepics.sql',1556231689,NULL),('phabricator:20130201.revisionunsubscribed.php',1556231689,NULL),('phabricator:20130201.revisionunsubscribed.sql',1556231689,NULL),('phabricator:20130214.chatlogchannel.sql',1556231689,NULL),('phabricator:20130214.chatlogchannelid.sql',1556231689,NULL),('phabricator:20130214.token.sql',1556231689,NULL),('phabricator:20130215.phabricatorfileaddttl.sql',1556231689,NULL),('phabricator:20130217.cachettl.sql',1556231689,NULL),('phabricator:20130218.longdaemon.sql',1556231689,NULL),('phabricator:20130218.updatechannelid.php',1556231689,NULL),('phabricator:20130219.commitsummary.sql',1556231689,NULL),('phabricator:20130219.commitsummarymig.php',1556231689,NULL),('phabricator:20130222.dropchannel.sql',1556231689,NULL),('phabricator:20130226.commitkey.sql',1556231689,NULL),('phabricator:20130304.lintauthor.sql',1556231689,NULL),('phabricator:20130310.xactionmeta.sql',1556231689,NULL),('phabricator:20130317.phrictionedge.sql',1556231689,NULL),('phabricator:20130319.conpherence.sql',1556231689,NULL),('phabricator:20130319.phabricatorfileexplicitupload.sql',1556231689,NULL),('phabricator:20130320.phlux.sql',1556231689,NULL),('phabricator:20130321.token.sql',1556231689,NULL),('phabricator:20130330.phrequent.sql',1556231689,NULL),('phabricator:20130403.conpherencecache.sql',1556231689,NULL),('phabricator:20130403.conpherencecachemig.php',1556231689,NULL),('phabricator:20130409.commitdrev.php',1556231689,NULL),('phabricator:20130417.externalaccount.sql',1556231689,NULL),('phabricator:20130423.conpherenceindices.sql',1556231690,NULL),('phabricator:20130423.updateexternalaccount.sql',1556231689,NULL),('phabricator:20130426.search_savedquery.sql',1556231690,NULL),('phabricator:20130502.countdownrevamp1.sql',1556231690,NULL),('phabricator:20130502.countdownrevamp2.php',1556231690,NULL),('phabricator:20130502.countdownrevamp3.sql',1556231690,NULL),('phabricator:20130507.releephrqmailkey.sql',1556231690,NULL),('phabricator:20130507.releephrqmailkeypop.php',1556231690,NULL),('phabricator:20130507.releephrqsimplifycols.sql',1556231690,NULL),('phabricator:20130508.releephtransactions.sql',1556231690,NULL),('phabricator:20130508.releephtransactionsmig.php',1556231690,NULL),('phabricator:20130508.search_namedquery.sql',1556231690,NULL),('phabricator:20130513.receviedmailstatus.sql',1556231690,NULL),('phabricator:20130519.diviner.sql',1556231690,NULL),('phabricator:20130521.dropconphimages.sql',1556231690,NULL),('phabricator:20130523.maniphest_owners.sql',1556231690,NULL),('phabricator:20130524.repoxactions.sql',1556231690,NULL),('phabricator:20130529.macroauthor.sql',1556231690,NULL),('phabricator:20130529.macroauthormig.php',1556231690,NULL),('phabricator:20130530.macrodatekey.sql',1556231690,NULL),('phabricator:20130530.pastekeys.sql',1556231690,NULL),('phabricator:20130530.sessionhash.php',1556231690,NULL),('phabricator:20130531.filekeys.sql',1556231690,NULL),('phabricator:20130602.morediviner.sql',1556231690,NULL),('phabricator:20130602.namedqueries.sql',1556231690,NULL),('phabricator:20130606.userxactions.sql',1556231690,NULL),('phabricator:20130607.xaccount.sql',1556231690,NULL),('phabricator:20130611.migrateoauth.php',1556231690,NULL),('phabricator:20130611.nukeldap.php',1556231690,NULL),('phabricator:20130613.authdb.sql',1556231690,NULL),('phabricator:20130619.authconf.php',1556231690,NULL),('phabricator:20130620.diffxactions.sql',1556231690,NULL),('phabricator:20130621.diffcommentphid.sql',1556231690,NULL),('phabricator:20130621.diffcommentphidmig.php',1556231690,NULL),('phabricator:20130621.diffcommentunphid.sql',1556231690,NULL),('phabricator:20130622.doorkeeper.sql',1556231690,NULL),('phabricator:20130628.legalpadv0.sql',1556231690,NULL),('phabricator:20130701.conduitlog.sql',1556231690,NULL),('phabricator:20130703.legalpaddocdenorm.php',1556231690,NULL),('phabricator:20130703.legalpaddocdenorm.sql',1556231690,NULL),('phabricator:20130709.droptimeline.sql',1556231690,NULL),('phabricator:20130709.legalpadsignature.sql',1556231690,NULL),('phabricator:20130711.pholioimageobsolete.php',1556231690,NULL),('phabricator:20130711.pholioimageobsolete.sql',1556231690,NULL),('phabricator:20130711.pholioimageobsolete2.sql',1556231690,NULL),('phabricator:20130711.trimrealnames.php',1556231690,NULL),('phabricator:20130714.votexactions.sql',1556231690,NULL),('phabricator:20130715.votecomments.php',1556231690,NULL),('phabricator:20130715.voteedges.sql',1556231690,NULL),('phabricator:20130716.archivememberlessprojects.php',1556231690,NULL),('phabricator:20130722.pholioreplace.sql',1556231690,NULL),('phabricator:20130723.taskstarttime.sql',1556231690,NULL),('phabricator:20130726.ponderxactions.sql',1556231690,NULL),('phabricator:20130727.ponderquestionstatus.sql',1556231690,NULL),('phabricator:20130728.ponderunique.php',1556231690,NULL),('phabricator:20130728.ponderuniquekey.sql',1556231690,NULL),('phabricator:20130728.ponderxcomment.php',1556231690,NULL),('phabricator:20130731.releephcutpointidentifier.sql',1556231690,NULL),('phabricator:20130731.releephproject.sql',1556231690,NULL),('phabricator:20130731.releephrepoid.sql',1556231690,NULL),('phabricator:20130801.pastexactions.php',1556231690,NULL),('phabricator:20130801.pastexactions.sql',1556231690,NULL),('phabricator:20130802.heraldphid.sql',1556231690,NULL),('phabricator:20130802.heraldphids.php',1556231690,NULL),('phabricator:20130802.heraldphidukey.sql',1556231690,NULL),('phabricator:20130802.heraldxactions.sql',1556231690,NULL),('phabricator:20130805.pasteedges.sql',1556231690,NULL),('phabricator:20130805.pastemailkey.sql',1556231690,NULL),('phabricator:20130805.pastemailkeypop.php',1556231690,NULL),('phabricator:20130814.usercustom.sql',1556231690,NULL),('phabricator:20130820.file-mailkey-populate.php',1556231691,NULL),('phabricator:20130820.filemailkey.sql',1556231691,NULL),('phabricator:20130820.filexactions.sql',1556231691,NULL),('phabricator:20130820.releephxactions.sql',1556231690,NULL),('phabricator:20130826.divinernode.sql',1556231691,NULL),('phabricator:20130912.maniphest.1.touch.sql',1556231691,NULL),('phabricator:20130912.maniphest.2.created.sql',1556231691,NULL),('phabricator:20130912.maniphest.3.nameindex.sql',1556231691,NULL),('phabricator:20130912.maniphest.4.fillindex.php',1556231691,NULL),('phabricator:20130913.maniphest.1.migratesearch.php',1556231691,NULL),('phabricator:20130914.usercustom.sql',1556231691,NULL),('phabricator:20130915.maniphestcustom.sql',1556231691,NULL),('phabricator:20130915.maniphestmigrate.php',1556231691,NULL),('phabricator:20130915.maniphestqdrop.sql',1556231691,NULL),('phabricator:20130919.mfieldconf.php',1556231691,NULL),('phabricator:20130920.repokeyspolicy.sql',1556231691,NULL),('phabricator:20130921.mtransactions.sql',1556231691,NULL),('phabricator:20130921.xmigratemaniphest.php',1556231691,NULL),('phabricator:20130923.mrename.sql',1556231691,NULL),('phabricator:20130924.mdraftkey.sql',1556231691,NULL),('phabricator:20130925.mpolicy.sql',1556231691,NULL),('phabricator:20130925.xpolicy.sql',1556231691,NULL),('phabricator:20130926.dcustom.sql',1556231691,NULL),('phabricator:20130926.dinkeys.sql',1556231691,NULL),('phabricator:20130926.dinline.php',1556231691,NULL),('phabricator:20130927.audiomacro.sql',1556231691,NULL),('phabricator:20130929.filepolicy.sql',1556231691,NULL),('phabricator:20131004.dxedgekey.sql',1556231691,NULL),('phabricator:20131004.dxreviewers.php',1556231691,NULL),('phabricator:20131006.hdisable.sql',1556231691,NULL),('phabricator:20131010.pstorage.sql',1556231691,NULL),('phabricator:20131015.cpolicy.sql',1556231691,NULL),('phabricator:20131020.col1.sql',1556231691,NULL),('phabricator:20131020.harbormaster.sql',1556231691,NULL),('phabricator:20131020.pcustom.sql',1556231691,NULL),('phabricator:20131020.pxaction.sql',1556231691,NULL),('phabricator:20131020.pxactionmig.php',1556231691,NULL),('phabricator:20131025.repopush.sql',1556231691,NULL),('phabricator:20131026.commitstatus.sql',1556231691,NULL),('phabricator:20131030.repostatusmessage.sql',1556231691,NULL),('phabricator:20131031.vcspassword.sql',1556231691,NULL),('phabricator:20131105.buildstep.sql',1556231691,NULL),('phabricator:20131106.diffphid.1.col.sql',1556231691,NULL),('phabricator:20131106.diffphid.2.mig.php',1556231691,NULL),('phabricator:20131106.diffphid.3.key.sql',1556231691,NULL),('phabricator:20131106.nuance-v0.sql',1556231691,NULL),('phabricator:20131107.buildlog.sql',1556231691,NULL),('phabricator:20131112.userverified.1.col.sql',1556231691,NULL),('phabricator:20131112.userverified.2.mig.php',1556231691,NULL),('phabricator:20131118.ownerorder.php',1556231691,NULL),('phabricator:20131119.passphrase.sql',1556231691,NULL),('phabricator:20131120.nuancesourcetype.sql',1556231691,NULL),('phabricator:20131121.passphraseedge.sql',1556231691,NULL),('phabricator:20131121.repocredentials.1.col.sql',1556231691,NULL),('phabricator:20131121.repocredentials.2.mig.php',1556231691,NULL),('phabricator:20131122.repomirror.sql',1556231691,NULL),('phabricator:20131123.drydockblueprintpolicy.sql',1556231691,NULL),('phabricator:20131129.drydockresourceblueprint.sql',1556231691,NULL),('phabricator:20131204.pushlog.sql',1556231691,NULL),('phabricator:20131205.buildsteporder.sql',1556231691,NULL),('phabricator:20131205.buildstepordermig.php',1556231691,NULL),('phabricator:20131205.buildtargets.sql',1556231691,NULL),('phabricator:20131206.phragment.sql',1556231691,NULL),('phabricator:20131206.phragmentnull.sql',1556231691,NULL),('phabricator:20131208.phragmentsnapshot.sql',1556231691,NULL),('phabricator:20131211.phragmentedges.sql',1556231691,NULL),('phabricator:20131217.pushlogphid.1.col.sql',1556231691,NULL),('phabricator:20131217.pushlogphid.2.mig.php',1556231691,NULL),('phabricator:20131217.pushlogphid.3.key.sql',1556231692,NULL),('phabricator:20131219.pxdrop.sql',1556231692,NULL),('phabricator:20131224.harbormanual.sql',1556231692,NULL),('phabricator:20131227.heraldobject.sql',1556231692,NULL),('phabricator:20131231.dropshortcut.sql',1556231692,NULL),('phabricator:20131302.maniphestvalue.sql',1556231689,NULL),('phabricator:20140104.harbormastercmd.sql',1556231692,NULL),('phabricator:20140106.macromailkey.1.sql',1556231692,NULL),('phabricator:20140106.macromailkey.2.php',1556231692,NULL),('phabricator:20140108.ddbpname.1.sql',1556231692,NULL),('phabricator:20140108.ddbpname.2.php',1556231692,NULL),('phabricator:20140109.ddxactions.sql',1556231692,NULL),('phabricator:20140109.projectcolumnsdates.sql',1556231692,NULL),('phabricator:20140113.legalpadsig.1.sql',1556231692,NULL),('phabricator:20140113.legalpadsig.2.php',1556231692,NULL),('phabricator:20140115.auth.1.id.sql',1556231692,NULL),('phabricator:20140115.auth.2.expires.sql',1556231692,NULL),('phabricator:20140115.auth.3.unlimit.php',1556231692,NULL),('phabricator:20140115.legalpadsigkey.sql',1556231692,NULL),('phabricator:20140116.reporefcursor.sql',1556231692,NULL),('phabricator:20140126.diff.1.parentrevisionid.sql',1556231692,NULL),('phabricator:20140126.diff.2.repositoryphid.sql',1556231692,NULL),('phabricator:20140130.dash.1.board.sql',1556231692,NULL),('phabricator:20140130.dash.2.panel.sql',1556231692,NULL),('phabricator:20140130.dash.3.boardxaction.sql',1556231692,NULL),('phabricator:20140130.dash.4.panelxaction.sql',1556231692,NULL),('phabricator:20140130.mail.1.retry.sql',1556231692,NULL),('phabricator:20140130.mail.2.next.sql',1556231692,NULL),('phabricator:20140201.gc.1.mailsent.sql',1556231692,NULL),('phabricator:20140201.gc.2.mailreceived.sql',1556231692,NULL),('phabricator:20140205.cal.1.rename.sql',1556231692,NULL),('phabricator:20140205.cal.2.phid-col.sql',1556231692,NULL),('phabricator:20140205.cal.3.phid-mig.php',1556231692,NULL),('phabricator:20140205.cal.4.phid-key.sql',1556231692,NULL),('phabricator:20140210.herald.rule-condition-mig.php',1556231692,NULL),('phabricator:20140210.projcfield.1.blurb.php',1556231692,NULL),('phabricator:20140210.projcfield.2.piccol.sql',1556231692,NULL),('phabricator:20140210.projcfield.3.picmig.sql',1556231692,NULL),('phabricator:20140210.projcfield.4.memmig.sql',1556231692,NULL),('phabricator:20140210.projcfield.5.dropprofile.sql',1556231692,NULL),('phabricator:20140211.dx.1.nullablechangesetid.sql',1556231692,NULL),('phabricator:20140211.dx.2.migcommenttext.php',1556231692,NULL),('phabricator:20140211.dx.3.migsubscriptions.sql',1556231692,NULL),('phabricator:20140211.dx.999.drop.relationships.sql',1556231692,NULL),('phabricator:20140212.dx.1.armageddon.php',1556231692,NULL),('phabricator:20140214.clean.1.legacycommentid.sql',1556231692,NULL),('phabricator:20140214.clean.2.dropcomment.sql',1556231692,NULL),('phabricator:20140214.clean.3.dropinline.sql',1556231692,NULL),('phabricator:20140218.differentialdraft.sql',1556231692,NULL),('phabricator:20140218.passwords.1.extend.sql',1556231692,NULL),('phabricator:20140218.passwords.2.prefix.sql',1556231692,NULL),('phabricator:20140218.passwords.3.vcsextend.sql',1556231692,NULL),('phabricator:20140218.passwords.4.vcs.php',1556231692,NULL),('phabricator:20140223.bigutf8scratch.sql',1556231692,NULL),('phabricator:20140224.dxclean.1.datecommitted.sql',1556231692,NULL),('phabricator:20140226.dxcustom.1.fielddata.php',1556231692,NULL),('phabricator:20140226.dxcustom.99.drop.sql',1556231692,NULL),('phabricator:20140228.dxcomment.1.sql',1556231692,NULL),('phabricator:20140305.diviner.1.slugcol.sql',1556231692,NULL),('phabricator:20140305.diviner.2.slugkey.sql',1556231692,NULL),('phabricator:20140311.mdroplegacy.sql',1556231692,NULL),('phabricator:20140314.projectcolumn.1.statuscol.sql',1556231692,NULL),('phabricator:20140314.projectcolumn.2.statuskey.sql',1556231692,NULL),('phabricator:20140317.mupdatedkey.sql',1556231692,NULL),('phabricator:20140321.harbor.1.bxaction.sql',1556231692,NULL),('phabricator:20140321.mstatus.1.col.sql',1556231692,NULL),('phabricator:20140321.mstatus.2.mig.php',1556231692,NULL),('phabricator:20140323.harbor.1.renames.php',1556231692,NULL),('phabricator:20140323.harbor.2.message.sql',1556231692,NULL),('phabricator:20140325.push.1.event.sql',1556231692,NULL),('phabricator:20140325.push.2.eventphid.sql',1556231692,NULL),('phabricator:20140325.push.3.groups.php',1556231692,NULL),('phabricator:20140325.push.4.prune.sql',1556231692,NULL),('phabricator:20140326.project.1.colxaction.sql',1556231692,NULL),('phabricator:20140328.releeph.1.productxaction.sql',1556231692,NULL),('phabricator:20140330.flagtext.sql',1556231692,NULL),('phabricator:20140402.actionlog.sql',1556231692,NULL),('phabricator:20140410.accountsecret.1.sql',1556231692,NULL),('phabricator:20140410.accountsecret.2.php',1556231692,NULL),('phabricator:20140416.harbor.1.sql',1556231692,NULL),('phabricator:20140420.rel.1.objectphid.sql',1556231692,NULL),('phabricator:20140420.rel.2.objectmig.php',1556231692,NULL),('phabricator:20140421.slowvotecolumnsisclosed.sql',1556231692,NULL),('phabricator:20140423.session.1.hisec.sql',1556231692,NULL),('phabricator:20140427.mfactor.1.sql',1556231692,NULL),('phabricator:20140430.auth.1.partial.sql',1556231692,NULL),('phabricator:20140430.dash.1.paneltype.sql',1556231692,NULL),('phabricator:20140430.dash.2.edge.sql',1556231692,NULL),('phabricator:20140501.passphraselockcredential.sql',1556231692,NULL),('phabricator:20140501.remove.1.dlog.sql',1556231692,NULL),('phabricator:20140507.smstable.sql',1556231692,NULL),('phabricator:20140509.coverage.1.sql',1556231692,NULL),('phabricator:20140509.dashboardlayoutconfig.sql',1556231692,NULL),('phabricator:20140512.dparents.1.sql',1556231692,NULL),('phabricator:20140514.harbormasterbuildabletransaction.sql',1556231692,NULL),('phabricator:20140514.pholiomockclose.sql',1556231692,NULL),('phabricator:20140515.trust-emails.sql',1556231692,NULL),('phabricator:20140517.dxbinarycache.sql',1556231692,NULL),('phabricator:20140518.dxmorebinarycache.sql',1556231693,NULL),('phabricator:20140519.dashboardinstall.sql',1556231693,NULL),('phabricator:20140520.authtemptoken.sql',1556231693,NULL),('phabricator:20140521.projectslug.1.create.sql',1556231693,NULL),('phabricator:20140521.projectslug.2.mig.php',1556231693,NULL),('phabricator:20140522.projecticon.sql',1556231693,NULL),('phabricator:20140524.auth.mfa.cache.sql',1556231693,NULL),('phabricator:20140525.hunkmodern.sql',1556231693,NULL),('phabricator:20140615.pholioedit.1.sql',1556231693,NULL),('phabricator:20140615.pholioedit.2.sql',1556231693,NULL),('phabricator:20140617.daemon.explicit-argv.sql',1556231693,NULL),('phabricator:20140617.daemonlog.sql',1556231693,NULL),('phabricator:20140624.projcolor.1.sql',1556231693,NULL),('phabricator:20140624.projcolor.2.sql',1556231693,NULL),('phabricator:20140629.dasharchive.1.sql',1556231693,NULL),('phabricator:20140629.legalsig.1.sql',1556231693,NULL),('phabricator:20140629.legalsig.2.php',1556231693,NULL),('phabricator:20140701.legalexemption.1.sql',1556231693,NULL),('phabricator:20140701.legalexemption.2.sql',1556231693,NULL),('phabricator:20140703.legalcorp.1.sql',1556231693,NULL),('phabricator:20140703.legalcorp.2.sql',1556231693,NULL),('phabricator:20140703.legalcorp.3.sql',1556231693,NULL),('phabricator:20140703.legalcorp.4.sql',1556231693,NULL),('phabricator:20140703.legalcorp.5.sql',1556231693,NULL),('phabricator:20140704.harbormasterstep.1.sql',1556231693,NULL),('phabricator:20140704.harbormasterstep.2.sql',1556231693,NULL),('phabricator:20140704.legalpreamble.1.sql',1556231693,NULL),('phabricator:20140706.harbormasterdepend.1.php',1556231693,NULL),('phabricator:20140706.pedge.1.sql',1556231693,NULL),('phabricator:20140711.pnames.1.sql',1556231693,NULL),('phabricator:20140711.pnames.2.php',1556231693,NULL),('phabricator:20140711.workerpriority.sql',1556231693,NULL),('phabricator:20140712.projcoluniq.sql',1556231693,NULL),('phabricator:20140722.appname.php',1556231693,NULL),('phabricator:20140722.audit.1.xactions.sql',1556231693,NULL),('phabricator:20140722.audit.2.comments.sql',1556231693,NULL),('phabricator:20140722.audit.3.miginlines.php',1556231693,NULL),('phabricator:20140722.audit.4.migtext.php',1556231693,NULL),('phabricator:20140722.renameauth.php',1556231693,NULL),('phabricator:20140723.apprenamexaction.sql',1556231693,NULL),('phabricator:20140725.audit.1.migxactions.php',1556231693,NULL),('phabricator:20140731.audit.1.subscribers.php',1556231693,NULL),('phabricator:20140731.cancdn.php',1556231693,NULL),('phabricator:20140731.harbormasterstepdesc.sql',1556231693,NULL),('phabricator:20140805.boardcol.1.sql',1556231693,NULL),('phabricator:20140805.boardcol.2.php',1556231693,NULL),('phabricator:20140807.harbormastertargettime.sql',1556231693,NULL),('phabricator:20140808.boardprop.1.sql',1556231693,NULL),('phabricator:20140808.boardprop.2.sql',1556231693,NULL),('phabricator:20140808.boardprop.3.php',1556231693,NULL),('phabricator:20140811.blob.1.sql',1556231693,NULL),('phabricator:20140811.blob.2.sql',1556231693,NULL),('phabricator:20140812.projkey.1.sql',1556231693,NULL),('phabricator:20140812.projkey.2.sql',1556231693,NULL),('phabricator:20140814.passphrasecredentialconduit.sql',1556231693,NULL),('phabricator:20140815.cancdncase.php',1556231693,NULL),('phabricator:20140818.harbormasterindex.1.sql',1556231693,NULL),('phabricator:20140821.harbormasterbuildgen.1.sql',1556231693,NULL),('phabricator:20140822.daemonenvhash.sql',1556231693,NULL),('phabricator:20140902.almanacdevice.1.sql',1556231693,NULL),('phabricator:20140904.macroattach.php',1556231693,NULL),('phabricator:20140914.betaproto.php',1556231693,NULL),('phabricator:20140917.project.canlock.sql',1556231693,NULL),('phabricator:20140918.schema.1.dropaudit.sql',1556231693,NULL),('phabricator:20140918.schema.2.dropauditinline.sql',1556231693,NULL),('phabricator:20140918.schema.3.wipecache.sql',1556231693,NULL),('phabricator:20140918.schema.4.cachetype.sql',1556231693,NULL),('phabricator:20140918.schema.5.slowvote.sql',1556231693,NULL),('phabricator:20140919.schema.01.calstatus.sql',1556231693,NULL),('phabricator:20140919.schema.02.calname.sql',1556231693,NULL),('phabricator:20140919.schema.03.dropaux.sql',1556231693,NULL),('phabricator:20140919.schema.04.droptaskproj.sql',1556231693,NULL),('phabricator:20140926.schema.01.droprelev.sql',1556231693,NULL),('phabricator:20140926.schema.02.droprelreqev.sql',1556231693,NULL),('phabricator:20140926.schema.03.dropldapinfo.sql',1556231693,NULL),('phabricator:20140926.schema.04.dropoauthinfo.sql',1556231693,NULL),('phabricator:20140926.schema.05.dropprojaffil.sql',1556231693,NULL),('phabricator:20140926.schema.06.dropsubproject.sql',1556231693,NULL),('phabricator:20140926.schema.07.droppondcom.sql',1556231693,NULL),('phabricator:20140927.schema.01.dropsearchq.sql',1556231693,NULL),('phabricator:20140927.schema.02.pholio1.sql',1556231693,NULL),('phabricator:20140927.schema.03.pholio2.sql',1556231693,NULL),('phabricator:20140927.schema.04.pholio3.sql',1556231693,NULL),('phabricator:20140927.schema.05.phragment1.sql',1556231693,NULL),('phabricator:20140927.schema.06.releeph1.sql',1556231693,NULL),('phabricator:20141001.schema.01.version.sql',1556231693,NULL),('phabricator:20141001.schema.02.taskmail.sql',1556231693,NULL),('phabricator:20141002.schema.01.liskcounter.sql',1556231693,NULL),('phabricator:20141002.schema.02.draftnull.sql',1556231693,NULL),('phabricator:20141004.currency.01.sql',1556231693,NULL),('phabricator:20141004.currency.02.sql',1556231693,NULL),('phabricator:20141004.currency.03.sql',1556231693,NULL),('phabricator:20141004.currency.04.sql',1556231693,NULL),('phabricator:20141004.currency.05.sql',1556231693,NULL),('phabricator:20141004.currency.06.sql',1556231693,NULL),('phabricator:20141004.harborliskcounter.sql',1556231693,NULL),('phabricator:20141016.almanac.device.sql',1556231694,NULL),('phabricator:20141016.almanac.dxaction.sql',1556231694,NULL),('phabricator:20141016.almanac.interface.sql',1556231694,NULL),('phabricator:20141016.almanac.network.sql',1556231694,NULL),('phabricator:20141016.almanac.nxaction.sql',1556231694,NULL),('phabricator:20141016.almanac.service.sql',1556231694,NULL),('phabricator:20141016.almanac.sxaction.sql',1556231694,NULL),('phabricator:20141017.almanac.binding.sql',1556231694,NULL),('phabricator:20141017.almanac.bxaction.sql',1556231694,NULL),('phabricator:20141025.phriction.1.xaction.sql',1556231694,NULL),('phabricator:20141025.phriction.2.xaction.sql',1556231694,NULL),('phabricator:20141025.phriction.mailkey.sql',1556231694,NULL),('phabricator:20141103.almanac.1.delprop.sql',1556231694,NULL),('phabricator:20141103.almanac.2.addprop.sql',1556231694,NULL),('phabricator:20141104.almanac.3.edge.sql',1556231694,NULL),('phabricator:20141105.ssh.1.rename.sql',1556231694,NULL),('phabricator:20141106.dropold.sql',1556231694,NULL),('phabricator:20141106.uniqdrafts.php',1556231694,NULL),('phabricator:20141107.phriction.policy.1.sql',1556231694,NULL),('phabricator:20141107.phriction.policy.2.php',1556231694,NULL),('phabricator:20141107.phriction.popkeys.php',1556231694,NULL),('phabricator:20141107.ssh.1.colname.sql',1556231694,NULL),('phabricator:20141107.ssh.2.keyhash.sql',1556231694,NULL),('phabricator:20141107.ssh.3.keyindex.sql',1556231694,NULL),('phabricator:20141107.ssh.4.keymig.php',1556231694,NULL),('phabricator:20141107.ssh.5.indexnull.sql',1556231694,NULL),('phabricator:20141107.ssh.6.indexkey.sql',1556231694,NULL),('phabricator:20141107.ssh.7.colnull.sql',1556231694,NULL),('phabricator:20141113.auditdupes.php',1556231694,NULL),('phabricator:20141118.diffxaction.sql',1556231694,NULL),('phabricator:20141119.commitpedge.sql',1556231694,NULL),('phabricator:20141119.differential.diff.policy.sql',1556231694,NULL),('phabricator:20141119.sshtrust.sql',1556231694,NULL),('phabricator:20141123.taskpriority.1.sql',1556231694,NULL),('phabricator:20141123.taskpriority.2.sql',1556231694,NULL),('phabricator:20141210.maniphestsubscribersmig.1.sql',1556231694,NULL),('phabricator:20141210.maniphestsubscribersmig.2.sql',1556231694,NULL),('phabricator:20141210.reposervice.sql',1556231694,NULL),('phabricator:20141212.conduittoken.sql',1556231694,NULL),('phabricator:20141215.almanacservicetype.sql',1556231694,NULL),('phabricator:20141217.almanacdevicelock.sql',1556231694,NULL),('phabricator:20141217.almanaclock.sql',1556231694,NULL),('phabricator:20141218.maniphestcctxn.php',1556231694,NULL),('phabricator:20141222.maniphestprojtxn.php',1556231694,NULL),('phabricator:20141223.daemonloguser.sql',1556231694,NULL),('phabricator:20141223.daemonobjectphid.sql',1556231694,NULL),('phabricator:20141230.pasteeditpolicycolumn.sql',1556231694,NULL),('phabricator:20141230.pasteeditpolicyexisting.sql',1556231694,NULL),('phabricator:20150102.policyname.php',1556231694,NULL),('phabricator:20150102.tasksubscriber.sql',1556231694,NULL),('phabricator:20150105.conpsearch.sql',1556231694,NULL),('phabricator:20150114.oauthserver.client.policy.sql',1556231694,NULL),('phabricator:20150115.applicationemails.sql',1556231694,NULL),('phabricator:20150115.trigger.1.sql',1556231694,NULL),('phabricator:20150115.trigger.2.sql',1556231694,NULL),('phabricator:20150116.maniphestapplicationemails.php',1556231694,NULL),('phabricator:20150120.maniphestdefaultauthor.php',1556231694,NULL),('phabricator:20150124.subs.1.sql',1556231694,NULL),('phabricator:20150129.pastefileapplicationemails.php',1556231694,NULL),('phabricator:20150205.authprovider.autologin.sql',1556231695,NULL),('phabricator:20150205.daemonenv.sql',1556231695,NULL),('phabricator:20150209.invite.sql',1556231695,NULL),('phabricator:20150209.oauthclient.trust.sql',1556231695,NULL),('phabricator:20150210.invitephid.sql',1556231695,NULL),('phabricator:20150212.legalpad.session.1.sql',1556231695,NULL),('phabricator:20150212.legalpad.session.2.sql',1556231695,NULL),('phabricator:20150219.scratch.nonmutable.sql',1556231695,NULL),('phabricator:20150223.daemon.1.id.sql',1556231695,NULL),('phabricator:20150223.daemon.2.idlegacy.sql',1556231695,NULL),('phabricator:20150223.daemon.3.idkey.sql',1556231695,NULL),('phabricator:20150312.filechunk.1.sql',1556231695,NULL),('phabricator:20150312.filechunk.2.sql',1556231695,NULL),('phabricator:20150312.filechunk.3.sql',1556231695,NULL),('phabricator:20150317.conpherence.isroom.1.sql',1556231695,NULL),('phabricator:20150317.conpherence.isroom.2.sql',1556231695,NULL),('phabricator:20150317.conpherence.policy.sql',1556231695,NULL),('phabricator:20150410.nukeruleedit.sql',1556231695,NULL),('phabricator:20150420.invoice.1.sql',1556231695,NULL),('phabricator:20150420.invoice.2.sql',1556231695,NULL),('phabricator:20150425.isclosed.sql',1556231695,NULL),('phabricator:20150427.calendar.1.edge.sql',1556231695,NULL),('phabricator:20150427.calendar.1.xaction.sql',1556231695,NULL),('phabricator:20150427.calendar.2.xaction.sql',1556231695,NULL),('phabricator:20150428.calendar.1.iscancelled.sql',1556231695,NULL),('phabricator:20150428.calendar.1.name.sql',1556231695,NULL),('phabricator:20150429.calendar.1.invitee.sql',1556231695,NULL),('phabricator:20150430.calendar.1.policies.sql',1556231695,NULL),('phabricator:20150430.multimeter.1.sql',1556231695,NULL),('phabricator:20150430.multimeter.2.host.sql',1556231695,NULL),('phabricator:20150430.multimeter.3.viewer.sql',1556231695,NULL),('phabricator:20150430.multimeter.4.context.sql',1556231695,NULL),('phabricator:20150430.multimeter.5.label.sql',1556231695,NULL),('phabricator:20150501.calendar.1.reply.sql',1556231695,NULL),('phabricator:20150501.calendar.2.reply.php',1556231695,NULL),('phabricator:20150501.conpherencepics.sql',1556231695,NULL),('phabricator:20150503.repositorysymbols.1.sql',1556231695,NULL),('phabricator:20150503.repositorysymbols.2.php',1556231695,NULL),('phabricator:20150503.repositorysymbols.3.sql',1556231695,NULL),('phabricator:20150504.symbolsproject.1.php',1556231695,NULL),('phabricator:20150504.symbolsproject.2.sql',1556231695,NULL),('phabricator:20150506.calendarunnamedevents.1.php',1556231695,NULL),('phabricator:20150507.calendar.1.isallday.sql',1556231695,NULL),('phabricator:20150513.user.cache.1.sql',1556231695,NULL),('phabricator:20150514.calendar.status.sql',1556231695,NULL),('phabricator:20150514.phame.blog.xaction.sql',1556231695,NULL),('phabricator:20150514.user.cache.2.sql',1556231695,NULL),('phabricator:20150515.phame.post.xaction.sql',1556231695,NULL),('phabricator:20150515.project.mailkey.1.sql',1556231695,NULL),('phabricator:20150515.project.mailkey.2.php',1556231695,NULL),('phabricator:20150519.calendar.calendaricon.sql',1556231695,NULL),('phabricator:20150521.releephrepository.sql',1556231695,NULL),('phabricator:20150525.diff.hidden.1.sql',1556231695,NULL),('phabricator:20150526.owners.mailkey.1.sql',1556231695,NULL),('phabricator:20150526.owners.mailkey.2.php',1556231695,NULL),('phabricator:20150526.owners.xaction.sql',1556231695,NULL),('phabricator:20150527.calendar.recurringevents.sql',1556231695,NULL),('phabricator:20150601.spaces.1.namespace.sql',1556231695,NULL),('phabricator:20150601.spaces.2.xaction.sql',1556231695,NULL),('phabricator:20150602.mlist.1.sql',1556231695,NULL),('phabricator:20150602.mlist.2.php',1556231695,NULL),('phabricator:20150604.spaces.1.sql',1556231695,NULL),('phabricator:20150605.diviner.edges.sql',1556231695,NULL),('phabricator:20150605.diviner.editPolicy.sql',1556231695,NULL),('phabricator:20150605.diviner.xaction.sql',1556231695,NULL),('phabricator:20150606.mlist.1.php',1556231695,NULL),('phabricator:20150609.inline.sql',1556231695,NULL),('phabricator:20150609.spaces.1.pholio.sql',1556231695,NULL),('phabricator:20150609.spaces.2.maniphest.sql',1556231695,NULL),('phabricator:20150610.spaces.1.desc.sql',1556231695,NULL),('phabricator:20150610.spaces.2.edge.sql',1556231695,NULL),('phabricator:20150610.spaces.3.archive.sql',1556231695,NULL),('phabricator:20150611.spaces.1.mailxaction.sql',1556231695,NULL),('phabricator:20150611.spaces.2.appmail.sql',1556231695,NULL),('phabricator:20150616.divinerrepository.sql',1556231695,NULL),('phabricator:20150617.harbor.1.lint.sql',1556231695,NULL),('phabricator:20150617.harbor.2.unit.sql',1556231695,NULL),('phabricator:20150618.harbor.1.planauto.sql',1556231695,NULL),('phabricator:20150618.harbor.2.stepauto.sql',1556231695,NULL),('phabricator:20150618.harbor.3.buildauto.sql',1556231695,NULL),('phabricator:20150619.conpherencerooms.1.sql',1556231695,NULL),('phabricator:20150619.conpherencerooms.2.sql',1556231695,NULL),('phabricator:20150619.conpherencerooms.3.sql',1556231695,NULL),('phabricator:20150621.phrase.1.sql',1556231695,NULL),('phabricator:20150621.phrase.2.sql',1556231695,NULL),('phabricator:20150622.bulk.1.job.sql',1556231695,NULL),('phabricator:20150622.bulk.2.task.sql',1556231695,NULL),('phabricator:20150622.bulk.3.xaction.sql',1556231695,NULL),('phabricator:20150622.bulk.4.edge.sql',1556231696,NULL),('phabricator:20150622.metamta.1.phid-col.sql',1556231696,NULL),('phabricator:20150622.metamta.2.phid-mig.php',1556231696,NULL),('phabricator:20150622.metamta.3.phid-key.sql',1556231696,NULL),('phabricator:20150622.metamta.4.actor-phid-col.sql',1556231696,NULL),('phabricator:20150622.metamta.5.actor-phid-mig.php',1556231696,NULL),('phabricator:20150622.metamta.6.actor-phid-key.sql',1556231696,NULL),('phabricator:20150624.spaces.1.repo.sql',1556231696,NULL),('phabricator:20150626.spaces.1.calendar.sql',1556231696,NULL),('phabricator:20150630.herald.1.sql',1556231696,NULL),('phabricator:20150630.herald.2.sql',1556231696,NULL),('phabricator:20150701.herald.1.sql',1556231696,NULL),('phabricator:20150701.herald.2.sql',1556231696,NULL),('phabricator:20150702.spaces.1.slowvote.sql',1556231696,NULL),('phabricator:20150706.herald.1.sql',1556231696,NULL),('phabricator:20150707.herald.1.sql',1556231696,NULL),('phabricator:20150708.arcanistproject.sql',1556231696,NULL),('phabricator:20150708.herald.1.sql',1556231696,NULL),('phabricator:20150708.herald.2.sql',1556231696,NULL),('phabricator:20150708.herald.3.sql',1556231696,NULL),('phabricator:20150712.badges.1.sql',1556231696,NULL),('phabricator:20150714.spaces.countdown.1.sql',1556231696,NULL),('phabricator:20150717.herald.1.sql',1556231696,NULL),('phabricator:20150719.countdown.1.sql',1556231696,NULL),('phabricator:20150719.countdown.2.sql',1556231696,NULL),('phabricator:20150719.countdown.3.sql',1556231696,NULL),('phabricator:20150721.phurl.1.url.sql',1556231696,NULL),('phabricator:20150721.phurl.2.xaction.sql',1556231696,NULL),('phabricator:20150721.phurl.3.xactioncomment.sql',1556231696,NULL),('phabricator:20150721.phurl.4.url.sql',1556231696,NULL),('phabricator:20150721.phurl.5.edge.sql',1556231696,NULL),('phabricator:20150721.phurl.6.alias.sql',1556231696,NULL),('phabricator:20150721.phurl.7.authorphid.sql',1556231696,NULL),('phabricator:20150722.dashboard.1.sql',1556231696,NULL),('phabricator:20150722.dashboard.2.sql',1556231696,NULL),('phabricator:20150723.countdown.1.sql',1556231696,NULL),('phabricator:20150724.badges.comments.1.sql',1556231696,NULL),('phabricator:20150724.countdown.comments.1.sql',1556231696,NULL),('phabricator:20150725.badges.mailkey.1.sql',1556231696,NULL),('phabricator:20150725.badges.mailkey.2.php',1556231696,NULL),('phabricator:20150725.badges.viewpolicy.3.sql',1556231696,NULL),('phabricator:20150725.countdown.mailkey.1.sql',1556231696,NULL),('phabricator:20150725.countdown.mailkey.2.php',1556231696,NULL),('phabricator:20150725.slowvote.mailkey.1.sql',1556231696,NULL),('phabricator:20150725.slowvote.mailkey.2.php',1556231696,NULL),('phabricator:20150727.heraldaction.1.sql',1556231696,NULL),('phabricator:20150730.herald.1.sql',1556231696,NULL),('phabricator:20150730.herald.2.sql',1556231696,NULL),('phabricator:20150730.herald.3.sql',1556231696,NULL),('phabricator:20150730.herald.4.sql',1556231696,NULL),('phabricator:20150730.herald.5.sql',1556231696,NULL),('phabricator:20150730.herald.6.sql',1556231696,NULL),('phabricator:20150730.herald.7.sql',1556231696,NULL),('phabricator:20150803.herald.1.sql',1556231696,NULL),('phabricator:20150803.herald.2.sql',1556231696,NULL),('phabricator:20150804.ponder.answer.mailkey.1.sql',1556231696,NULL),('phabricator:20150804.ponder.answer.mailkey.2.php',1556231696,NULL),('phabricator:20150804.ponder.question.1.sql',1556231696,NULL),('phabricator:20150804.ponder.question.2.sql',1556231696,NULL),('phabricator:20150804.ponder.question.3.sql',1556231696,NULL),('phabricator:20150804.ponder.spaces.4.sql',1556231696,NULL),('phabricator:20150805.paste.status.1.sql',1556231696,NULL),('phabricator:20150805.paste.status.2.sql',1556231696,NULL),('phabricator:20150806.ponder.answer.1.sql',1556231696,NULL),('phabricator:20150806.ponder.editpolicy.2.sql',1556231696,NULL),('phabricator:20150806.ponder.status.1.sql',1556231696,NULL),('phabricator:20150806.ponder.status.2.sql',1556231696,NULL),('phabricator:20150806.ponder.status.3.sql',1556231696,NULL),('phabricator:20150808.ponder.vote.1.sql',1556231696,NULL),('phabricator:20150808.ponder.vote.2.sql',1556231696,NULL),('phabricator:20150812.ponder.answer.1.sql',1556231696,NULL),('phabricator:20150812.ponder.answer.2.sql',1556231696,NULL),('phabricator:20150814.harbormater.artifact.phid.sql',1556231696,NULL),('phabricator:20150815.owners.status.1.sql',1556231696,NULL),('phabricator:20150815.owners.status.2.sql',1556231696,NULL),('phabricator:20150823.nuance.queue.1.sql',1556231696,NULL),('phabricator:20150823.nuance.queue.2.sql',1556231696,NULL),('phabricator:20150823.nuance.queue.3.sql',1556231696,NULL),('phabricator:20150823.nuance.queue.4.sql',1556231696,NULL),('phabricator:20150828.ponder.wiki.1.sql',1556231696,NULL),('phabricator:20150829.ponder.dupe.1.sql',1556231696,NULL),('phabricator:20150904.herald.1.sql',1556231696,NULL),('phabricator:20150906.mailinglist.sql',1556231696,NULL),('phabricator:20150910.owners.custom.1.sql',1556231696,NULL),('phabricator:20150916.drydock.slotlocks.1.sql',1556231696,NULL),('phabricator:20150922.drydock.commands.1.sql',1556231696,NULL),('phabricator:20150923.drydock.resourceid.1.sql',1556231696,NULL),('phabricator:20150923.drydock.resourceid.2.sql',1556231696,NULL),('phabricator:20150923.drydock.resourceid.3.sql',1556231696,NULL),('phabricator:20150923.drydock.taskid.1.sql',1556231696,NULL),('phabricator:20150924.drydock.disable.1.sql',1556231696,NULL),('phabricator:20150924.drydock.status.1.sql',1556231696,NULL),('phabricator:20150928.drydock.rexpire.1.sql',1556231696,NULL),('phabricator:20150930.drydock.log.1.sql',1556231696,NULL),('phabricator:20151001.drydock.rname.1.sql',1556231696,NULL),('phabricator:20151002.dashboard.status.1.sql',1556231696,NULL),('phabricator:20151002.harbormaster.bparam.1.sql',1556231696,NULL),('phabricator:20151009.drydock.auth.1.sql',1556231696,NULL),('phabricator:20151010.drydock.auth.2.sql',1556231696,NULL),('phabricator:20151013.drydock.op.1.sql',1556231696,NULL),('phabricator:20151023.harborpolicy.1.sql',1556231696,NULL),('phabricator:20151023.harborpolicy.2.php',1556231696,NULL),('phabricator:20151023.patchduration.sql',1556231697,141072),('phabricator:20151030.harbormaster.initiator.sql',1556231697,14355),('phabricator:20151106.editengine.1.table.sql',1556231697,7000),('phabricator:20151106.editengine.2.xactions.sql',1556231697,6327),('phabricator:20151106.phame.post.mailkey.1.sql',1556231697,13453),('phabricator:20151106.phame.post.mailkey.2.php',1556231697,1570),('phabricator:20151107.phame.blog.mailkey.1.sql',1556231697,11087),('phabricator:20151107.phame.blog.mailkey.2.php',1556231697,970),('phabricator:20151108.phame.blog.joinpolicy.sql',1556231697,11189),('phabricator:20151108.xhpast.stderr.sql',1556231697,18926),('phabricator:20151109.phame.post.comments.1.sql',1556231697,7158),('phabricator:20151109.repository.coverage.1.sql',1556231697,1260),('phabricator:20151109.xhpast.db.1.sql',1556231697,3950),('phabricator:20151109.xhpast.db.2.sql',1556231697,1156),('phabricator:20151110.daemonenvhash.sql',1556231697,24270),('phabricator:20151111.phame.blog.archive.1.sql',1556231697,11808),('phabricator:20151111.phame.blog.archive.2.sql',1556231697,570),('phabricator:20151112.herald.edge.sql',1556231697,10237),('phabricator:20151116.owners.edge.sql',1556231697,10178),('phabricator:20151128.phame.blog.picture.1.sql',1556231697,12092),('phabricator:20151130.phurl.mailkey.1.sql',1556231697,9727),('phabricator:20151130.phurl.mailkey.2.php',1556231697,1287),('phabricator:20151202.versioneddraft.1.sql',1556231697,5191),('phabricator:20151207.editengine.1.sql',1556231697,48281),('phabricator:20151210.land.1.refphid.sql',1556231697,9677),('phabricator:20151210.land.2.refphid.php',1556231697,629),('phabricator:20151215.phame.1.autotitle.sql',1556231697,20604),('phabricator:20151218.key.1.keyphid.sql',1556231697,13167),('phabricator:20151218.key.2.keyphid.php',1556231697,423),('phabricator:20151219.proj.01.prislug.sql',1556231697,13742),('phabricator:20151219.proj.02.prislugkey.sql',1556231697,8362),('phabricator:20151219.proj.03.copyslug.sql',1556231697,517),('phabricator:20151219.proj.04.dropslugkey.sql',1556231697,6993),('phabricator:20151219.proj.05.dropslug.sql',1556231697,14034),('phabricator:20151219.proj.06.defaultpolicy.php',1556231697,1187),('phabricator:20151219.proj.07.viewnull.sql',1556231697,17899),('phabricator:20151219.proj.08.editnull.sql',1556231697,17020),('phabricator:20151219.proj.09.joinnull.sql',1556231697,17501),('phabricator:20151219.proj.10.subcolumns.sql',1556231697,77351),('phabricator:20151219.proj.11.subprojectphids.sql',1556231697,14306),('phabricator:20151221.search.1.version.sql',1556231697,5434),('phabricator:20151221.search.2.ownersngrams.sql',1556231697,5494),('phabricator:20151221.search.3.reindex.php',1556231697,84),('phabricator:20151223.proj.01.paths.sql',1556231697,15641),('phabricator:20151223.proj.02.depths.sql',1556231697,15239),('phabricator:20151223.proj.03.pathkey.sql',1556231697,9414),('phabricator:20151223.proj.04.keycol.sql',1556231697,16788),('phabricator:20151223.proj.05.updatekeys.php',1556231697,483),('phabricator:20151223.proj.06.uniq.sql',1556231697,10101),('phabricator:20151226.reop.1.sql',1556231697,12605),('phabricator:20151227.proj.01.materialize.sql',1556231697,586),('phabricator:20151231.proj.01.icon.php',1556231697,2511),('phabricator:20160102.badges.award.sql',1556231697,6329),('phabricator:20160110.repo.01.slug.sql',1556231697,20421),('phabricator:20160110.repo.02.slug.php',1556231697,678),('phabricator:20160111.repo.01.slugx.sql',1556231697,1338),('phabricator:20160112.repo.01.uri.sql',1556231697,5759),('phabricator:20160112.repo.02.uri.index.php',1556231697,105),('phabricator:20160113.propanel.1.storage.sql',1556231697,6417),('phabricator:20160113.propanel.2.xaction.sql',1556231697,7222),('phabricator:20160119.project.1.silence.sql',1556231697,547),('phabricator:20160122.project.1.boarddefault.php',1556231697,759),('phabricator:20160124.people.1.icon.sql',1556231697,10389),('phabricator:20160124.people.2.icondefault.sql',1556231697,597),('phabricator:20160128.repo.1.pull.sql',1556231697,6188),('phabricator:20160201.revision.properties.1.sql',1556231697,13671),('phabricator:20160201.revision.properties.2.sql',1556231697,582),('phabricator:20160202.board.1.proxy.sql',1556231697,11473),('phabricator:20160202.ipv6.1.sql',1556231697,29431),('phabricator:20160202.ipv6.2.php',1556231697,1039),('phabricator:20160206.cover.1.sql',1556231697,16645),('phabricator:20160208.task.1.sql',1556231697,17354),('phabricator:20160208.task.2.sql',1556231697,28687),('phabricator:20160208.task.3.sql',1556231697,21722),('phabricator:20160212.proj.1.sql',1556231697,18838),('phabricator:20160212.proj.2.sql',1556231697,682),('phabricator:20160215.owners.policy.1.sql',1556231698,13159),('phabricator:20160215.owners.policy.2.sql',1556231698,13532),('phabricator:20160215.owners.policy.3.sql',1556231698,781),('phabricator:20160215.owners.policy.4.sql',1556231698,575),('phabricator:20160218.callsigns.1.sql',1556231698,18754),('phabricator:20160221.almanac.1.devicen.sql',1556231698,5402),('phabricator:20160221.almanac.2.devicei.php',1556231698,86),('phabricator:20160221.almanac.3.servicen.sql',1556231698,5514),('phabricator:20160221.almanac.4.servicei.php',1556231698,88),('phabricator:20160221.almanac.5.networkn.sql',1556231698,5797),('phabricator:20160221.almanac.6.networki.php',1556231698,98),('phabricator:20160221.almanac.7.namespacen.sql',1556231698,6222),('phabricator:20160221.almanac.8.namespace.sql',1556231698,6967),('phabricator:20160221.almanac.9.namespacex.sql',1556231698,6258),('phabricator:20160222.almanac.1.properties.php',1556231698,1785),('phabricator:20160223.almanac.1.bound.sql',1556231698,12636),('phabricator:20160223.almanac.2.lockbind.sql',1556231698,555),('phabricator:20160223.almanac.3.devicelock.sql',1556231698,12370),('phabricator:20160223.almanac.4.servicelock.sql',1556231698,12403),('phabricator:20160223.paste.fileedges.php',1556231698,563),('phabricator:20160225.almanac.1.disablebinding.sql',1556231698,13239),('phabricator:20160225.almanac.2.stype.sql',1556231698,5306),('phabricator:20160225.almanac.3.stype.php',1556231698,854),('phabricator:20160227.harbormaster.1.plann.sql',1556231698,5517),('phabricator:20160227.harbormaster.2.plani.php',1556231698,85),('phabricator:20160303.drydock.1.bluen.sql',1556231698,5916),('phabricator:20160303.drydock.2.bluei.php',1556231698,84),('phabricator:20160303.drydock.3.edge.sql',1556231698,9299),('phabricator:20160308.nuance.01.disabled.sql',1556231698,11938),('phabricator:20160308.nuance.02.cursordata.sql',1556231698,5933),('phabricator:20160308.nuance.03.sourcen.sql',1556231698,5421),('phabricator:20160308.nuance.04.sourcei.php',1556231698,84),('phabricator:20160308.nuance.05.sourcename.sql',1556231698,14051),('phabricator:20160308.nuance.06.label.sql',1556231698,14773),('phabricator:20160308.nuance.07.itemtype.sql',1556231698,12745),('phabricator:20160308.nuance.08.itemkey.sql',1556231698,12490),('phabricator:20160308.nuance.09.itemcontainer.sql',1556231698,14099),('phabricator:20160308.nuance.10.itemkeyu.sql',1556231698,525),('phabricator:20160308.nuance.11.requestor.sql',1556231698,16661),('phabricator:20160308.nuance.12.queue.sql',1556231698,12884),('phabricator:20160316.lfs.01.token.resource.sql',1556231698,14175),('phabricator:20160316.lfs.02.token.user.sql',1556231698,10063),('phabricator:20160316.lfs.03.token.properties.sql',1556231698,10329),('phabricator:20160316.lfs.04.token.default.sql',1556231698,508),('phabricator:20160317.lfs.01.ref.sql',1556231698,5342),('phabricator:20160321.nuance.01.taskbridge.sql',1556231698,17760),('phabricator:20160322.nuance.01.itemcommand.sql',1556231698,4975),('phabricator:20160323.badgemigrate.sql',1556231698,1649),('phabricator:20160329.nuance.01.requestor.sql',1556231698,3782),('phabricator:20160329.nuance.02.requestorsource.sql',1556231698,4055),('phabricator:20160329.nuance.03.requestorxaction.sql',1556231698,4785),('phabricator:20160329.nuance.04.requestorcomment.sql',1556231698,4420),('phabricator:20160330.badges.migratequality.sql',1556231698,15822),('phabricator:20160330.badges.qualityxaction.mig.sql',1556231698,2799),('phabricator:20160404.oauth.1.xaction.sql',1556231698,6721),('phabricator:20160405.oauth.2.disable.sql',1556231698,10930),('phabricator:20160406.badges.ngrams.php',1556231698,97),('phabricator:20160406.badges.ngrams.sql',1556231698,6525),('phabricator:20160406.columns.1.php',1556231698,500),('phabricator:20160411.repo.1.version.sql',1556231698,5519),('phabricator:20160418.repouri.1.sql',1556231698,6074),('phabricator:20160418.repouri.2.sql',1556231698,11525),('phabricator:20160418.repoversion.1.sql',1556231698,10689),('phabricator:20160419.pushlog.1.sql',1556231698,14353),('phabricator:20160424.locks.1.sql',1556231698,10204),('phabricator:20160426.searchedge.sql',1556231698,9947),('phabricator:20160428.repo.1.urixaction.sql',1556231698,7021),('phabricator:20160503.repo.01.lpath.sql',1556231698,13307),('phabricator:20160503.repo.02.lpathkey.sql',1556231698,8490),('phabricator:20160503.repo.03.lpathmigrate.php',1556231698,504),('phabricator:20160503.repo.04.mirrormigrate.php',1556231698,850),('phabricator:20160503.repo.05.urimigrate.php',1556231698,424),('phabricator:20160510.repo.01.uriindex.php',1556231698,4595),('phabricator:20160513.owners.01.autoreview.sql',1556231698,10941),('phabricator:20160513.owners.02.autoreviewnone.sql',1556231698,564),('phabricator:20160516.owners.01.dominion.sql',1556231698,10783),('phabricator:20160516.owners.02.dominionstrong.sql',1556231698,572),('phabricator:20160517.oauth.01.edge.sql',1556231698,10687),('phabricator:20160518.ssh.01.activecol.sql',1556231698,10789),('phabricator:20160518.ssh.02.activeval.sql',1556231698,581),('phabricator:20160518.ssh.03.activekey.sql',1556231698,6783),('phabricator:20160519.ssh.01.xaction.sql',1556231698,6533),('phabricator:20160531.pref.01.xaction.sql',1556231698,7117),('phabricator:20160531.pref.02.datecreatecol.sql',1556231698,9742),('phabricator:20160531.pref.03.datemodcol.sql',1556231698,9161),('phabricator:20160531.pref.04.datecreateval.sql',1556231698,581),('phabricator:20160531.pref.05.datemodval.sql',1556231698,500),('phabricator:20160531.pref.06.phidcol.sql',1556231698,9802),('phabricator:20160531.pref.07.phidval.php',1556231698,812),('phabricator:20160601.user.01.cache.sql',1556231698,7441),('phabricator:20160601.user.02.copyprefs.php',1556231698,1761),('phabricator:20160601.user.03.removetime.sql',1556231698,15650),('phabricator:20160601.user.04.removetranslation.sql',1556231698,15109),('phabricator:20160601.user.05.removesex.sql',1556231698,14245),('phabricator:20160603.user.01.removedcenabled.sql',1556231698,13434),('phabricator:20160603.user.02.removedctab.sql',1556231698,14889),('phabricator:20160603.user.03.removedcvisible.sql',1556231698,14290),('phabricator:20160604.user.01.stringmailprefs.php',1556231698,605),('phabricator:20160604.user.02.removeimagecache.sql',1556231698,13598),('phabricator:20160605.user.01.prefnulluser.sql',1556231698,13603),('phabricator:20160605.user.02.prefbuiltin.sql',1556231698,9726),('phabricator:20160605.user.03.builtinunique.sql',1556231698,5808),('phabricator:20160616.phame.blog.header.1.sql',1556231698,10765),('phabricator:20160616.repo.01.oldref.sql',1556231698,5571),('phabricator:20160617.harbormaster.01.arelease.sql',1556231698,11995),('phabricator:20160618.phame.blog.subtitle.sql',1556231698,11187),('phabricator:20160620.phame.blog.parentdomain.2.sql',1556231698,11609),('phabricator:20160620.phame.blog.parentsite.1.sql',1556231698,13040),('phabricator:20160623.phame.blog.fulldomain.1.sql',1556231698,12008),('phabricator:20160623.phame.blog.fulldomain.2.sql',1556231698,564),('phabricator:20160623.phame.blog.fulldomain.3.sql',1556231698,1211),('phabricator:20160706.phame.blog.parentdomain.2.sql',1556231698,12418),('phabricator:20160706.phame.blog.parentsite.1.sql',1556231699,13036),('phabricator:20160707.calendar.01.stub.sql',1556231699,12754),('phabricator:20160711.files.01.builtin.sql',1556231699,15129),('phabricator:20160711.files.02.builtinkey.sql',1556231699,8836),('phabricator:20160713.event.01.host.sql',1556231699,15511),('phabricator:20160715.event.01.alldayfrom.sql',1556231699,14131),('phabricator:20160715.event.02.alldayto.sql',1556231699,12699),('phabricator:20160715.event.03.allday.php',1556231699,86),('phabricator:20160720.calendar.invitetxn.php',1556231699,1319),('phabricator:20160721.pack.01.pub.sql',1556231699,5812),('phabricator:20160721.pack.02.pubxaction.sql',1556231699,6139),('phabricator:20160721.pack.03.edge.sql',1556231699,10806),('phabricator:20160721.pack.04.pkg.sql',1556231699,6295),('phabricator:20160721.pack.05.pkgxaction.sql',1556231699,6625),('phabricator:20160721.pack.06.version.sql',1556231699,5517),('phabricator:20160721.pack.07.versionxaction.sql',1556231699,6541),('phabricator:20160722.pack.01.pubngrams.sql',1556231699,5991),('phabricator:20160722.pack.02.pkgngrams.sql',1556231699,6165),('phabricator:20160722.pack.03.versionngrams.sql',1556231699,5845),('phabricator:20160810.commit.01.summarylength.sql',1556231699,16647),('phabricator:20160824.connectionlog.sql',1556231699,3624),('phabricator:20160824.repohint.01.hint.sql',1556231699,5880),('phabricator:20160824.repohint.02.movebad.php',1556231699,610),('phabricator:20160824.repohint.03.nukebad.sql',1556231699,3549),('phabricator:20160825.ponder.sql',1556231699,635),('phabricator:20160829.pastebin.01.language.sql',1556231699,16331),('phabricator:20160829.pastebin.02.language.sql',1556231699,560),('phabricator:20160913.conpherence.topic.1.sql',1556231699,11148),('phabricator:20160919.repo.messagecount.sql',1556231699,10883),('phabricator:20160919.repo.messagedefault.sql',1556231699,3870),('phabricator:20160921.fileexternalrequest.sql',1556231699,6461),('phabricator:20160927.phurl.ngrams.php',1556231699,88),('phabricator:20160927.phurl.ngrams.sql',1556231699,5450),('phabricator:20160928.repo.messagecount.sql',1556231699,513),('phabricator:20160928.tokentoken.sql',1556231699,7220),('phabricator:20161003.cal.01.utcepoch.sql',1556231699,39888),('phabricator:20161003.cal.02.parameters.sql',1556231699,13545),('phabricator:20161004.cal.01.noepoch.php',1556231699,1824),('phabricator:20161005.cal.01.rrules.php',1556231699,313),('phabricator:20161005.cal.02.export.sql',1556231699,6093),('phabricator:20161005.cal.03.exportxaction.sql',1556231699,6495),('phabricator:20161005.conpherence.image.1.sql',1556231699,12059),('phabricator:20161005.conpherence.image.2.php',1556231699,85),('phabricator:20161011.conpherence.ngrams.php',1556231699,65),('phabricator:20161011.conpherence.ngrams.sql',1556231699,5332),('phabricator:20161012.cal.01.import.sql',1556231699,6181),('phabricator:20161012.cal.02.importxaction.sql',1556231699,6973),('phabricator:20161012.cal.03.eventimport.sql',1556231699,52644),('phabricator:20161013.cal.01.importlog.sql',1556231699,5063),('phabricator:20161016.conpherence.imagephids.sql',1556231699,10859),('phabricator:20161026.calendar.01.importtriggers.sql',1556231699,23297),('phabricator:20161027.calendar.01.externalinvitee.sql',1556231699,5726),('phabricator:20161031.calendar.01.seriesparent.sql',1556231699,13938),('phabricator:20161031.calendar.02.notifylog.sql',1556231699,5033),('phabricator:20161101.calendar.01.noholiday.sql',1556231699,3280),('phabricator:20161101.calendar.02.removecolumns.sql',1556231699,78114),('phabricator:20161104.calendar.01.availability.sql',1556231699,11128),('phabricator:20161104.calendar.02.availdefault.sql',1556231699,550),('phabricator:20161115.phamepost.01.subtitle.sql',1556231699,11909),('phabricator:20161115.phamepost.02.header.sql',1556231699,13239),('phabricator:20161121.cluster.01.hoststate.sql',1556231699,4824),('phabricator:20161124.search.01.stopwords.sql',1556231699,4622),('phabricator:20161125.search.01.stemmed.sql',1556231699,7243),('phabricator:20161130.search.01.manual.sql',1556231699,5811),('phabricator:20161130.search.02.rebuild.php',1556231699,1398),('phabricator:20161210.dashboards.01.author.sql',1556231699,11083),('phabricator:20161210.dashboards.02.author.php',1556231699,1611),('phabricator:20161211.menu.01.itemkey.sql',1556231699,4255),('phabricator:20161211.menu.02.itemprops.sql',1556231699,3566),('phabricator:20161211.menu.03.order.sql',1556231699,3844),('phabricator:20161212.dashboardpanel.01.author.sql',1556231699,10207),('phabricator:20161212.dashboardpanel.02.author.php',1556231699,836),('phabricator:20161212.dashboards.01.icon.sql',1556231699,11227),('phabricator:20161213.diff.01.hunks.php',1556231699,747),('phabricator:20161216.dashboard.ngram.01.sql',1556231699,10936),('phabricator:20161216.dashboard.ngram.02.php',1556231699,114),('phabricator:20170106.menu.01.customphd.sql',1556231699,10393),('phabricator:20170109.diff.01.commit.sql',1556231699,12971),('phabricator:20170119.menuitem.motivator.01.php',1556231699,407),('phabricator:20170131.dashboard.personal.01.php',1556231699,1445),('phabricator:20170301.subtype.01.col.sql',1556231699,12251),('phabricator:20170301.subtype.02.default.sql',1556231699,687),('phabricator:20170301.subtype.03.taskcol.sql',1556231699,17435),('phabricator:20170301.subtype.04.taskdefault.sql',1556231699,554),('phabricator:20170303.people.01.avatar.sql',1556231699,27615),('phabricator:20170313.reviewers.01.sql',1556231699,5349),('phabricator:20170316.rawfiles.01.php',1556231699,1720),('phabricator:20170320.reviewers.01.lastaction.sql',1556231699,11553),('phabricator:20170320.reviewers.02.lastcomment.sql',1556231699,10266),('phabricator:20170320.reviewers.03.migrate.php',1556231699,1127),('phabricator:20170322.reviewers.04.actor.sql',1556231699,10051),('phabricator:20170328.reviewers.01.void.sql',1556231699,11143),('phabricator:20170404.files.retroactive-content-hash.sql',1556231699,19835),('phabricator:20170406.hmac.01.keystore.sql',1556231699,5350),('phabricator:20170410.calendar.01.repair.php',1556231699,576),('phabricator:20170412.conpherence.01.picturecrop.sql',1556231699,499),('phabricator:20170413.conpherence.01.recentparty.sql',1556231700,11833),('phabricator:20170417.files.ngrams.sql',1556231700,5606),('phabricator:20170418.1.application.01.xaction.sql',1556231700,6959),('phabricator:20170418.1.application.02.edge.sql',1556231700,9907),('phabricator:20170418.files.isDeleted.sql',1556231700,16731),('phabricator:20170419.app.01.table.sql',1556231700,5395),('phabricator:20170419.thread.01.behind.sql',1556231700,11820),('phabricator:20170419.thread.02.status.sql',1556231700,11320),('phabricator:20170419.thread.03.touched.sql',1556231700,12098),('phabricator:20170424.user.01.verify.php',1556231700,450),('phabricator:20170427.owners.01.long.sql',1556231700,10936),('phabricator:20170504.1.slowvote.shuffle.sql',1556231700,13917),('phabricator:20170522.nuance.01.itemkey.sql',1556231700,13967),('phabricator:20170524.nuance.01.command.sql',1556231700,29175),('phabricator:20170524.nuance.02.commandstatus.sql',1556231700,10499),('phabricator:20170526.dropdifferentialdrafts.sql',1556231700,4528),('phabricator:20170526.milestones.php',1556231700,82),('phabricator:20170528.maniphestdupes.php',1556231700,407),('phabricator:20170612.repository.image.01.sql',1556231700,14513),('phabricator:20170614.taskstatus.sql',1556231700,22946),('phabricator:20170725.legalpad.date.01.sql',1556231700,1121),('phabricator:20170811.differential.01.status.php',1556231700,436),('phabricator:20170811.differential.02.modernstatus.sql',1556231700,1112),('phabricator:20170811.differential.03.modernxaction.php',1556231700,946),('phabricator:20170814.search.01.qconfig.sql',1556231700,5484),('phabricator:20170820.phame.01.post.views.sql',1556231700,12773),('phabricator:20170820.phame.02.post.views.sql',1556231700,492),('phabricator:20170824.search.01.saved.php',1556231700,1093),('phabricator:20170825.phame.01.post.views.sql',1556231700,14383),('phabricator:20170828.ferret.01.taskdoc.sql',1556231700,4720),('phabricator:20170828.ferret.02.taskfield.sql',1556231700,4430),('phabricator:20170828.ferret.03.taskngrams.sql',1556231700,4459),('phabricator:20170830.ferret.01.unique.sql',1556231700,11567),('phabricator:20170830.ferret.02.term.sql',1556231700,10544),('phabricator:20170905.ferret.01.diff.doc.sql',1556231700,4638),('phabricator:20170905.ferret.02.diff.field.sql',1556231700,4380),('phabricator:20170905.ferret.03.diff.ngrams.sql',1556231700,4849),('phabricator:20170907.ferret.01.user.doc.sql',1556231700,4719),('phabricator:20170907.ferret.02.user.field.sql',1556231700,4741),('phabricator:20170907.ferret.03.user.ngrams.sql',1556231700,4472),('phabricator:20170907.ferret.07.passphrase.doc.sql',1556231700,4554),('phabricator:20170907.ferret.08.passphrase.field.sql',1556231700,5115),('phabricator:20170907.ferret.09.passphrase.ngrams.sql',1556231700,4083),('phabricator:20170907.ferret.10.owners.doc.sql',1556231700,4723),('phabricator:20170907.ferret.11.owners.field.sql',1556231700,5061),('phabricator:20170907.ferret.12.owners.ngrams.sql',1556231700,4786),('phabricator:20170907.ferret.13.blog.doc.sql',1556231700,4252),('phabricator:20170907.ferret.14.blog.field.sql',1556231700,4923),('phabricator:20170907.ferret.15.blog.ngrams.sql',1556231700,4231),('phabricator:20170907.ferret.16.post.doc.sql',1556231700,4741),('phabricator:20170907.ferret.17.post.field.sql',1556231700,4888),('phabricator:20170907.ferret.18.post.ngrams.sql',1556231700,5208),('phabricator:20170907.ferret.19.project.doc.sql',1556231700,4908),('phabricator:20170907.ferret.20.project.field.sql',1556231700,5022),('phabricator:20170907.ferret.21.project.ngrams.sql',1556231700,4594),('phabricator:20170907.ferret.22.phriction.doc.sql',1556231700,4889),('phabricator:20170907.ferret.23.phriction.field.sql',1556231700,4387),('phabricator:20170907.ferret.24.phriction.ngrams.sql',1556231700,4437),('phabricator:20170907.ferret.25.event.doc.sql',1556231700,5550),('phabricator:20170907.ferret.26.event.field.sql',1556231700,4987),('phabricator:20170907.ferret.27.event.ngrams.sql',1556231700,4139),('phabricator:20170907.ferret.28.mock.doc.sql',1556231700,5204),('phabricator:20170907.ferret.29.mock.field.sql',1556231700,4481),('phabricator:20170907.ferret.30.mock.ngrams.sql',1556231700,4263),('phabricator:20170907.ferret.31.repo.doc.sql',1556231700,4498),('phabricator:20170907.ferret.32.repo.field.sql',1556231700,5632),('phabricator:20170907.ferret.33.repo.ngrams.sql',1556231700,4712),('phabricator:20170907.ferret.34.commit.doc.sql',1556231700,5410),('phabricator:20170907.ferret.35.commit.field.sql',1556231700,4832),('phabricator:20170907.ferret.36.commit.ngrams.sql',1556231700,4997),('phabricator:20170912.ferret.01.activity.php',1556231700,358),('phabricator:20170914.ref.01.position.sql',1556231700,4702),('phabricator:20170915.ref.01.migrate.php',1556231700,735),('phabricator:20170915.ref.02.drop.id.sql',1556231700,11053),('phabricator:20170915.ref.03.drop.closed.sql',1556231700,10493),('phabricator:20170915.ref.04.uniq.sql',1556231700,6301),('phabricator:20170918.ref.01.position.php',1556231700,6814),('phabricator:20171002.cngram.01.maniphest.sql',1556231700,6208),('phabricator:20171002.cngram.02.event.sql',1556231700,6453),('phabricator:20171002.cngram.03.revision.sql',1556231700,5686),('phabricator:20171002.cngram.05.owners.sql',1556231700,5625),('phabricator:20171002.cngram.06.passphrase.sql',1556231700,6665),('phabricator:20171002.cngram.07.blog.sql',1556231700,5687),('phabricator:20171002.cngram.08.post.sql',1556231700,5555),('phabricator:20171002.cngram.09.pholio.sql',1556231700,5669),('phabricator:20171002.cngram.10.phriction.sql',1556231700,5644),('phabricator:20171002.cngram.11.project.sql',1556231700,5239),('phabricator:20171002.cngram.12.user.sql',1556231700,6475),('phabricator:20171002.cngram.13.repository.sql',1556231700,5340),('phabricator:20171002.cngram.14.commit.sql',1556231700,5519),('phabricator:20171026.ferret.01.ponder.doc.sql',1556231700,4734),('phabricator:20171026.ferret.02.ponder.field.sql',1556231700,4312),('phabricator:20171026.ferret.03.ponder.ngrams.sql',1556231700,4486),('phabricator:20171026.ferret.04.ponder.cngrams.sql',1556231700,6303),('phabricator:20171026.ferret.05.ponder.index.php',1556231700,111),('phabricator:20171101.diff.01.active.sql',1556231700,13157),('phabricator:20171101.diff.02.populate.php',1556231700,466),('phabricator:20180119.bulk.01.silent.sql',1556231700,12179),('phabricator:20180120.auth.01.password.sql',1556231700,5465),('phabricator:20180120.auth.02.passwordxaction.sql',1556231700,7117),('phabricator:20180120.auth.03.vcsdata.sql',1556231700,1196),('phabricator:20180120.auth.04.vcsphid.php',1556231700,751),('phabricator:20180121.auth.01.vcsnuke.sql',1556231700,3980),('phabricator:20180121.auth.02.passsalt.sql',1556231700,9066),('phabricator:20180121.auth.03.accountdata.sql',1556231700,607),('phabricator:20180121.auth.04.accountphid.php',1556231700,431),('phabricator:20180121.auth.05.accountnuke.sql',1556231700,29120),('phabricator:20180121.auth.06.legacydigest.sql',1556231700,9699),('phabricator:20180121.auth.07.marklegacy.sql',1556231700,567),('phabricator:20180124.herald.01.repetition.sql',1556231700,17664),('phabricator:20180207.mail.01.task.sql',1556231700,18090),('phabricator:20180207.mail.02.revision.sql',1556231700,13051),('phabricator:20180207.mail.03.mock.sql',1556231700,11482),('phabricator:20180208.maniphest.01.close.sql',1556231700,34873),('phabricator:20180208.maniphest.02.populate.php',1556231700,494),('phabricator:20180209.hook.01.hook.sql',1556231700,5084),('phabricator:20180209.hook.02.hookxaction.sql',1556231700,6844),('phabricator:20180209.hook.03.hookrequest.sql',1556231700,4822),('phabricator:20180210.hunk.01.droplegacy.sql',1556231700,4058),('phabricator:20180210.hunk.02.renamemodern.sql',1556231700,4436),('phabricator:20180212.harbor.01.receiver.sql',1556231700,14179),('phabricator:20180214.harbor.01.aborted.php',1556231700,902),('phabricator:20180215.phriction.01.phidcol.sql',1556231701,12098),('phabricator:20180215.phriction.02.phidvalues.php',1556231701,643),('phabricator:20180215.phriction.03.descempty.sql',1556231701,535),('phabricator:20180215.phriction.04.descnull.sql',1556231701,14930),('phabricator:20180215.phriction.05.statustext.sql',1556231701,15691),('phabricator:20180215.phriction.06.statusvalue.sql',1556231701,904),('phabricator:20180218.fact.01.dim.key.sql',1556231701,5182),('phabricator:20180218.fact.02.dim.obj.sql',1556231701,4795),('phabricator:20180218.fact.03.data.int.sql',1556231701,4788),('phabricator:20180222.log.01.filephid.sql',1556231701,12884),('phabricator:20180223.log.01.bytelength.sql',1556231701,11783),('phabricator:20180223.log.02.chunkformat.sql',1556231701,10735),('phabricator:20180223.log.03.chunkdefault.sql',1556231701,508),('phabricator:20180223.log.04.linemap.sql',1556231701,12025),('phabricator:20180223.log.05.linemapdefault.sql',1556231701,597),('phabricator:20180228.log.01.offset.sql',1556231701,20084),('phabricator:20180305.lock.01.locklog.sql',1556231701,4480),('phabricator:20180306.opath.01.digest.sql',1556231701,11285),('phabricator:20180306.opath.02.digestpopulate.php',1556231701,636),('phabricator:20180306.opath.03.purge.php',1556231701,422),('phabricator:20180306.opath.04.unique.sql',1556231701,6155),('phabricator:20180306.opath.05.longpath.sql',1556231701,12989),('phabricator:20180306.opath.06.pathdisplay.sql',1556231701,10854),('phabricator:20180306.opath.07.copypaths.sql',1556231701,667),('phabricator:20180309.owners.01.primaryowner.sql',1556231701,12220),('phabricator:20180312.reviewers.01.options.sql',1556231701,10529),('phabricator:20180312.reviewers.02.optionsdefault.sql',1556231701,514),('phabricator:20180322.lock.01.identifier.sql',1556231701,18925),('phabricator:20180322.lock.02.wait.sql',1556231701,35843),('phabricator:20180326.lock.03.nonunique.sql',1556231701,5998),('phabricator:20180403.draft.01.broadcast.php',1556231701,689),('phabricator:20180410.almanac.01.iface.xaction.sql',1556231701,6457),('phabricator:20180418.alamanc.interface.unique.php',1556231701,8603),('phabricator:20180418.almanac.network.unique.php',1556231701,6736),('phabricator:20180419.phlux.edges.sql',1556231701,10016),('phabricator:20180423.mail.01.properties.sql',1556231701,5352),('phabricator:20180430.repo_identity.sql',1556231701,6953),('phabricator:20180504.owners.01.mailkey.php',1556231701,613),('phabricator:20180504.owners.02.rmkey.sql',1556231701,10972),('phabricator:20180504.owners.03.properties.sql',1556231701,11898),('phabricator:20180504.owners.04.default.sql',1556231701,626),('phabricator:20180504.repo_identity.author.sql',1556231701,11039),('phabricator:20180504.repo_identity.xaction.sql',1556231701,7323),('phabricator:20180509.repo_identity.commits.sql',1556231701,13684),('phabricator:20180730.phriction.01.spaces.sql',1556231701,12193),('phabricator:20180730.project.01.spaces.sql',1556231701,16504),('phabricator:20180809.repo_identities.activity.php',1556231701,412),('phabricator:20180827.drydock.01.acquired.sql',1556231701,11934),('phabricator:20180827.drydock.02.activated.sql',1556231701,10516),('phabricator:20180828.phriction.01.contentphid.sql',1556231701,12373),('phabricator:20180828.phriction.02.documentphid.sql',1556231701,12991),('phabricator:20180828.phriction.03.editedepoch.sql',1556231701,12601),('phabricator:20180828.phriction.04.migrate.php',1556231701,612),('phabricator:20180828.phriction.05.contentid.sql',1556231701,11315),('phabricator:20180828.phriction.06.c.documentid.php',1556231701,4931),('phabricator:20180828.phriction.06.documentid.sql',1556231701,12630),('phabricator:20180828.phriction.07.c.documentuniq.sql',1556231701,539),('phabricator:20180828.phriction.07.documentkey.sql',1556231701,6810),('phabricator:20180829.phriction.01.mailkey.php',1556231701,454),('phabricator:20180829.phriction.02.rmkey.sql',1556231701,12074),('phabricator:20180830.phriction.01.maxversion.sql',1556231701,12437),('phabricator:20180830.phriction.02.maxes.php',1556231701,429),('phabricator:20180910.audit.01.searches.php',1556231701,358),('phabricator:20180910.audit.02.string.sql',1556231701,27220),('phabricator:20180910.audit.03.status.php',1556231701,1070),('phabricator:20180910.audit.04.xactions.php',1556231701,1835),('phabricator:20180914.audit.01.mailkey.php',1556231701,501),('phabricator:20180914.audit.02.rmkey.sql',1556231701,15907),('phabricator:20180914.drydock.01.operationphid.sql',1556231701,11675),('phabricator:20181024.drydock.01.commandprops.sql',1556231701,10537),('phabricator:20181024.drydock.02.commanddefaults.sql',1556231701,562),('phabricator:20181031.board.01.queryreset.php',1556231701,2252),('phabricator:20181106.repo.01.sync.sql',1556231701,5414),('phabricator:20181106.repo.02.hook.sql',1556231701,10859),('phabricator:20181213.auth.01.sessionphid.sql',1556231701,11625),('phabricator:20181213.auth.02.populatephid.php',1556231701,418),('phabricator:20181213.auth.03.phidkey.sql',1556231701,8125),('phabricator:20181213.auth.04.longerhashes.sql',1556231701,15735),('phabricator:20181213.auth.05.longerloghashes.sql',1556231701,17050),('phabricator:20181213.auth.06.challenge.sql',1556231701,5795),('phabricator:20181214.auth.01.workflowkey.sql',1556231701,9956),('phabricator:20181217.auth.01.digest.sql',1556231701,10408),('phabricator:20181217.auth.02.ttl.sql',1556231701,10154),('phabricator:20181217.auth.03.completed.sql',1556231701,10782),('phabricator:20181218.pholio.01.imageauthor.sql',1556231701,11427),('phabricator:20181219.pholio.01.imagephid.sql',1556231701,11379),('phabricator:20181219.pholio.02.imagemigrate.php',1556231701,707),('phabricator:20181219.pholio.03.imageid.sql',1556231701,11959),('phabricator:20181220.pholio.01.mailkey.php',1556231701,444),('phabricator:20181220.pholio.02.dropmailkey.sql',1556231701,11687),('phabricator:20181228.auth.01.provider.sql',1556231701,4634),('phabricator:20181228.auth.02.xaction.sql',1556231701,6313),('phabricator:20181228.auth.03.name.sql',1556231701,10666),('phabricator:20190101.sms.01.drop.sql',1556231701,4467),('phabricator:20190115.mfa.01.provider.sql',1556231701,11158),('phabricator:20190115.mfa.02.migrate.php',1556231701,974),('phabricator:20190115.mfa.03.factorkey.sql',1556231701,10875),('phabricator:20190116.contact.01.number.sql',1556231701,5635),('phabricator:20190116.contact.02.xaction.sql',1556231701,6947),('phabricator:20190117.authmessage.01.message.sql',1556231701,4988),('phabricator:20190117.authmessage.02.xaction.sql',1556231701,6637),('phabricator:20190121.contact.01.primary.sql',1556231701,11548),('phabricator:20190127.project.01.subtype.sql',1556231701,17416),('phabricator:20190127.project.02.default.sql',1556231701,555),('phabricator:20190129.project.01.spaces.php',1556231701,406),('phabricator:20190206.external.01.legalpad.sql',1556231701,485),('phabricator:20190206.external.02.email.sql',1556231701,524),('phabricator:20190206.external.03.providerphid.sql',1556231701,13239),('phabricator:20190206.external.04.providerlink.php',1556231701,698),('phabricator:20190207.packages.01.state.sql',1556231702,10942),('phabricator:20190207.packages.02.migrate.sql',1556231702,565),('phabricator:20190207.packages.03.drop.sql',1556231702,11126),('phabricator:20190207.packages.04.xactions.php',1556231702,1229),('phabricator:20190215.daemons.01.dropdataid.php',1556231702,5352),('phabricator:20190215.daemons.02.nulldataid.sql',1556231702,13353),('phabricator:20190215.harbor.01.stringindex.sql',1556231702,5418),('phabricator:20190215.harbor.02.stringcol.sql',1556231702,10942),('phabricator:20190220.daemon_worker.completed.01.sql',1556231702,12323),('phabricator:20190220.daemon_worker.completed.02.sql',1556231702,12844),('phabricator:20190226.harbor.01.planprops.sql',1556231702,10963),('phabricator:20190226.harbor.02.planvalue.sql',1556231702,644),('phabricator:20190307.herald.01.comments.sql',1556231702,4292),('phabricator:20190312.triggers.01.trigger.sql',1556231702,5749),('phabricator:20190312.triggers.02.xaction.sql',1556231702,7189),('phabricator:20190312.triggers.03.triggerphid.sql',1556231702,12671),('phabricator:20190322.triggers.01.usage.sql',1556231702,5436),('phabricator:20190329.portals.01.create.sql',1556231702,4633),('phabricator:20190329.portals.02.xaction.sql',1556231702,8280),('phabricator:20190410.portals.01.ferret.doc.sql',1556231702,5198),('phabricator:20190410.portals.02.ferret.field.sql',1556231702,4797),('phabricator:20190410.portals.03.ferret.ngrams.sql',1556231702,4275),('phabricator:20190410.portals.04.ferret.cngrams.sql',1556231702,5990),('phabricator:20190412.dashboard.01.panels.php',1556231702,453),('phabricator:20190412.dashboard.02.install.sql',1556231702,3768),('phabricator:20190412.dashboard.03.dashngrams.sql',1556231702,4706),('phabricator:20190412.dashboard.04.panelngrams.sql',1556231702,4492),('phabricator:20190412.dashboard.05.dferret.doc.sql',1556231702,4528),('phabricator:20190412.dashboard.06.dferret.field.sql',1556231702,5105),('phabricator:20190412.dashboard.07.dferret.ngrams.sql',1556231702,4069),('phabricator:20190412.dashboard.08.dferret.cngrams.sql',1556231702,5099),('phabricator:20190412.dashboard.09.pferret.doc.sql',1556231702,4827),('phabricator:20190412.dashboard.10.pferret.field.sql',1556231702,5374),('phabricator:20190412.dashboard.11.pferret.ngrams.sql',1556231702,5073),('phabricator:20190412.dashboard.12.pferret.cngrams.sql',1556231702,5528),('phabricator:20190412.dashboard.13.rebuild.php',1556231702,7019),('phabricator:20190412.herald.01.rebuild.php',1556231702,1878),('phabricator:20190416.chart.01.storage.sql',1556231702,4935),('phabricator:daemonstatus.sql',1556231688,NULL),('phabricator:daemonstatuskey.sql',1556231689,NULL),('phabricator:daemontaskarchive.sql',1556231689,NULL),('phabricator:db.almanac',1556231684,NULL),('phabricator:db.application',1556231684,NULL),('phabricator:db.audit',1556231684,NULL),('phabricator:db.auth',1556231684,NULL),('phabricator:db.badges',1556231684,NULL),('phabricator:db.cache',1556231684,NULL),('phabricator:db.calendar',1556231684,NULL),('phabricator:db.chatlog',1556231684,NULL),('phabricator:db.conduit',1556231684,NULL),('phabricator:db.config',1556231684,NULL),('phabricator:db.conpherence',1556231684,NULL),('phabricator:db.countdown',1556231684,NULL),('phabricator:db.daemon',1556231684,NULL),('phabricator:db.dashboard',1556231684,NULL),('phabricator:db.differential',1556231684,NULL),('phabricator:db.diviner',1556231684,NULL),('phabricator:db.doorkeeper',1556231684,NULL),('phabricator:db.draft',1556231684,NULL),('phabricator:db.drydock',1556231684,NULL),('phabricator:db.fact',1556231684,NULL),('phabricator:db.feed',1556231684,NULL),('phabricator:db.file',1556231684,NULL),('phabricator:db.flag',1556231684,NULL),('phabricator:db.harbormaster',1556231684,NULL),('phabricator:db.herald',1556231684,NULL),('phabricator:db.legalpad',1556231684,NULL),('phabricator:db.maniphest',1556231684,NULL),('phabricator:db.meta_data',1556231684,NULL),('phabricator:db.metamta',1556231684,NULL),('phabricator:db.multimeter',1556231684,NULL),('phabricator:db.nuance',1556231684,NULL),('phabricator:db.oauth_server',1556231684,NULL),('phabricator:db.owners',1556231684,NULL),('phabricator:db.packages',1556231684,NULL),('phabricator:db.passphrase',1556231684,NULL),('phabricator:db.pastebin',1556231684,NULL),('phabricator:db.phame',1556231684,NULL),('phabricator:db.phlux',1556231684,NULL),('phabricator:db.pholio',1556231684,NULL),('phabricator:db.phragment',1556231684,NULL),('phabricator:db.phrequent',1556231684,NULL),('phabricator:db.phriction',1556231684,NULL),('phabricator:db.phurl',1556231684,NULL),('phabricator:db.policy',1556231684,NULL),('phabricator:db.ponder',1556231684,NULL),('phabricator:db.project',1556231684,NULL),('phabricator:db.releeph',1556231684,NULL),('phabricator:db.repository',1556231684,NULL),('phabricator:db.search',1556231684,NULL),('phabricator:db.slowvote',1556231684,NULL),('phabricator:db.spaces',1556231684,NULL),('phabricator:db.system',1556231684,NULL),('phabricator:db.timeline',1556231684,NULL),('phabricator:db.token',1556231684,NULL),('phabricator:db.user',1556231684,NULL),('phabricator:db.worker',1556231684,NULL),('phabricator:db.xhpast',1556231684,NULL),('phabricator:db.xhpastview',1556231684,NULL),('phabricator:db.xhprof',1556231684,NULL),('phabricator:differentialbookmarks.sql',1556231688,NULL),('phabricator:draft-metadata.sql',1556231689,NULL),('phabricator:dropfileproxyimage.sql',1556231689,NULL),('phabricator:drydockresoucetype.sql',1556231689,NULL),('phabricator:drydocktaskid.sql',1556231689,NULL),('phabricator:edgetype.sql',1556231689,NULL),('phabricator:emailtable.sql',1556231688,NULL),('phabricator:emailtableport.sql',1556231688,NULL),('phabricator:emailtableremove.sql',1556231688,NULL),('phabricator:fact-raw.sql',1556231688,NULL),('phabricator:harbormasterobject.sql',1556231688,NULL),('phabricator:holidays.sql',1556231688,NULL),('phabricator:ldapinfo.sql',1556231688,NULL),('phabricator:legalpad-mailkey-populate.php',1556231690,NULL),('phabricator:legalpad-mailkey.sql',1556231690,NULL),('phabricator:liskcounters-task.sql',1556231689,NULL),('phabricator:liskcounters.php',1556231689,NULL),('phabricator:liskcounters.sql',1556231689,NULL),('phabricator:maniphestxcache.sql',1556231688,NULL),('phabricator:markupcache.sql',1556231688,NULL),('phabricator:migrate-differential-dependencies.php',1556231688,NULL),('phabricator:migrate-maniphest-dependencies.php',1556231688,NULL),('phabricator:migrate-maniphest-revisions.php',1556231688,NULL),('phabricator:migrate-project-edges.php',1556231688,NULL),('phabricator:owners-exclude.sql',1556231689,NULL),('phabricator:pastepolicy.sql',1556231689,NULL),('phabricator:phameblog.sql',1556231688,NULL),('phabricator:phamedomain.sql',1556231689,NULL),('phabricator:phameoneblog.sql',1556231689,NULL),('phabricator:phamepolicy.sql',1556231689,NULL),('phabricator:phiddrop.sql',1556231688,NULL),('phabricator:pholio.sql',1556231689,NULL),('phabricator:policy-project.sql',1556231689,NULL),('phabricator:ponder-comments.sql',1556231689,NULL),('phabricator:ponder-mailkey-populate.php',1556231689,NULL),('phabricator:ponder-mailkey.sql',1556231689,NULL),('phabricator:ponder.sql',1556231688,NULL),('phabricator:releeph.sql',1556231689,NULL),('phabricator:repository-lint.sql',1556231689,NULL),('phabricator:statustxt.sql',1556231689,NULL),('phabricator:symbolcontexts.sql',1556231688,NULL),('phabricator:testdatabase.sql',1556231688,NULL),('phabricator:threadtopic.sql',1556231688,NULL),('phabricator:userstatus.sql',1556231688,NULL),('phabricator:usertranslation.sql',1556231688,NULL),('phabricator:xhprof.sql',1556231689,NULL);
CREATE DATABASE /*!32312 IF NOT EXISTS*/ `{$NAMESPACE}_metamta` /*!40100 DEFAULT CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} */;
@@ -7153,366 +6925,6 @@
UNIQUE KEY `key_draft` (`authorPHID`,`imageID`,`transactionPHID`)
) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT};
-CREATE DATABASE /*!32312 IF NOT EXISTS*/ `{$NAMESPACE}_phortune` /*!40100 DEFAULT CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} */;
-
-USE `{$NAMESPACE}_phortune`;
-
- SET NAMES utf8 ;
-
- SET character_set_client = {$CHARSET} ;
-
-CREATE TABLE `edge` (
- `src` varbinary(64) NOT NULL,
- `type` int(10) unsigned NOT NULL,
- `dst` varbinary(64) NOT NULL,
- `dateCreated` int(10) unsigned NOT NULL,
- `seq` int(10) unsigned NOT NULL,
- `dataID` int(10) unsigned DEFAULT NULL,
- PRIMARY KEY (`src`,`type`,`dst`),
- UNIQUE KEY `key_dst` (`dst`,`type`,`src`),
- KEY `src` (`src`,`type`,`dateCreated`,`seq`)
-) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT};
-
-USE `{$NAMESPACE}_phortune`;
-
- SET NAMES utf8 ;
-
- SET character_set_client = {$CHARSET} ;
-
-CREATE TABLE `edgedata` (
- `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
- `data` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL,
- PRIMARY KEY (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT};
-
-USE `{$NAMESPACE}_phortune`;
-
- SET NAMES utf8 ;
-
- SET character_set_client = {$CHARSET} ;
-
-CREATE TABLE `phortune_account` (
- `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
- `phid` varbinary(64) NOT NULL,
- `name` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL,
- `dateCreated` int(10) unsigned NOT NULL,
- `dateModified` int(10) unsigned NOT NULL,
- `billingName` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL,
- `billingAddress` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `key_phid` (`phid`)
-) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT};
-
-USE `{$NAMESPACE}_phortune`;
-
- SET NAMES utf8 ;
-
- SET character_set_client = {$CHARSET} ;
-
-CREATE TABLE `phortune_accounttransaction` (
- `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
- `phid` varbinary(64) NOT NULL,
- `authorPHID` varbinary(64) NOT NULL,
- `objectPHID` varbinary(64) NOT NULL,
- `viewPolicy` varbinary(64) NOT NULL,
- `editPolicy` varbinary(64) NOT NULL,
- `commentPHID` varbinary(64) DEFAULT NULL,
- `commentVersion` int(10) unsigned NOT NULL,
- `transactionType` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL,
- `oldValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL,
- `newValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL,
- `contentSource` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL,
- `metadata` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL,
- `dateCreated` int(10) unsigned NOT NULL,
- `dateModified` int(10) unsigned NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `key_phid` (`phid`),
- KEY `key_object` (`objectPHID`)
-) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT};
-
-USE `{$NAMESPACE}_phortune`;
-
- SET NAMES utf8 ;
-
- SET character_set_client = {$CHARSET} ;
-
-CREATE TABLE `phortune_cart` (
- `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
- `phid` varbinary(64) NOT NULL,
- `accountPHID` varbinary(64) NOT NULL,
- `authorPHID` varbinary(64) NOT NULL,
- `metadata` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL,
- `dateCreated` int(10) unsigned NOT NULL,
- `dateModified` int(10) unsigned NOT NULL,
- `status` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL,
- `cartClass` varchar(128) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL,
- `merchantPHID` varbinary(64) NOT NULL,
- `mailKey` binary(20) NOT NULL,
- `subscriptionPHID` varbinary(64) DEFAULT NULL,
- `isInvoice` tinyint(1) NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `key_phid` (`phid`),
- KEY `key_account` (`accountPHID`),
- KEY `key_merchant` (`merchantPHID`),
- KEY `key_subscription` (`subscriptionPHID`)
-) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT};
-
-USE `{$NAMESPACE}_phortune`;
-
- SET NAMES utf8 ;
-
- SET character_set_client = {$CHARSET} ;
-
-CREATE TABLE `phortune_carttransaction` (
- `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
- `phid` varbinary(64) NOT NULL,
- `authorPHID` varbinary(64) NOT NULL,
- `objectPHID` varbinary(64) NOT NULL,
- `viewPolicy` varbinary(64) NOT NULL,
- `editPolicy` varbinary(64) NOT NULL,
- `commentPHID` varbinary(64) DEFAULT NULL,
- `commentVersion` int(10) unsigned NOT NULL,
- `transactionType` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL,
- `oldValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL,
- `newValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL,
- `contentSource` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL,
- `metadata` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL,
- `dateCreated` int(10) unsigned NOT NULL,
- `dateModified` int(10) unsigned NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `key_phid` (`phid`),
- KEY `key_object` (`objectPHID`)
-) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT};
-
-USE `{$NAMESPACE}_phortune`;
-
- SET NAMES utf8 ;
-
- SET character_set_client = {$CHARSET} ;
-
-CREATE TABLE `phortune_charge` (
- `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
- `phid` varbinary(64) NOT NULL,
- `accountPHID` varbinary(64) NOT NULL,
- `authorPHID` varbinary(64) NOT NULL,
- `cartPHID` varbinary(64) NOT NULL,
- `paymentMethodPHID` varbinary(64) DEFAULT NULL,
- `amountAsCurrency` varchar(64) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL,
- `status` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL,
- `metadata` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL,
- `dateCreated` int(10) unsigned NOT NULL,
- `dateModified` int(10) unsigned NOT NULL,
- `merchantPHID` varbinary(64) NOT NULL,
- `providerPHID` varbinary(64) NOT NULL,
- `amountRefundedAsCurrency` varchar(64) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL,
- `refundingPHID` varbinary(64) DEFAULT NULL,
- `refundedChargePHID` varbinary(64) DEFAULT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `key_phid` (`phid`),
- KEY `key_cart` (`cartPHID`),
- KEY `key_account` (`accountPHID`),
- KEY `key_merchant` (`merchantPHID`),
- KEY `key_provider` (`providerPHID`)
-) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT};
-
-USE `{$NAMESPACE}_phortune`;
-
- SET NAMES utf8 ;
-
- SET character_set_client = {$CHARSET} ;
-
-CREATE TABLE `phortune_merchant` (
- `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
- `phid` varbinary(64) NOT NULL,
- `name` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL,
- `viewPolicy` varbinary(64) NOT NULL,
- `dateCreated` int(10) unsigned NOT NULL,
- `dateModified` int(10) unsigned NOT NULL,
- `description` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL,
- `contactInfo` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL,
- `profileImagePHID` varbinary(64) DEFAULT NULL,
- `invoiceEmail` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL,
- `invoiceFooter` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `key_phid` (`phid`)
-) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT};
-
-USE `{$NAMESPACE}_phortune`;
-
- SET NAMES utf8 ;
-
- SET character_set_client = {$CHARSET} ;
-
-CREATE TABLE `phortune_merchanttransaction` (
- `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
- `phid` varbinary(64) NOT NULL,
- `authorPHID` varbinary(64) NOT NULL,
- `objectPHID` varbinary(64) NOT NULL,
- `viewPolicy` varbinary(64) NOT NULL,
- `editPolicy` varbinary(64) NOT NULL,
- `commentPHID` varbinary(64) DEFAULT NULL,
- `commentVersion` int(10) unsigned NOT NULL,
- `transactionType` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL,
- `oldValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL,
- `newValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL,
- `contentSource` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL,
- `metadata` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL,
- `dateCreated` int(10) unsigned NOT NULL,
- `dateModified` int(10) unsigned NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `key_phid` (`phid`),
- KEY `key_object` (`objectPHID`)
-) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT};
-
-USE `{$NAMESPACE}_phortune`;
-
- SET NAMES utf8 ;
-
- SET character_set_client = {$CHARSET} ;
-
-CREATE TABLE `phortune_paymentmethod` (
- `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
- `phid` varbinary(64) NOT NULL,
- `name` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL,
- `status` varchar(64) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL,
- `accountPHID` varbinary(64) NOT NULL,
- `authorPHID` varbinary(64) NOT NULL,
- `metadata` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL,
- `dateCreated` int(10) unsigned NOT NULL,
- `dateModified` int(10) unsigned NOT NULL,
- `brand` varchar(64) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL,
- `expires` varchar(16) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL,
- `lastFourDigits` varchar(16) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL,
- `merchantPHID` varbinary(64) NOT NULL,
- `providerPHID` varbinary(64) NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `key_phid` (`phid`),
- KEY `key_account` (`accountPHID`,`status`),
- KEY `key_merchant` (`merchantPHID`,`accountPHID`)
-) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT};
-
-USE `{$NAMESPACE}_phortune`;
-
- SET NAMES utf8 ;
-
- SET character_set_client = {$CHARSET} ;
-
-CREATE TABLE `phortune_paymentproviderconfig` (
- `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
- `phid` varbinary(64) NOT NULL,
- `merchantPHID` varbinary(64) NOT NULL,
- `providerClassKey` binary(12) NOT NULL,
- `providerClass` varchar(128) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL,
- `metadata` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL,
- `dateCreated` int(10) unsigned NOT NULL,
- `dateModified` int(10) unsigned NOT NULL,
- `isEnabled` tinyint(1) NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `key_phid` (`phid`),
- UNIQUE KEY `key_merchant` (`merchantPHID`,`providerClassKey`)
-) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT};
-
-USE `{$NAMESPACE}_phortune`;
-
- SET NAMES utf8 ;
-
- SET character_set_client = {$CHARSET} ;
-
-CREATE TABLE `phortune_paymentproviderconfigtransaction` (
- `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
- `phid` varbinary(64) NOT NULL,
- `authorPHID` varbinary(64) NOT NULL,
- `objectPHID` varbinary(64) NOT NULL,
- `viewPolicy` varbinary(64) NOT NULL,
- `editPolicy` varbinary(64) NOT NULL,
- `commentPHID` varbinary(64) DEFAULT NULL,
- `commentVersion` int(10) unsigned NOT NULL,
- `transactionType` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL,
- `oldValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL,
- `newValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL,
- `contentSource` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL,
- `metadata` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL,
- `dateCreated` int(10) unsigned NOT NULL,
- `dateModified` int(10) unsigned NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `key_phid` (`phid`),
- KEY `key_object` (`objectPHID`)
-) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT};
-
-USE `{$NAMESPACE}_phortune`;
-
- SET NAMES utf8 ;
-
- SET character_set_client = {$CHARSET} ;
-
-CREATE TABLE `phortune_product` (
- `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
- `phid` varbinary(64) NOT NULL,
- `metadata` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL,
- `dateCreated` int(10) unsigned NOT NULL,
- `dateModified` int(10) unsigned NOT NULL,
- `productClassKey` binary(12) NOT NULL,
- `productClass` varchar(128) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL,
- `productRefKey` binary(12) NOT NULL,
- `productRef` varchar(128) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `key_phid` (`phid`),
- UNIQUE KEY `key_product` (`productClassKey`,`productRefKey`)
-) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT};
-
-USE `{$NAMESPACE}_phortune`;
-
- SET NAMES utf8 ;
-
- SET character_set_client = {$CHARSET} ;
-
-CREATE TABLE `phortune_purchase` (
- `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
- `phid` varbinary(64) NOT NULL,
- `productPHID` varbinary(64) NOT NULL,
- `accountPHID` varbinary(64) NOT NULL,
- `authorPHID` varbinary(64) NOT NULL,
- `cartPHID` varbinary(64) DEFAULT NULL,
- `basePriceAsCurrency` varchar(64) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL,
- `quantity` int(10) unsigned NOT NULL,
- `status` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL,
- `metadata` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL,
- `dateCreated` int(10) unsigned NOT NULL,
- `dateModified` int(10) unsigned NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `key_phid` (`phid`),
- KEY `key_cart` (`cartPHID`)
-) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT};
-
-USE `{$NAMESPACE}_phortune`;
-
- SET NAMES utf8 ;
-
- SET character_set_client = {$CHARSET} ;
-
-CREATE TABLE `phortune_subscription` (
- `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
- `phid` varbinary(64) NOT NULL,
- `accountPHID` varbinary(64) NOT NULL,
- `merchantPHID` varbinary(64) NOT NULL,
- `triggerPHID` varbinary(64) NOT NULL,
- `authorPHID` varbinary(64) NOT NULL,
- `subscriptionClassKey` binary(12) NOT NULL,
- `subscriptionClass` varchar(128) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL,
- `subscriptionRefKey` binary(12) NOT NULL,
- `subscriptionRef` varchar(128) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL,
- `status` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL,
- `metadata` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL,
- `dateCreated` int(10) unsigned NOT NULL,
- `dateModified` int(10) unsigned NOT NULL,
- `defaultPaymentMethodPHID` varbinary(64) DEFAULT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `key_phid` (`phid`),
- UNIQUE KEY `key_subscription` (`subscriptionClassKey`,`subscriptionRefKey`),
- KEY `key_account` (`accountPHID`),
- KEY `key_merchant` (`merchantPHID`)
-) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT};
-
CREATE DATABASE /*!32312 IF NOT EXISTS*/ `{$NAMESPACE}_phrequent` /*!40100 DEFAULT CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} */;
USE `{$NAMESPACE}_phrequent`;
diff --git a/scripts/setup/manage_phortune.php b/scripts/setup/manage_phortune.php
deleted file mode 100755
--- a/scripts/setup/manage_phortune.php
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/usr/bin/env php
-setTagline(pht('manage billing'));
-$args->setSynopsis(<<parseStandardArguments();
-
-$workflows = id(new PhutilClassMapQuery())
- ->setAncestorClass('PhabricatorPhortuneManagementWorkflow')
- ->execute();
-$workflows[] = new PhutilHelpArgumentWorkflow();
-$args->parseWorkflows($workflows);
diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php
--- a/src/__phutil_library_map__.php
+++ b/src/__phutil_library_map__.php
@@ -1333,50 +1333,6 @@
'FuelMenuItemView' => 'view/fuel/FuelMenuItemView.php',
'FuelMenuView' => 'view/fuel/FuelMenuView.php',
'FuelView' => 'view/fuel/FuelView.php',
- 'FundBacker' => 'applications/fund/storage/FundBacker.php',
- 'FundBackerCart' => 'applications/fund/phortune/FundBackerCart.php',
- 'FundBackerEditor' => 'applications/fund/editor/FundBackerEditor.php',
- 'FundBackerListController' => 'applications/fund/controller/FundBackerListController.php',
- 'FundBackerPHIDType' => 'applications/fund/phid/FundBackerPHIDType.php',
- 'FundBackerProduct' => 'applications/fund/phortune/FundBackerProduct.php',
- 'FundBackerQuery' => 'applications/fund/query/FundBackerQuery.php',
- 'FundBackerRefundTransaction' => 'applications/fund/xaction/FundBackerRefundTransaction.php',
- 'FundBackerSearchEngine' => 'applications/fund/query/FundBackerSearchEngine.php',
- 'FundBackerStatusTransaction' => 'applications/fund/xaction/FundBackerStatusTransaction.php',
- 'FundBackerTransaction' => 'applications/fund/storage/FundBackerTransaction.php',
- 'FundBackerTransactionQuery' => 'applications/fund/query/FundBackerTransactionQuery.php',
- 'FundBackerTransactionType' => 'applications/fund/xaction/FundBackerTransactionType.php',
- 'FundController' => 'applications/fund/controller/FundController.php',
- 'FundCreateInitiativesCapability' => 'applications/fund/capability/FundCreateInitiativesCapability.php',
- 'FundDAO' => 'applications/fund/storage/FundDAO.php',
- 'FundDefaultViewCapability' => 'applications/fund/capability/FundDefaultViewCapability.php',
- 'FundInitiative' => 'applications/fund/storage/FundInitiative.php',
- 'FundInitiativeBackController' => 'applications/fund/controller/FundInitiativeBackController.php',
- 'FundInitiativeBackerTransaction' => 'applications/fund/xaction/FundInitiativeBackerTransaction.php',
- 'FundInitiativeCloseController' => 'applications/fund/controller/FundInitiativeCloseController.php',
- 'FundInitiativeDescriptionTransaction' => 'applications/fund/xaction/FundInitiativeDescriptionTransaction.php',
- 'FundInitiativeEditController' => 'applications/fund/controller/FundInitiativeEditController.php',
- 'FundInitiativeEditEngine' => 'applications/fund/editor/FundInitiativeEditEngine.php',
- 'FundInitiativeEditor' => 'applications/fund/editor/FundInitiativeEditor.php',
- 'FundInitiativeFerretEngine' => 'applications/fund/search/FundInitiativeFerretEngine.php',
- 'FundInitiativeFulltextEngine' => 'applications/fund/search/FundInitiativeFulltextEngine.php',
- 'FundInitiativeListController' => 'applications/fund/controller/FundInitiativeListController.php',
- 'FundInitiativeMerchantTransaction' => 'applications/fund/xaction/FundInitiativeMerchantTransaction.php',
- 'FundInitiativeNameTransaction' => 'applications/fund/xaction/FundInitiativeNameTransaction.php',
- 'FundInitiativePHIDType' => 'applications/fund/phid/FundInitiativePHIDType.php',
- 'FundInitiativeQuery' => 'applications/fund/query/FundInitiativeQuery.php',
- 'FundInitiativeRefundTransaction' => 'applications/fund/xaction/FundInitiativeRefundTransaction.php',
- 'FundInitiativeRemarkupRule' => 'applications/fund/remarkup/FundInitiativeRemarkupRule.php',
- 'FundInitiativeReplyHandler' => 'applications/fund/mail/FundInitiativeReplyHandler.php',
- 'FundInitiativeRisksTransaction' => 'applications/fund/xaction/FundInitiativeRisksTransaction.php',
- 'FundInitiativeSearchEngine' => 'applications/fund/query/FundInitiativeSearchEngine.php',
- 'FundInitiativeStatusTransaction' => 'applications/fund/xaction/FundInitiativeStatusTransaction.php',
- 'FundInitiativeTransaction' => 'applications/fund/storage/FundInitiativeTransaction.php',
- 'FundInitiativeTransactionComment' => 'applications/fund/storage/FundInitiativeTransactionComment.php',
- 'FundInitiativeTransactionQuery' => 'applications/fund/query/FundInitiativeTransactionQuery.php',
- 'FundInitiativeTransactionType' => 'applications/fund/xaction/FundInitiativeTransactionType.php',
- 'FundInitiativeViewController' => 'applications/fund/controller/FundInitiativeViewController.php',
- 'FundSchemaSpec' => 'applications/fund/storage/FundSchemaSpec.php',
'HarbormasterAbortOlderBuildsBuildStepImplementation' => 'applications/harbormaster/step/HarbormasterAbortOlderBuildsBuildStepImplementation.php',
'HarbormasterArcLintBuildStepImplementation' => 'applications/harbormaster/step/HarbormasterArcLintBuildStepImplementation.php',
'HarbormasterArcUnitBuildStepImplementation' => 'applications/harbormaster/step/HarbormasterArcUnitBuildStepImplementation.php',
@@ -3563,7 +3519,6 @@
'PhabricatorFulltextResultSet' => 'applications/search/query/PhabricatorFulltextResultSet.php',
'PhabricatorFulltextStorageEngine' => 'applications/search/fulltextstorage/PhabricatorFulltextStorageEngine.php',
'PhabricatorFulltextToken' => 'applications/search/query/PhabricatorFulltextToken.php',
- 'PhabricatorFundApplication' => 'applications/fund/application/PhabricatorFundApplication.php',
'PhabricatorGDSetupCheck' => 'applications/config/check/PhabricatorGDSetupCheck.php',
'PhabricatorGarbageCollector' => 'infrastructure/daemon/garbagecollector/PhabricatorGarbageCollector.php',
'PhabricatorGarbageCollectorManagementCollectWorkflow' => 'infrastructure/daemon/garbagecollector/management/PhabricatorGarbageCollectorManagementCollectWorkflow.php',
@@ -4019,21 +3974,7 @@
'PhabricatorOwnersPathsSearchEngineAttachment' => 'applications/owners/engineextension/PhabricatorOwnersPathsSearchEngineAttachment.php',
'PhabricatorOwnersSchemaSpec' => 'applications/owners/storage/PhabricatorOwnersSchemaSpec.php',
'PhabricatorOwnersSearchField' => 'applications/owners/searchfield/PhabricatorOwnersSearchField.php',
- 'PhabricatorPDFCatalogObject' => 'applications/phortune/pdf/PhabricatorPDFCatalogObject.php',
- 'PhabricatorPDFContentsObject' => 'applications/phortune/pdf/PhabricatorPDFContentsObject.php',
'PhabricatorPDFDocumentEngine' => 'applications/files/document/PhabricatorPDFDocumentEngine.php',
- 'PhabricatorPDFFontObject' => 'applications/phortune/pdf/PhabricatorPDFFontObject.php',
- 'PhabricatorPDFFragment' => 'applications/phortune/pdf/PhabricatorPDFFragment.php',
- 'PhabricatorPDFFragmentOffset' => 'applications/phortune/pdf/PhabricatorPDFFragmentOffset.php',
- 'PhabricatorPDFGenerator' => 'applications/phortune/pdf/PhabricatorPDFGenerator.php',
- 'PhabricatorPDFHeadFragment' => 'applications/phortune/pdf/PhabricatorPDFHeadFragment.php',
- 'PhabricatorPDFInfoObject' => 'applications/phortune/pdf/PhabricatorPDFInfoObject.php',
- 'PhabricatorPDFIterator' => 'applications/phortune/pdf/PhabricatorPDFIterator.php',
- 'PhabricatorPDFObject' => 'applications/phortune/pdf/PhabricatorPDFObject.php',
- 'PhabricatorPDFPageObject' => 'applications/phortune/pdf/PhabricatorPDFPageObject.php',
- 'PhabricatorPDFPagesObject' => 'applications/phortune/pdf/PhabricatorPDFPagesObject.php',
- 'PhabricatorPDFResourcesObject' => 'applications/phortune/pdf/PhabricatorPDFResourcesObject.php',
- 'PhabricatorPDFTailFragment' => 'applications/phortune/pdf/PhabricatorPDFTailFragment.php',
'PhabricatorPHDConfigOptions' => 'applications/config/option/PhabricatorPHDConfigOptions.php',
'PhabricatorPHID' => 'applications/phid/storage/PhabricatorPHID.php',
'PhabricatorPHIDConstants' => 'applications/phid/PhabricatorPHIDConstants.php',
@@ -4235,11 +4176,6 @@
'PhabricatorPholioMockTestDataGenerator' => 'applications/pholio/lipsum/PhabricatorPholioMockTestDataGenerator.php',
'PhabricatorPhoneNumber' => 'applications/metamta/message/PhabricatorPhoneNumber.php',
'PhabricatorPhoneNumberTestCase' => 'applications/metamta/message/__tests__/PhabricatorPhoneNumberTestCase.php',
- 'PhabricatorPhortuneApplication' => 'applications/phortune/application/PhabricatorPhortuneApplication.php',
- 'PhabricatorPhortuneContentSource' => 'applications/phortune/contentsource/PhabricatorPhortuneContentSource.php',
- 'PhabricatorPhortuneManagementInvoiceWorkflow' => 'applications/phortune/management/PhabricatorPhortuneManagementInvoiceWorkflow.php',
- 'PhabricatorPhortuneManagementWorkflow' => 'applications/phortune/management/PhabricatorPhortuneManagementWorkflow.php',
- 'PhabricatorPhortuneTestCase' => 'applications/phortune/__tests__/PhabricatorPhortuneTestCase.php',
'PhabricatorPhrequentApplication' => 'applications/phrequent/application/PhabricatorPhrequentApplication.php',
'PhabricatorPhrictionApplication' => 'applications/phriction/application/PhabricatorPhrictionApplication.php',
'PhabricatorPhurlApplication' => 'applications/phurl/application/PhabricatorPhurlApplication.php',
@@ -5389,185 +5325,6 @@
'PholioUploadedImageView' => 'applications/pholio/view/PholioUploadedImageView.php',
'PhorgeCodeWarningSetupCheck' => 'applications/config/check/PhorgeCodeWarningSetupCheck.php',
'PhorgeSystemDeprecationWarningListener' => 'applications/system/events/PhorgeSystemDeprecationWarningListener.php',
- 'PhortuneAccount' => 'applications/phortune/storage/PhortuneAccount.php',
- 'PhortuneAccountAddManagerController' => 'applications/phortune/controller/account/PhortuneAccountAddManagerController.php',
- 'PhortuneAccountBillingAddressTransaction' => 'applications/phortune/xaction/PhortuneAccountBillingAddressTransaction.php',
- 'PhortuneAccountBillingNameTransaction' => 'applications/phortune/xaction/PhortuneAccountBillingNameTransaction.php',
- 'PhortuneAccountChargeListController' => 'applications/phortune/controller/account/PhortuneAccountChargeListController.php',
- 'PhortuneAccountChargesController' => 'applications/phortune/controller/account/PhortuneAccountChargesController.php',
- 'PhortuneAccountController' => 'applications/phortune/controller/account/PhortuneAccountController.php',
- 'PhortuneAccountDetailsController' => 'applications/phortune/controller/account/PhortuneAccountDetailsController.php',
- 'PhortuneAccountEditController' => 'applications/phortune/controller/account/PhortuneAccountEditController.php',
- 'PhortuneAccountEditEngine' => 'applications/phortune/editor/PhortuneAccountEditEngine.php',
- 'PhortuneAccountEditor' => 'applications/phortune/editor/PhortuneAccountEditor.php',
- 'PhortuneAccountEmail' => 'applications/phortune/storage/PhortuneAccountEmail.php',
- 'PhortuneAccountEmailAddressTransaction' => 'applications/phortune/xaction/PhortuneAccountEmailAddressTransaction.php',
- 'PhortuneAccountEmailAddressesController' => 'applications/phortune/controller/account/PhortuneAccountEmailAddressesController.php',
- 'PhortuneAccountEmailEditController' => 'applications/phortune/controller/account/PhortuneAccountEmailEditController.php',
- 'PhortuneAccountEmailEditEngine' => 'applications/phortune/editor/PhortuneAccountEmailEditEngine.php',
- 'PhortuneAccountEmailEditor' => 'applications/phortune/editor/PhortuneAccountEmailEditor.php',
- 'PhortuneAccountEmailPHIDType' => 'applications/phortune/phid/PhortuneAccountEmailPHIDType.php',
- 'PhortuneAccountEmailQuery' => 'applications/phortune/query/PhortuneAccountEmailQuery.php',
- 'PhortuneAccountEmailRotateController' => 'applications/phortune/controller/account/PhortuneAccountEmailRotateController.php',
- 'PhortuneAccountEmailRotateTransaction' => 'applications/phortune/xaction/PhortuneAccountEmailRotateTransaction.php',
- 'PhortuneAccountEmailStatus' => 'applications/phortune/constants/PhortuneAccountEmailStatus.php',
- 'PhortuneAccountEmailStatusController' => 'applications/phortune/controller/account/PhortuneAccountEmailStatusController.php',
- 'PhortuneAccountEmailStatusTransaction' => 'applications/phortune/xaction/PhortuneAccountEmailStatusTransaction.php',
- 'PhortuneAccountEmailTransaction' => 'applications/phortune/storage/PhortuneAccountEmailTransaction.php',
- 'PhortuneAccountEmailTransactionQuery' => 'applications/phortune/query/PhortuneAccountEmailTransactionQuery.php',
- 'PhortuneAccountEmailTransactionType' => 'applications/phortune/xaction/PhortuneAccountEmailTransactionType.php',
- 'PhortuneAccountEmailViewController' => 'applications/phortune/controller/account/PhortuneAccountEmailViewController.php',
- 'PhortuneAccountHasMemberEdgeType' => 'applications/phortune/edge/PhortuneAccountHasMemberEdgeType.php',
- 'PhortuneAccountHasMerchantEdgeType' => 'applications/phortune/edge/PhortuneAccountHasMerchantEdgeType.php',
- 'PhortuneAccountListController' => 'applications/phortune/controller/account/PhortuneAccountListController.php',
- 'PhortuneAccountManagersController' => 'applications/phortune/controller/account/PhortuneAccountManagersController.php',
- 'PhortuneAccountNameTransaction' => 'applications/phortune/xaction/PhortuneAccountNameTransaction.php',
- 'PhortuneAccountOrderListController' => 'applications/phortune/controller/account/PhortuneAccountOrderListController.php',
- 'PhortuneAccountOrdersController' => 'applications/phortune/controller/account/PhortuneAccountOrdersController.php',
- 'PhortuneAccountOverviewController' => 'applications/phortune/controller/account/PhortuneAccountOverviewController.php',
- 'PhortuneAccountPHIDType' => 'applications/phortune/phid/PhortuneAccountPHIDType.php',
- 'PhortuneAccountPaymentMethodController' => 'applications/phortune/controller/account/PhortuneAccountPaymentMethodController.php',
- 'PhortuneAccountPaymentMethodViewController' => 'applications/phortune/controller/account/PhortuneAccountPaymentMethodViewController.php',
- 'PhortuneAccountProfileController' => 'applications/phortune/controller/account/PhortuneAccountProfileController.php',
- 'PhortuneAccountQuery' => 'applications/phortune/query/PhortuneAccountQuery.php',
- 'PhortuneAccountSubscriptionAutopayController' => 'applications/phortune/controller/account/PhortuneAccountSubscriptionAutopayController.php',
- 'PhortuneAccountSubscriptionController' => 'applications/phortune/controller/account/PhortuneAccountSubscriptionController.php',
- 'PhortuneAccountSubscriptionViewController' => 'applications/phortune/controller/account/PhortuneAccountSubscriptionViewController.php',
- 'PhortuneAccountTransaction' => 'applications/phortune/storage/PhortuneAccountTransaction.php',
- 'PhortuneAccountTransactionQuery' => 'applications/phortune/query/PhortuneAccountTransactionQuery.php',
- 'PhortuneAccountTransactionType' => 'applications/phortune/xaction/PhortuneAccountTransactionType.php',
- 'PhortuneAdHocCart' => 'applications/phortune/cart/PhortuneAdHocCart.php',
- 'PhortuneAdHocProduct' => 'applications/phortune/product/PhortuneAdHocProduct.php',
- 'PhortuneAddPaymentMethodAction' => 'applications/phortune/action/PhortuneAddPaymentMethodAction.php',
- 'PhortuneCart' => 'applications/phortune/storage/PhortuneCart.php',
- 'PhortuneCartAcceptController' => 'applications/phortune/controller/cart/PhortuneCartAcceptController.php',
- 'PhortuneCartCancelController' => 'applications/phortune/controller/cart/PhortuneCartCancelController.php',
- 'PhortuneCartCheckoutController' => 'applications/phortune/controller/cart/PhortuneCartCheckoutController.php',
- 'PhortuneCartController' => 'applications/phortune/controller/cart/PhortuneCartController.php',
- 'PhortuneCartEditor' => 'applications/phortune/editor/PhortuneCartEditor.php',
- 'PhortuneCartImplementation' => 'applications/phortune/cart/PhortuneCartImplementation.php',
- 'PhortuneCartPHIDType' => 'applications/phortune/phid/PhortuneCartPHIDType.php',
- 'PhortuneCartQuery' => 'applications/phortune/query/PhortuneCartQuery.php',
- 'PhortuneCartReplyHandler' => 'applications/phortune/mail/PhortuneCartReplyHandler.php',
- 'PhortuneCartSearchEngine' => 'applications/phortune/query/PhortuneCartSearchEngine.php',
- 'PhortuneCartTransaction' => 'applications/phortune/storage/PhortuneCartTransaction.php',
- 'PhortuneCartTransactionQuery' => 'applications/phortune/query/PhortuneCartTransactionQuery.php',
- 'PhortuneCartUpdateController' => 'applications/phortune/controller/cart/PhortuneCartUpdateController.php',
- 'PhortuneCartViewController' => 'applications/phortune/controller/cart/PhortuneCartViewController.php',
- 'PhortuneCartVoidController' => 'applications/phortune/controller/cart/PhortuneCartVoidController.php',
- 'PhortuneCharge' => 'applications/phortune/storage/PhortuneCharge.php',
- 'PhortuneChargePHIDType' => 'applications/phortune/phid/PhortuneChargePHIDType.php',
- 'PhortuneChargeQuery' => 'applications/phortune/query/PhortuneChargeQuery.php',
- 'PhortuneChargeSearchEngine' => 'applications/phortune/query/PhortuneChargeSearchEngine.php',
- 'PhortuneChargeTableView' => 'applications/phortune/view/PhortuneChargeTableView.php',
- 'PhortuneConstants' => 'applications/phortune/constants/PhortuneConstants.php',
- 'PhortuneController' => 'applications/phortune/controller/PhortuneController.php',
- 'PhortuneCreditCardForm' => 'applications/phortune/view/PhortuneCreditCardForm.php',
- 'PhortuneCurrency' => 'applications/phortune/currency/PhortuneCurrency.php',
- 'PhortuneCurrencySerializer' => 'applications/phortune/currency/PhortuneCurrencySerializer.php',
- 'PhortuneCurrencyTestCase' => 'applications/phortune/currency/__tests__/PhortuneCurrencyTestCase.php',
- 'PhortuneDAO' => 'applications/phortune/storage/PhortuneDAO.php',
- 'PhortuneDisplayException' => 'applications/phortune/exception/PhortuneDisplayException.php',
- 'PhortuneErrCode' => 'applications/phortune/constants/PhortuneErrCode.php',
- 'PhortuneExternalController' => 'applications/phortune/controller/external/PhortuneExternalController.php',
- 'PhortuneExternalOrderController' => 'applications/phortune/controller/external/PhortuneExternalOrderController.php',
- 'PhortuneExternalOverviewController' => 'applications/phortune/controller/external/PhortuneExternalOverviewController.php',
- 'PhortuneExternalUnsubscribeController' => 'applications/phortune/controller/external/PhortuneExternalUnsubscribeController.php',
- 'PhortuneLandingController' => 'applications/phortune/controller/PhortuneLandingController.php',
- 'PhortuneMemberHasAccountEdgeType' => 'applications/phortune/edge/PhortuneMemberHasAccountEdgeType.php',
- 'PhortuneMemberHasMerchantEdgeType' => 'applications/phortune/edge/PhortuneMemberHasMerchantEdgeType.php',
- 'PhortuneMerchant' => 'applications/phortune/storage/PhortuneMerchant.php',
- 'PhortuneMerchantAddManagerController' => 'applications/phortune/controller/merchant/PhortuneMerchantAddManagerController.php',
- 'PhortuneMerchantCapability' => 'applications/phortune/capability/PhortuneMerchantCapability.php',
- 'PhortuneMerchantContactInfoTransaction' => 'applications/phortune/xaction/PhortuneMerchantContactInfoTransaction.php',
- 'PhortuneMerchantController' => 'applications/phortune/controller/merchant/PhortuneMerchantController.php',
- 'PhortuneMerchantDescriptionTransaction' => 'applications/phortune/xaction/PhortuneMerchantDescriptionTransaction.php',
- 'PhortuneMerchantDetailsController' => 'applications/phortune/controller/merchant/PhortuneMerchantDetailsController.php',
- 'PhortuneMerchantEditController' => 'applications/phortune/controller/merchant/PhortuneMerchantEditController.php',
- 'PhortuneMerchantEditEngine' => 'applications/phortune/editor/PhortuneMerchantEditEngine.php',
- 'PhortuneMerchantEditor' => 'applications/phortune/editor/PhortuneMerchantEditor.php',
- 'PhortuneMerchantHasAccountEdgeType' => 'applications/phortune/edge/PhortuneMerchantHasAccountEdgeType.php',
- 'PhortuneMerchantHasMemberEdgeType' => 'applications/phortune/edge/PhortuneMerchantHasMemberEdgeType.php',
- 'PhortuneMerchantInvoiceCreateController' => 'applications/phortune/controller/merchant/PhortuneMerchantInvoiceCreateController.php',
- 'PhortuneMerchantInvoiceEmailTransaction' => 'applications/phortune/xaction/PhortuneMerchantInvoiceEmailTransaction.php',
- 'PhortuneMerchantInvoiceFooterTransaction' => 'applications/phortune/xaction/PhortuneMerchantInvoiceFooterTransaction.php',
- 'PhortuneMerchantListController' => 'applications/phortune/controller/merchant/PhortuneMerchantListController.php',
- 'PhortuneMerchantManagersController' => 'applications/phortune/controller/merchant/PhortuneMerchantManagersController.php',
- 'PhortuneMerchantNameTransaction' => 'applications/phortune/xaction/PhortuneMerchantNameTransaction.php',
- 'PhortuneMerchantOrderListController' => 'applications/phortune/controller/merchant/PhortuneMerchantOrderListController.php',
- 'PhortuneMerchantOrdersController' => 'applications/phortune/controller/merchant/PhortuneMerchantOrdersController.php',
- 'PhortuneMerchantOverviewController' => 'applications/phortune/controller/merchant/PhortuneMerchantOverviewController.php',
- 'PhortuneMerchantPHIDType' => 'applications/phortune/phid/PhortuneMerchantPHIDType.php',
- 'PhortuneMerchantPictureController' => 'applications/phortune/controller/merchant/PhortuneMerchantPictureController.php',
- 'PhortuneMerchantPictureTransaction' => 'applications/phortune/xaction/PhortuneMerchantPictureTransaction.php',
- 'PhortuneMerchantProfileController' => 'applications/phortune/controller/merchant/PhortuneMerchantProfileController.php',
- 'PhortuneMerchantProviderDisableController' => 'applications/phortune/controller/merchant/PhortuneMerchantProviderDisableController.php',
- 'PhortuneMerchantProviderEditController' => 'applications/phortune/controller/merchant/PhortuneMerchantProviderEditController.php',
- 'PhortuneMerchantProviderViewController' => 'applications/phortune/controller/merchant/PhortuneMerchantProviderViewController.php',
- 'PhortuneMerchantProvidersController' => 'applications/phortune/controller/merchant/PhortuneMerchantProvidersController.php',
- 'PhortuneMerchantQuery' => 'applications/phortune/query/PhortuneMerchantQuery.php',
- 'PhortuneMerchantSearchEngine' => 'applications/phortune/query/PhortuneMerchantSearchEngine.php',
- 'PhortuneMerchantSubscriptionListController' => 'applications/phortune/controller/merchant/PhortuneMerchantSubscriptionListController.php',
- 'PhortuneMerchantSubscriptionsController' => 'applications/phortune/controller/merchant/PhortuneMerchantSubscriptionsController.php',
- 'PhortuneMerchantTransaction' => 'applications/phortune/storage/PhortuneMerchantTransaction.php',
- 'PhortuneMerchantTransactionQuery' => 'applications/phortune/query/PhortuneMerchantTransactionQuery.php',
- 'PhortuneMerchantTransactionType' => 'applications/phortune/xaction/PhortuneMerchantTransactionType.php',
- 'PhortuneMonthYearExpiryControl' => 'applications/phortune/control/PhortuneMonthYearExpiryControl.php',
- 'PhortuneOrderDescriptionView' => 'applications/phortune/view/PhortuneOrderDescriptionView.php',
- 'PhortuneOrderItemsView' => 'applications/phortune/view/PhortuneOrderItemsView.php',
- 'PhortuneOrderSummaryView' => 'applications/phortune/view/PhortuneOrderSummaryView.php',
- 'PhortuneOrderTableView' => 'applications/phortune/view/PhortuneOrderTableView.php',
- 'PhortuneOrderView' => 'applications/phortune/view/PhortuneOrderView.php',
- 'PhortunePayPalPaymentProvider' => 'applications/phortune/provider/PhortunePayPalPaymentProvider.php',
- 'PhortunePaymentMethod' => 'applications/phortune/storage/PhortunePaymentMethod.php',
- 'PhortunePaymentMethodCreateController' => 'applications/phortune/controller/paymentmethod/PhortunePaymentMethodCreateController.php',
- 'PhortunePaymentMethodDisableController' => 'applications/phortune/controller/paymentmethod/PhortunePaymentMethodDisableController.php',
- 'PhortunePaymentMethodEditController' => 'applications/phortune/controller/paymentmethod/PhortunePaymentMethodEditController.php',
- 'PhortunePaymentMethodEditor' => 'applications/phortune/editor/PhortunePaymentMethodEditor.php',
- 'PhortunePaymentMethodNameTransaction' => 'applications/phortune/xaction/paymentmethod/PhortunePaymentMethodNameTransaction.php',
- 'PhortunePaymentMethodPHIDType' => 'applications/phortune/phid/PhortunePaymentMethodPHIDType.php',
- 'PhortunePaymentMethodPolicyCodex' => 'applications/phortune/codex/PhortunePaymentMethodPolicyCodex.php',
- 'PhortunePaymentMethodQuery' => 'applications/phortune/query/PhortunePaymentMethodQuery.php',
- 'PhortunePaymentMethodStatusTransaction' => 'applications/phortune/xaction/paymentmethod/PhortunePaymentMethodStatusTransaction.php',
- 'PhortunePaymentMethodTransaction' => 'applications/phortune/storage/PhortunePaymentMethodTransaction.php',
- 'PhortunePaymentMethodTransactionQuery' => 'applications/phortune/query/PhortunePaymentMethodTransactionQuery.php',
- 'PhortunePaymentMethodTransactionType' => 'applications/phortune/xaction/paymentmethod/PhortunePaymentMethodTransactionType.php',
- 'PhortunePaymentProvider' => 'applications/phortune/provider/PhortunePaymentProvider.php',
- 'PhortunePaymentProviderConfig' => 'applications/phortune/storage/PhortunePaymentProviderConfig.php',
- 'PhortunePaymentProviderConfigEditor' => 'applications/phortune/editor/PhortunePaymentProviderConfigEditor.php',
- 'PhortunePaymentProviderConfigQuery' => 'applications/phortune/query/PhortunePaymentProviderConfigQuery.php',
- 'PhortunePaymentProviderConfigTransaction' => 'applications/phortune/storage/PhortunePaymentProviderConfigTransaction.php',
- 'PhortunePaymentProviderConfigTransactionQuery' => 'applications/phortune/query/PhortunePaymentProviderConfigTransactionQuery.php',
- 'PhortunePaymentProviderPHIDType' => 'applications/phortune/phid/PhortunePaymentProviderPHIDType.php',
- 'PhortunePaymentProviderTestCase' => 'applications/phortune/provider/__tests__/PhortunePaymentProviderTestCase.php',
- 'PhortuneProduct' => 'applications/phortune/storage/PhortuneProduct.php',
- 'PhortuneProductImplementation' => 'applications/phortune/product/PhortuneProductImplementation.php',
- 'PhortuneProductListController' => 'applications/phortune/controller/product/PhortuneProductListController.php',
- 'PhortuneProductPHIDType' => 'applications/phortune/phid/PhortuneProductPHIDType.php',
- 'PhortuneProductQuery' => 'applications/phortune/query/PhortuneProductQuery.php',
- 'PhortuneProductViewController' => 'applications/phortune/controller/product/PhortuneProductViewController.php',
- 'PhortuneProviderActionController' => 'applications/phortune/controller/provider/PhortuneProviderActionController.php',
- 'PhortunePurchase' => 'applications/phortune/storage/PhortunePurchase.php',
- 'PhortunePurchasePHIDType' => 'applications/phortune/phid/PhortunePurchasePHIDType.php',
- 'PhortunePurchaseQuery' => 'applications/phortune/query/PhortunePurchaseQuery.php',
- 'PhortuneSchemaSpec' => 'applications/phortune/storage/PhortuneSchemaSpec.php',
- 'PhortuneStripePaymentProvider' => 'applications/phortune/provider/PhortuneStripePaymentProvider.php',
- 'PhortuneSubscription' => 'applications/phortune/storage/PhortuneSubscription.php',
- 'PhortuneSubscriptionAutopayTransaction' => 'applications/phortune/xaction/subscription/PhortuneSubscriptionAutopayTransaction.php',
- 'PhortuneSubscriptionCart' => 'applications/phortune/cart/PhortuneSubscriptionCart.php',
- 'PhortuneSubscriptionEditor' => 'applications/phortune/editor/PhortuneSubscriptionEditor.php',
- 'PhortuneSubscriptionImplementation' => 'applications/phortune/subscription/PhortuneSubscriptionImplementation.php',
- 'PhortuneSubscriptionPHIDType' => 'applications/phortune/phid/PhortuneSubscriptionPHIDType.php',
- 'PhortuneSubscriptionPolicyCodex' => 'applications/phortune/codex/PhortuneSubscriptionPolicyCodex.php',
- 'PhortuneSubscriptionProduct' => 'applications/phortune/product/PhortuneSubscriptionProduct.php',
- 'PhortuneSubscriptionQuery' => 'applications/phortune/query/PhortuneSubscriptionQuery.php',
- 'PhortuneSubscriptionSearchEngine' => 'applications/phortune/query/PhortuneSubscriptionSearchEngine.php',
- 'PhortuneSubscriptionTableView' => 'applications/phortune/view/PhortuneSubscriptionTableView.php',
- 'PhortuneSubscriptionTransaction' => 'applications/phortune/storage/PhortuneSubscriptionTransaction.php',
- 'PhortuneSubscriptionTransactionQuery' => 'applications/phortune/query/PhortuneSubscriptionTransactionQuery.php',
- 'PhortuneSubscriptionTransactionType' => 'applications/phortune/xaction/subscription/PhortuneSubscriptionTransactionType.php',
- 'PhortuneSubscriptionWorker' => 'applications/phortune/worker/PhortuneSubscriptionWorker.php',
- 'PhortuneTestPaymentProvider' => 'applications/phortune/provider/PhortuneTestPaymentProvider.php',
'PhrequentConduitAPIMethod' => 'applications/phrequent/conduit/PhrequentConduitAPIMethod.php',
'PhrequentController' => 'applications/phrequent/controller/PhrequentController.php',
'PhrequentCurtainExtension' => 'applications/phrequent/engineextension/PhrequentCurtainExtension.php',
@@ -7425,66 +7182,6 @@
'FuelMenuItemView' => 'FuelView',
'FuelMenuView' => 'FuelComponentView',
'FuelView' => 'AphrontView',
- 'FundBacker' => array(
- 'FundDAO',
- 'PhabricatorPolicyInterface',
- 'PhabricatorApplicationTransactionInterface',
- ),
- 'FundBackerCart' => 'PhortuneCartImplementation',
- 'FundBackerEditor' => 'PhabricatorApplicationTransactionEditor',
- 'FundBackerListController' => 'FundController',
- 'FundBackerPHIDType' => 'PhabricatorPHIDType',
- 'FundBackerProduct' => 'PhortuneProductImplementation',
- 'FundBackerQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
- 'FundBackerRefundTransaction' => 'FundBackerTransactionType',
- 'FundBackerSearchEngine' => 'PhabricatorApplicationSearchEngine',
- 'FundBackerStatusTransaction' => 'FundBackerTransactionType',
- 'FundBackerTransaction' => 'PhabricatorModularTransaction',
- 'FundBackerTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
- 'FundBackerTransactionType' => 'PhabricatorModularTransactionType',
- 'FundController' => 'PhabricatorController',
- 'FundCreateInitiativesCapability' => 'PhabricatorPolicyCapability',
- 'FundDAO' => 'PhabricatorLiskDAO',
- 'FundDefaultViewCapability' => 'PhabricatorPolicyCapability',
- 'FundInitiative' => array(
- 'FundDAO',
- 'PhabricatorPolicyInterface',
- 'PhabricatorProjectInterface',
- 'PhabricatorApplicationTransactionInterface',
- 'PhabricatorSubscribableInterface',
- 'PhabricatorMentionableInterface',
- 'PhabricatorFlaggableInterface',
- 'PhabricatorTokenReceiverInterface',
- 'PhabricatorDestructibleInterface',
- 'PhabricatorFulltextInterface',
- 'PhabricatorFerretInterface',
- ),
- 'FundInitiativeBackController' => 'FundController',
- 'FundInitiativeBackerTransaction' => 'FundInitiativeTransactionType',
- 'FundInitiativeCloseController' => 'FundController',
- 'FundInitiativeDescriptionTransaction' => 'FundInitiativeTransactionType',
- 'FundInitiativeEditController' => 'FundController',
- 'FundInitiativeEditEngine' => 'PhabricatorEditEngine',
- 'FundInitiativeEditor' => 'PhabricatorApplicationTransactionEditor',
- 'FundInitiativeFerretEngine' => 'PhabricatorFerretEngine',
- 'FundInitiativeFulltextEngine' => 'PhabricatorFulltextEngine',
- 'FundInitiativeListController' => 'FundController',
- 'FundInitiativeMerchantTransaction' => 'FundInitiativeTransactionType',
- 'FundInitiativeNameTransaction' => 'FundInitiativeTransactionType',
- 'FundInitiativePHIDType' => 'PhabricatorPHIDType',
- 'FundInitiativeQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
- 'FundInitiativeRefundTransaction' => 'FundInitiativeTransactionType',
- 'FundInitiativeRemarkupRule' => 'PhabricatorObjectRemarkupRule',
- 'FundInitiativeReplyHandler' => 'PhabricatorApplicationTransactionReplyHandler',
- 'FundInitiativeRisksTransaction' => 'FundInitiativeTransactionType',
- 'FundInitiativeSearchEngine' => 'PhabricatorApplicationSearchEngine',
- 'FundInitiativeStatusTransaction' => 'FundInitiativeTransactionType',
- 'FundInitiativeTransaction' => 'PhabricatorModularTransaction',
- 'FundInitiativeTransactionComment' => 'PhabricatorApplicationTransactionComment',
- 'FundInitiativeTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
- 'FundInitiativeTransactionType' => 'PhabricatorModularTransactionType',
- 'FundInitiativeViewController' => 'FundController',
- 'FundSchemaSpec' => 'PhabricatorConfigSchemaSpec',
'HarbormasterAbortOlderBuildsBuildStepImplementation' => 'HarbormasterBuildStepImplementation',
'HarbormasterArcLintBuildStepImplementation' => 'HarbormasterBuildStepImplementation',
'HarbormasterArcUnitBuildStepImplementation' => 'HarbormasterBuildStepImplementation',
@@ -10038,7 +9735,6 @@
'PhabricatorFulltextResultSet' => 'Phobject',
'PhabricatorFulltextStorageEngine' => 'Phobject',
'PhabricatorFulltextToken' => 'Phobject',
- 'PhabricatorFundApplication' => 'PhabricatorApplication',
'PhabricatorGDSetupCheck' => 'PhabricatorSetupCheck',
'PhabricatorGarbageCollector' => 'Phobject',
'PhabricatorGarbageCollectorManagementCollectWorkflow' => 'PhabricatorGarbageCollectorManagementWorkflow',
@@ -10547,24 +10243,7 @@
'PhabricatorOwnersPathsSearchEngineAttachment' => 'PhabricatorSearchEngineAttachment',
'PhabricatorOwnersSchemaSpec' => 'PhabricatorConfigSchemaSpec',
'PhabricatorOwnersSearchField' => 'PhabricatorSearchTokenizerField',
- 'PhabricatorPDFCatalogObject' => 'PhabricatorPDFObject',
- 'PhabricatorPDFContentsObject' => 'PhabricatorPDFObject',
'PhabricatorPDFDocumentEngine' => 'PhabricatorDocumentEngine',
- 'PhabricatorPDFFontObject' => 'PhabricatorPDFObject',
- 'PhabricatorPDFFragment' => 'Phobject',
- 'PhabricatorPDFFragmentOffset' => 'Phobject',
- 'PhabricatorPDFGenerator' => 'Phobject',
- 'PhabricatorPDFHeadFragment' => 'PhabricatorPDFFragment',
- 'PhabricatorPDFInfoObject' => 'PhabricatorPDFObject',
- 'PhabricatorPDFIterator' => array(
- 'Phobject',
- 'Iterator',
- ),
- 'PhabricatorPDFObject' => 'PhabricatorPDFFragment',
- 'PhabricatorPDFPageObject' => 'PhabricatorPDFObject',
- 'PhabricatorPDFPagesObject' => 'PhabricatorPDFObject',
- 'PhabricatorPDFResourcesObject' => 'PhabricatorPDFObject',
- 'PhabricatorPDFTailFragment' => 'PhabricatorPDFFragment',
'PhabricatorPHDConfigOptions' => 'PhabricatorApplicationConfigOptions',
'PhabricatorPHID' => 'Phobject',
'PhabricatorPHIDConstants' => 'Phobject',
@@ -10807,11 +10486,6 @@
'PhabricatorPholioMockTestDataGenerator' => 'PhabricatorTestDataGenerator',
'PhabricatorPhoneNumber' => 'Phobject',
'PhabricatorPhoneNumberTestCase' => 'PhabricatorTestCase',
- 'PhabricatorPhortuneApplication' => 'PhabricatorApplication',
- 'PhabricatorPhortuneContentSource' => 'PhabricatorContentSource',
- 'PhabricatorPhortuneManagementInvoiceWorkflow' => 'PhabricatorPhortuneManagementWorkflow',
- 'PhabricatorPhortuneManagementWorkflow' => 'PhabricatorManagementWorkflow',
- 'PhabricatorPhortuneTestCase' => 'PhabricatorTestCase',
'PhabricatorPhrequentApplication' => 'PhabricatorApplication',
'PhabricatorPhrictionApplication' => 'PhabricatorApplication',
'PhabricatorPhurlApplication' => 'PhabricatorApplication',
@@ -12212,229 +11886,6 @@
'PholioUploadedImageView' => 'AphrontView',
'PhorgeCodeWarningSetupCheck' => 'PhabricatorSetupCheck',
'PhorgeSystemDeprecationWarningListener' => 'PhabricatorEventListener',
- 'PhortuneAccount' => array(
- 'PhortuneDAO',
- 'PhabricatorApplicationTransactionInterface',
- 'PhabricatorPolicyInterface',
- ),
- 'PhortuneAccountAddManagerController' => 'PhortuneAccountController',
- 'PhortuneAccountBillingAddressTransaction' => 'PhortuneAccountTransactionType',
- 'PhortuneAccountBillingNameTransaction' => 'PhortuneAccountTransactionType',
- 'PhortuneAccountChargeListController' => 'PhortuneAccountProfileController',
- 'PhortuneAccountChargesController' => 'PhortuneAccountProfileController',
- 'PhortuneAccountController' => 'PhortuneController',
- 'PhortuneAccountDetailsController' => 'PhortuneAccountProfileController',
- 'PhortuneAccountEditController' => 'PhortuneController',
- 'PhortuneAccountEditEngine' => 'PhabricatorEditEngine',
- 'PhortuneAccountEditor' => 'PhabricatorApplicationTransactionEditor',
- 'PhortuneAccountEmail' => array(
- 'PhortuneDAO',
- 'PhabricatorApplicationTransactionInterface',
- 'PhabricatorPolicyInterface',
- 'PhabricatorExtendedPolicyInterface',
- ),
- 'PhortuneAccountEmailAddressTransaction' => 'PhortuneAccountEmailTransactionType',
- 'PhortuneAccountEmailAddressesController' => 'PhortuneAccountProfileController',
- 'PhortuneAccountEmailEditController' => 'PhortuneAccountController',
- 'PhortuneAccountEmailEditEngine' => 'PhabricatorEditEngine',
- 'PhortuneAccountEmailEditor' => 'PhabricatorApplicationTransactionEditor',
- 'PhortuneAccountEmailPHIDType' => 'PhabricatorPHIDType',
- 'PhortuneAccountEmailQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
- 'PhortuneAccountEmailRotateController' => 'PhortuneAccountController',
- 'PhortuneAccountEmailRotateTransaction' => 'PhortuneAccountEmailTransactionType',
- 'PhortuneAccountEmailStatus' => 'Phobject',
- 'PhortuneAccountEmailStatusController' => 'PhortuneAccountController',
- 'PhortuneAccountEmailStatusTransaction' => 'PhortuneAccountEmailTransactionType',
- 'PhortuneAccountEmailTransaction' => 'PhabricatorModularTransaction',
- 'PhortuneAccountEmailTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
- 'PhortuneAccountEmailTransactionType' => 'PhabricatorModularTransactionType',
- 'PhortuneAccountEmailViewController' => 'PhortuneAccountController',
- 'PhortuneAccountHasMemberEdgeType' => 'PhabricatorEdgeType',
- 'PhortuneAccountHasMerchantEdgeType' => 'PhabricatorEdgeType',
- 'PhortuneAccountListController' => 'PhortuneController',
- 'PhortuneAccountManagersController' => 'PhortuneAccountProfileController',
- 'PhortuneAccountNameTransaction' => 'PhortuneAccountTransactionType',
- 'PhortuneAccountOrderListController' => 'PhortuneAccountProfileController',
- 'PhortuneAccountOrdersController' => 'PhortuneAccountProfileController',
- 'PhortuneAccountOverviewController' => 'PhortuneAccountProfileController',
- 'PhortuneAccountPHIDType' => 'PhabricatorPHIDType',
- 'PhortuneAccountPaymentMethodController' => 'PhortuneAccountProfileController',
- 'PhortuneAccountPaymentMethodViewController' => 'PhortuneAccountController',
- 'PhortuneAccountProfileController' => 'PhortuneAccountController',
- 'PhortuneAccountQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
- 'PhortuneAccountSubscriptionAutopayController' => 'PhortuneAccountController',
- 'PhortuneAccountSubscriptionController' => 'PhortuneAccountProfileController',
- 'PhortuneAccountSubscriptionViewController' => 'PhortuneAccountController',
- 'PhortuneAccountTransaction' => 'PhabricatorModularTransaction',
- 'PhortuneAccountTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
- 'PhortuneAccountTransactionType' => 'PhabricatorModularTransactionType',
- 'PhortuneAdHocCart' => 'PhortuneCartImplementation',
- 'PhortuneAdHocProduct' => 'PhortuneProductImplementation',
- 'PhortuneAddPaymentMethodAction' => 'PhabricatorSystemAction',
- 'PhortuneCart' => array(
- 'PhortuneDAO',
- 'PhabricatorApplicationTransactionInterface',
- 'PhabricatorPolicyInterface',
- 'PhabricatorExtendedPolicyInterface',
- ),
- 'PhortuneCartAcceptController' => 'PhortuneCartController',
- 'PhortuneCartCancelController' => 'PhortuneCartController',
- 'PhortuneCartCheckoutController' => 'PhortuneCartController',
- 'PhortuneCartController' => 'PhortuneController',
- 'PhortuneCartEditor' => 'PhabricatorApplicationTransactionEditor',
- 'PhortuneCartImplementation' => 'Phobject',
- 'PhortuneCartPHIDType' => 'PhabricatorPHIDType',
- 'PhortuneCartQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
- 'PhortuneCartReplyHandler' => 'PhabricatorApplicationTransactionReplyHandler',
- 'PhortuneCartSearchEngine' => 'PhabricatorApplicationSearchEngine',
- 'PhortuneCartTransaction' => 'PhabricatorApplicationTransaction',
- 'PhortuneCartTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
- 'PhortuneCartUpdateController' => 'PhortuneCartController',
- 'PhortuneCartViewController' => 'PhortuneCartController',
- 'PhortuneCartVoidController' => 'PhortuneCartController',
- 'PhortuneCharge' => array(
- 'PhortuneDAO',
- 'PhabricatorPolicyInterface',
- 'PhabricatorExtendedPolicyInterface',
- ),
- 'PhortuneChargePHIDType' => 'PhabricatorPHIDType',
- 'PhortuneChargeQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
- 'PhortuneChargeSearchEngine' => 'PhabricatorApplicationSearchEngine',
- 'PhortuneChargeTableView' => 'AphrontView',
- 'PhortuneConstants' => 'Phobject',
- 'PhortuneController' => 'PhabricatorController',
- 'PhortuneCreditCardForm' => 'Phobject',
- 'PhortuneCurrency' => 'Phobject',
- 'PhortuneCurrencySerializer' => 'PhabricatorLiskSerializer',
- 'PhortuneCurrencyTestCase' => 'PhabricatorTestCase',
- 'PhortuneDAO' => 'PhabricatorLiskDAO',
- 'PhortuneDisplayException' => 'Exception',
- 'PhortuneErrCode' => 'PhortuneConstants',
- 'PhortuneExternalController' => 'PhortuneController',
- 'PhortuneExternalOrderController' => 'PhortuneExternalController',
- 'PhortuneExternalOverviewController' => 'PhortuneExternalController',
- 'PhortuneExternalUnsubscribeController' => 'PhortuneExternalController',
- 'PhortuneLandingController' => 'PhortuneController',
- 'PhortuneMemberHasAccountEdgeType' => 'PhabricatorEdgeType',
- 'PhortuneMemberHasMerchantEdgeType' => 'PhabricatorEdgeType',
- 'PhortuneMerchant' => array(
- 'PhortuneDAO',
- 'PhabricatorApplicationTransactionInterface',
- 'PhabricatorPolicyInterface',
- ),
- 'PhortuneMerchantAddManagerController' => 'PhortuneMerchantController',
- 'PhortuneMerchantCapability' => 'PhabricatorPolicyCapability',
- 'PhortuneMerchantContactInfoTransaction' => 'PhortuneMerchantTransactionType',
- 'PhortuneMerchantController' => 'PhortuneController',
- 'PhortuneMerchantDescriptionTransaction' => 'PhortuneMerchantTransactionType',
- 'PhortuneMerchantDetailsController' => 'PhortuneMerchantProfileController',
- 'PhortuneMerchantEditController' => 'PhortuneController',
- 'PhortuneMerchantEditEngine' => 'PhabricatorEditEngine',
- 'PhortuneMerchantEditor' => 'PhabricatorApplicationTransactionEditor',
- 'PhortuneMerchantHasAccountEdgeType' => 'PhabricatorEdgeType',
- 'PhortuneMerchantHasMemberEdgeType' => 'PhabricatorEdgeType',
- 'PhortuneMerchantInvoiceCreateController' => 'PhortuneMerchantController',
- 'PhortuneMerchantInvoiceEmailTransaction' => 'PhortuneMerchantTransactionType',
- 'PhortuneMerchantInvoiceFooterTransaction' => 'PhortuneMerchantTransactionType',
- 'PhortuneMerchantListController' => 'PhortuneController',
- 'PhortuneMerchantManagersController' => 'PhortuneMerchantProfileController',
- 'PhortuneMerchantNameTransaction' => 'PhortuneMerchantTransactionType',
- 'PhortuneMerchantOrderListController' => 'PhortuneMerchantProfileController',
- 'PhortuneMerchantOrdersController' => 'PhortuneMerchantProfileController',
- 'PhortuneMerchantOverviewController' => 'PhortuneMerchantProfileController',
- 'PhortuneMerchantPHIDType' => 'PhabricatorPHIDType',
- 'PhortuneMerchantPictureController' => 'PhortuneMerchantController',
- 'PhortuneMerchantPictureTransaction' => 'PhortuneMerchantTransactionType',
- 'PhortuneMerchantProfileController' => 'PhortuneMerchantController',
- 'PhortuneMerchantProviderDisableController' => 'PhortuneMerchantController',
- 'PhortuneMerchantProviderEditController' => 'PhortuneMerchantController',
- 'PhortuneMerchantProviderViewController' => 'PhortuneMerchantController',
- 'PhortuneMerchantProvidersController' => 'PhortuneMerchantProfileController',
- 'PhortuneMerchantQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
- 'PhortuneMerchantSearchEngine' => 'PhabricatorApplicationSearchEngine',
- 'PhortuneMerchantSubscriptionListController' => 'PhortuneMerchantProfileController',
- 'PhortuneMerchantSubscriptionsController' => 'PhortuneMerchantProfileController',
- 'PhortuneMerchantTransaction' => 'PhabricatorModularTransaction',
- 'PhortuneMerchantTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
- 'PhortuneMerchantTransactionType' => 'PhabricatorModularTransactionType',
- 'PhortuneMonthYearExpiryControl' => 'AphrontFormControl',
- 'PhortuneOrderDescriptionView' => 'AphrontView',
- 'PhortuneOrderItemsView' => 'PhortuneOrderView',
- 'PhortuneOrderSummaryView' => 'PhortuneOrderView',
- 'PhortuneOrderTableView' => 'AphrontView',
- 'PhortuneOrderView' => 'AphrontView',
- 'PhortunePayPalPaymentProvider' => 'PhortunePaymentProvider',
- 'PhortunePaymentMethod' => array(
- 'PhortuneDAO',
- 'PhabricatorPolicyInterface',
- 'PhabricatorExtendedPolicyInterface',
- 'PhabricatorPolicyCodexInterface',
- 'PhabricatorApplicationTransactionInterface',
- ),
- 'PhortunePaymentMethodCreateController' => 'PhortuneController',
- 'PhortunePaymentMethodDisableController' => 'PhortuneController',
- 'PhortunePaymentMethodEditController' => 'PhortuneController',
- 'PhortunePaymentMethodEditor' => 'PhabricatorApplicationTransactionEditor',
- 'PhortunePaymentMethodNameTransaction' => 'PhortunePaymentMethodTransactionType',
- 'PhortunePaymentMethodPHIDType' => 'PhabricatorPHIDType',
- 'PhortunePaymentMethodPolicyCodex' => 'PhabricatorPolicyCodex',
- 'PhortunePaymentMethodQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
- 'PhortunePaymentMethodStatusTransaction' => 'PhortunePaymentMethodTransactionType',
- 'PhortunePaymentMethodTransaction' => 'PhabricatorModularTransaction',
- 'PhortunePaymentMethodTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
- 'PhortunePaymentMethodTransactionType' => 'PhabricatorModularTransactionType',
- 'PhortunePaymentProvider' => 'Phobject',
- 'PhortunePaymentProviderConfig' => array(
- 'PhortuneDAO',
- 'PhabricatorPolicyInterface',
- 'PhabricatorApplicationTransactionInterface',
- ),
- 'PhortunePaymentProviderConfigEditor' => 'PhabricatorApplicationTransactionEditor',
- 'PhortunePaymentProviderConfigQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
- 'PhortunePaymentProviderConfigTransaction' => 'PhabricatorApplicationTransaction',
- 'PhortunePaymentProviderConfigTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
- 'PhortunePaymentProviderPHIDType' => 'PhabricatorPHIDType',
- 'PhortunePaymentProviderTestCase' => 'PhabricatorTestCase',
- 'PhortuneProduct' => array(
- 'PhortuneDAO',
- 'PhabricatorPolicyInterface',
- ),
- 'PhortuneProductImplementation' => 'Phobject',
- 'PhortuneProductListController' => 'PhabricatorController',
- 'PhortuneProductPHIDType' => 'PhabricatorPHIDType',
- 'PhortuneProductQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
- 'PhortuneProductViewController' => 'PhortuneController',
- 'PhortuneProviderActionController' => 'PhortuneController',
- 'PhortunePurchase' => array(
- 'PhortuneDAO',
- 'PhabricatorPolicyInterface',
- ),
- 'PhortunePurchasePHIDType' => 'PhabricatorPHIDType',
- 'PhortunePurchaseQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
- 'PhortuneSchemaSpec' => 'PhabricatorConfigSchemaSpec',
- 'PhortuneStripePaymentProvider' => 'PhortunePaymentProvider',
- 'PhortuneSubscription' => array(
- 'PhortuneDAO',
- 'PhabricatorPolicyInterface',
- 'PhabricatorExtendedPolicyInterface',
- 'PhabricatorPolicyCodexInterface',
- 'PhabricatorApplicationTransactionInterface',
- ),
- 'PhortuneSubscriptionAutopayTransaction' => 'PhortuneSubscriptionTransactionType',
- 'PhortuneSubscriptionCart' => 'PhortuneCartImplementation',
- 'PhortuneSubscriptionEditor' => 'PhabricatorApplicationTransactionEditor',
- 'PhortuneSubscriptionImplementation' => 'Phobject',
- 'PhortuneSubscriptionPHIDType' => 'PhabricatorPHIDType',
- 'PhortuneSubscriptionPolicyCodex' => 'PhabricatorPolicyCodex',
- 'PhortuneSubscriptionProduct' => 'PhortuneProductImplementation',
- 'PhortuneSubscriptionQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
- 'PhortuneSubscriptionSearchEngine' => 'PhabricatorApplicationSearchEngine',
- 'PhortuneSubscriptionTableView' => 'AphrontView',
- 'PhortuneSubscriptionTransaction' => 'PhabricatorModularTransaction',
- 'PhortuneSubscriptionTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
- 'PhortuneSubscriptionTransactionType' => 'PhabricatorModularTransactionType',
- 'PhortuneSubscriptionWorker' => 'PhabricatorWorker',
- 'PhortuneTestPaymentProvider' => 'PhortunePaymentProvider',
'PhrequentConduitAPIMethod' => 'ConduitAPIMethod',
'PhrequentController' => 'PhabricatorController',
'PhrequentCurtainExtension' => 'PHUICurtainExtension',
diff --git a/src/applications/fund/application/PhabricatorFundApplication.php b/src/applications/fund/application/PhabricatorFundApplication.php
deleted file mode 100644
--- a/src/applications/fund/application/PhabricatorFundApplication.php
+++ /dev/null
@@ -1,77 +0,0 @@
-[1-9]\d*)' => 'FundInitiativeViewController',
- '/fund/' => array(
- '(?:query/(?P[^/]+)/)?' => 'FundInitiativeListController',
- 'create/' => 'FundInitiativeEditController',
- $this->getEditRoutePattern('edit/')
- => 'FundInitiativeEditController',
- 'close/(?P\d+)/' => 'FundInitiativeCloseController',
- 'back/(?P\d+)/' => 'FundInitiativeBackController',
- 'backers/(?:(?P\d+)/)?(?:query/(?P[^/]+)/)?'
- => 'FundBackerListController',
- ),
- );
- }
-
- protected function getCustomCapabilities() {
- return array(
- FundDefaultViewCapability::CAPABILITY => array(
- 'caption' => pht('Default view policy for newly created initiatives.'),
- 'template' => FundInitiativePHIDType::TYPECONST,
- ),
- FundCreateInitiativesCapability::CAPABILITY => array(
- 'default' => PhabricatorPolicies::POLICY_ADMIN,
- ),
- );
- }
-
- public function getApplicationSearchDocumentTypes() {
- return array(
- FundInitiativePHIDType::TYPECONST,
- );
- }
-
-}
diff --git a/src/applications/fund/capability/FundCreateInitiativesCapability.php b/src/applications/fund/capability/FundCreateInitiativesCapability.php
deleted file mode 100644
--- a/src/applications/fund/capability/FundCreateInitiativesCapability.php
+++ /dev/null
@@ -1,16 +0,0 @@
-getViewer();
- $id = $request->getURIData('id');
- $querykey = $request->getURIData('queryKey');
-
- if ($id) {
- $this->initiative = id(new FundInitiativeQuery())
- ->setViewer($viewer)
- ->withIDs(array($id))
- ->executeOne();
- if (!$this->initiative) {
- return new Aphront404Response();
- }
- }
-
- $controller = id(new PhabricatorApplicationSearchController())
- ->setQueryKey($querykey)
- ->setSearchEngine($this->getEngine())
- ->setNavigation($this->buildSideNavView());
-
- return $this->delegateToController($controller);
- }
-
- public function buildSideNavView() {
- $user = $this->getRequest()->getUser();
-
- $nav = new AphrontSideNavFilterView();
- $nav->setBaseURI(new PhutilURI($this->getApplicationURI()));
-
- $this->getEngine()->addNavigationItems($nav->getMenu());
-
- $nav->selectFilter(null);
-
- return $nav;
- }
-
- protected function buildApplicationCrumbs() {
- $crumbs = parent::buildApplicationCrumbs();
- $crumbs->addTextCrumb(
- pht('Backers'),
- $this->getApplicationURI('backers/'));
-
- if ($this->initiative) {
- $crumbs->addTextCrumb(
- $this->initiative->getMonogram(),
- '/'.$this->initiative->getMonogram());
- }
-
- return $crumbs;
- }
-
- private function getEngine() {
- $viewer = $this->getViewer();
-
- $engine = id(new FundBackerSearchEngine())
- ->setViewer($viewer);
-
- if ($this->initiative) {
- $engine->setInitiative($this->initiative);
- }
-
- return $engine;
- }
-
-}
diff --git a/src/applications/fund/controller/FundController.php b/src/applications/fund/controller/FundController.php
deleted file mode 100644
--- a/src/applications/fund/controller/FundController.php
+++ /dev/null
@@ -1,3 +0,0 @@
-getViewer();
- $id = $request->getURIData('id');
-
- $initiative = id(new FundInitiativeQuery())
- ->setViewer($viewer)
- ->withIDs(array($id))
- ->executeOne();
- if (!$initiative) {
- return new Aphront404Response();
- }
-
- $merchant = id(new PhortuneMerchantQuery())
- ->setViewer($viewer)
- ->withPHIDs(array($initiative->getMerchantPHID()))
- ->executeOne();
- if (!$merchant) {
- return new Aphront404Response();
- }
-
- $initiative_uri = '/'.$initiative->getMonogram();
-
- if ($initiative->isClosed()) {
- return $this->newDialog()
- ->setTitle(pht('Initiative Closed'))
- ->appendParagraph(
- pht('You can not back a closed initiative.'))
- ->addCancelButton($initiative_uri);
- }
-
- $accounts = PhortuneAccountQuery::loadAccountsForUser(
- $viewer,
- PhabricatorContentSource::newFromRequest($request));
-
- $v_amount = null;
- $e_amount = true;
-
- $v_account = head($accounts)->getPHID();
-
- $errors = array();
- if ($request->isFormPost()) {
- $v_amount = $request->getStr('amount');
- $v_account = $request->getStr('accountPHID');
-
- if (empty($accounts[$v_account])) {
- $errors[] = pht('You must specify an account.');
- } else {
- $account = $accounts[$v_account];
- }
-
- if (!strlen($v_amount)) {
- $errors[] = pht(
- 'You must specify how much money you want to contribute to the '.
- 'initiative.');
- $e_amount = pht('Required');
- } else {
- try {
- $currency = PhortuneCurrency::newFromUserInput(
- $viewer,
- $v_amount);
- $currency->assertInRange('1.00 USD', null);
- } catch (Exception $ex) {
- $errors[] = $ex->getMessage();
- $e_amount = pht('Invalid');
- }
- }
-
- if (!$errors) {
- $backer = FundBacker::initializeNewBacker($viewer)
- ->setInitiativePHID($initiative->getPHID())
- ->attachInitiative($initiative)
- ->setAmountAsCurrency($currency)
- ->save();
-
- $product = id(new PhortuneProductQuery())
- ->setViewer($viewer)
- ->withClassAndRef('FundBackerProduct', $initiative->getPHID())
- ->executeOne();
-
- $cart_implementation = id(new FundBackerCart())
- ->setInitiative($initiative);
-
- $cart = $account->newCart($viewer, $cart_implementation, $merchant);
-
- $purchase = $cart->newPurchase($viewer, $product);
- $purchase
- ->setBasePriceAsCurrency($currency)
- ->setMetadataValue('backerPHID', $backer->getPHID())
- ->save();
-
- $xactions = array();
-
- $xactions[] = id(new FundBackerTransaction())
- ->setTransactionType(FundBackerStatusTransaction::TRANSACTIONTYPE)
- ->setNewValue(FundBacker::STATUS_IN_CART);
-
- $editor = id(new FundBackerEditor())
- ->setActor($viewer)
- ->setContentSourceFromRequest($request);
-
- $editor->applyTransactions($backer, $xactions);
-
- $cart->activateCart();
-
- return id(new AphrontRedirectResponse())
- ->setURI($cart->getCheckoutURI());
- }
- }
-
- $form = id(new AphrontFormView())
- ->setUser($viewer)
- ->appendChild(
- id(new AphrontFormSelectControl())
- ->setName('accountPHID')
- ->setLabel(pht('Account'))
- ->setValue($v_account)
- ->setOptions(mpull($accounts, 'getName', 'getPHID')))
- ->appendChild(
- id(new AphrontFormTextControl())
- ->setName('amount')
- ->setLabel(pht('Amount'))
- ->setValue($v_amount)
- ->setError($e_amount));
-
- return $this->newDialog()
- ->setTitle(
- pht('Back %s %s', $initiative->getMonogram(), $initiative->getName()))
- ->setErrors($errors)
- ->appendChild($form->buildLayoutView())
- ->addCancelButton($initiative_uri)
- ->addSubmitButton(pht('Continue'));
- }
-
-}
diff --git a/src/applications/fund/controller/FundInitiativeCloseController.php b/src/applications/fund/controller/FundInitiativeCloseController.php
deleted file mode 100644
--- a/src/applications/fund/controller/FundInitiativeCloseController.php
+++ /dev/null
@@ -1,69 +0,0 @@
-getViewer();
- $id = $request->getURIData('id');
-
- $initiative = id(new FundInitiativeQuery())
- ->setViewer($viewer)
- ->withIDs(array($id))
- ->requireCapabilities(
- array(
- PhabricatorPolicyCapability::CAN_VIEW,
- PhabricatorPolicyCapability::CAN_EDIT,
- ))
- ->executeOne();
- if (!$initiative) {
- return new Aphront404Response();
- }
-
- $initiative_uri = '/'.$initiative->getMonogram();
-
- $is_close = !$initiative->isClosed();
-
- if ($request->isFormPost()) {
- $type_status = FundInitiativeStatusTransaction::TRANSACTIONTYPE;
-
- if ($is_close) {
- $new_status = FundInitiative::STATUS_CLOSED;
- } else {
- $new_status = FundInitiative::STATUS_OPEN;
- }
-
- $xaction = id(new FundInitiativeTransaction())
- ->setTransactionType($type_status)
- ->setNewValue($new_status);
-
- $editor = id(new FundInitiativeEditor())
- ->setActor($viewer)
- ->setContentSourceFromRequest($request)
- ->setContinueOnMissingFields(true);
-
- $editor->applyTransactions($initiative, array($xaction));
-
- return id(new AphrontRedirectResponse())->setURI($initiative_uri);
- }
-
- if ($is_close) {
- $title = pht('Close Initiative?');
- $body = pht(
- 'Really close this initiative? Users will no longer be able to '.
- 'back it.');
- $button_text = pht('Close Initiative');
- } else {
- $title = pht('Reopen Initiative?');
- $body = pht('Really reopen this initiative?');
- $button_text = pht('Reopen Initiative');
- }
-
- return $this->newDialog()
- ->setTitle($title)
- ->appendParagraph($body)
- ->addCancelButton($initiative_uri)
- ->addSubmitButton($button_text);
- }
-
-}
diff --git a/src/applications/fund/controller/FundInitiativeEditController.php b/src/applications/fund/controller/FundInitiativeEditController.php
deleted file mode 100644
--- a/src/applications/fund/controller/FundInitiativeEditController.php
+++ /dev/null
@@ -1,11 +0,0 @@
-setController($this)
- ->buildResponse();
- }
-
-}
diff --git a/src/applications/fund/controller/FundInitiativeListController.php b/src/applications/fund/controller/FundInitiativeListController.php
deleted file mode 100644
--- a/src/applications/fund/controller/FundInitiativeListController.php
+++ /dev/null
@@ -1,56 +0,0 @@
-getURIData('queryKey');
-
- $controller = id(new PhabricatorApplicationSearchController())
- ->setQueryKey($querykey)
- ->setSearchEngine(new FundInitiativeSearchEngine())
- ->setNavigation($this->buildSideNavView());
-
- return $this->delegateToController($controller);
- }
-
- public function buildSideNavView() {
- $viewer = $this->getViewer();
-
- $nav = new AphrontSideNavFilterView();
- $nav->setBaseURI(new PhutilURI($this->getApplicationURI()));
-
- id(new FundInitiativeSearchEngine())
- ->setViewer($viewer)
- ->addNavigationItems($nav->getMenu());
-
- $nav->addLabel(pht('Backers'));
- $nav->addFilter('backers/', pht('Find Backers'));
-
- $nav->selectFilter(null);
-
- return $nav;
- }
-
- protected function buildApplicationCrumbs() {
- $crumbs = parent::buildApplicationCrumbs();
-
- $can_create = $this->hasApplicationCapability(
- FundCreateInitiativesCapability::CAPABILITY);
-
- $crumbs->addAction(
- id(new PHUIListItemView())
- ->setName(pht('Create Initiative'))
- ->setHref($this->getApplicationURI('create/'))
- ->setIcon('fa-plus-square')
- ->setDisabled(!$can_create)
- ->setWorkflow(!$can_create));
-
- return $crumbs;
- }
-
-}
diff --git a/src/applications/fund/controller/FundInitiativeViewController.php b/src/applications/fund/controller/FundInitiativeViewController.php
deleted file mode 100644
--- a/src/applications/fund/controller/FundInitiativeViewController.php
+++ /dev/null
@@ -1,179 +0,0 @@
-getViewer();
- $id = $request->getURIData('id');
-
- $initiative = id(new FundInitiativeQuery())
- ->setViewer($viewer)
- ->withIDs(array($id))
- ->executeOne();
- if (!$initiative) {
- return new Aphront404Response();
- }
-
- $crumbs = $this->buildApplicationCrumbs();
- $crumbs->addTextCrumb($initiative->getMonogram());
- $crumbs->setBorder(true);
-
- $title = pht(
- '%s %s',
- $initiative->getMonogram(),
- $initiative->getName());
-
- if ($initiative->isClosed()) {
- $status_icon = 'fa-ban';
- $status_color = 'indigo';
- } else {
- $status_icon = 'fa-check';
- $status_color = 'bluegrey';
- }
- $status_name = idx(
- FundInitiative::getStatusNameMap(),
- $initiative->getStatus());
-
- $header = id(new PHUIHeaderView())
- ->setHeader($initiative->getName())
- ->setUser($viewer)
- ->setPolicyObject($initiative)
- ->setStatus($status_icon, $status_color, $status_name)
- ->setHeaderIcon('fa-heart');
-
- $curtain = $this->buildCurtain($initiative);
- $details = $this->buildPropertySectionView($initiative);
-
- $timeline = $this->buildTransactionTimeline(
- $initiative,
- new FundInitiativeTransactionQuery());
- $timeline->setQuoteRef($initiative->getMonogram());
-
- $comment_view = $this->buildCommentForm($initiative, $timeline);
-
- $view = id(new PHUITwoColumnView())
- ->setHeader($header)
- ->setCurtain($curtain)
- ->setMainColumn(array(
- $timeline,
- $comment_view,
- ))
- ->addPropertySection(pht('Details'), $details);
-
- return $this->newPage()
- ->setTitle($title)
- ->setCrumbs($crumbs)
- ->setPageObjectPHIDs(array($initiative->getPHID()))
- ->appendChild($view);
- }
-
- private function buildPropertySectionView(FundInitiative $initiative) {
- $viewer = $this->getRequest()->getUser();
-
- $view = id(new PHUIPropertyListView())
- ->setUser($viewer);
-
- $owner_phid = $initiative->getOwnerPHID();
- $merchant_phid = $initiative->getMerchantPHID();
-
- $view->addProperty(
- pht('Owner'),
- $viewer->renderHandle($owner_phid));
-
- $view->addProperty(
- pht('Payable to Merchant'),
- $viewer->renderHandle($merchant_phid));
-
- $view->addProperty(
- pht('Total Funding'),
- $initiative->getTotalAsCurrency()->formatForDisplay());
-
- $description = $initiative->getDescription();
- if (strlen($description)) {
- $description = new PHUIRemarkupView($viewer, $description);
- $view->addSectionHeader(
- pht('Description'), PHUIPropertyListView::ICON_SUMMARY);
- $view->addTextContent($description);
- }
-
- $risks = $initiative->getRisks();
- if (strlen($risks)) {
- $risks = new PHUIRemarkupView($viewer, $risks);
- $view->addSectionHeader(
- pht('Risks/Challenges'), 'fa-ambulance');
- $view->addTextContent($risks);
- }
-
- return $view;
- }
-
- private function buildCurtain(FundInitiative $initiative) {
- $viewer = $this->getViewer();
-
- $id = $initiative->getID();
-
- $can_edit = PhabricatorPolicyFilter::hasCapability(
- $viewer,
- $initiative,
- PhabricatorPolicyCapability::CAN_EDIT);
-
- $curtain = $this->newCurtainView($initiative);
-
- $curtain->addAction(
- id(new PhabricatorActionView())
- ->setName(pht('Edit Initiative'))
- ->setIcon('fa-pencil')
- ->setDisabled(!$can_edit)
- ->setWorkflow(!$can_edit)
- ->setHref($this->getApplicationURI("/edit/{$id}/")));
-
- if ($initiative->isClosed()) {
- $close_name = pht('Reopen Initiative');
- $close_icon = 'fa-check';
- } else {
- $close_name = pht('Close Initiative');
- $close_icon = 'fa-times';
- }
-
- $curtain->addAction(
- id(new PhabricatorActionView())
- ->setName($close_name)
- ->setIcon($close_icon)
- ->setDisabled(!$can_edit)
- ->setWorkflow(true)
- ->setHref($this->getApplicationURI("/close/{$id}/")));
-
- $curtain->addAction(
- id(new PhabricatorActionView())
- ->setName(pht('Back Initiative'))
- ->setIcon('fa-money')
- ->setDisabled($initiative->isClosed())
- ->setWorkflow(true)
- ->setHref($this->getApplicationURI("/back/{$id}/")));
-
- $curtain->addAction(
- id(new PhabricatorActionView())
- ->setName(pht('View Backers'))
- ->setIcon('fa-bank')
- ->setHref($this->getApplicationURI("/backers/{$id}/")));
-
- return $curtain;
- }
-
- private function buildCommentForm(FundInitiative $initiative, $timeline) {
- $viewer = $this->getViewer();
- $box = id(new FundInitiativeEditEngine())
- ->setViewer($viewer)
- ->buildEditEngineCommentView($initiative)
- ->setTransactionTimeline($timeline);
-
- return $box;
- }
-
-
-}
diff --git a/src/applications/fund/editor/FundBackerEditor.php b/src/applications/fund/editor/FundBackerEditor.php
deleted file mode 100644
--- a/src/applications/fund/editor/FundBackerEditor.php
+++ /dev/null
@@ -1,14 +0,0 @@
-getViewer());
- }
-
- protected function newObjectQuery() {
- return new FundInitiativeQuery();
- }
-
- protected function getObjectCreateTitleText($object) {
- return pht('Create New Initiative');
- }
-
- protected function getObjectEditTitleText($object) {
- return pht('Edit Initiative: %s', $object->getName());
- }
-
- protected function getObjectEditShortText($object) {
- return $object->getName();
- }
-
- protected function getObjectCreateShortText() {
- return pht('Create Initiative');
- }
-
- protected function getObjectName() {
- return pht('Initiative');
- }
-
- protected function getObjectCreateCancelURI($object) {
- return $this->getApplication()->getApplicationURI('/');
- }
-
- protected function getEditorURI() {
- return $this->getApplication()->getApplicationURI('edit/');
- }
-
- protected function getObjectViewURI($object) {
- return $object->getViewURI();
- }
-
- protected function getCreateNewObjectPolicy() {
- return $this->getApplication()->getPolicy(
- FundCreateInitiativesCapability::CAPABILITY);
- }
-
- protected function buildCustomEditFields($object) {
- $viewer = $this->getViewer();
- $v_merchant = $object->getMerchantPHID();
-
- $merchants = id(new PhortuneMerchantQuery())
- ->setViewer($viewer)
- ->requireCapabilities(
- array(
- PhabricatorPolicyCapability::CAN_VIEW,
- PhabricatorPolicyCapability::CAN_EDIT,
- ))
- ->execute();
-
- $merchant_options = array();
- foreach ($merchants as $merchant) {
- $merchant_options[$merchant->getPHID()] = pht(
- 'Merchant %d %s',
- $merchant->getID(),
- $merchant->getName());
- }
-
- if ($v_merchant && empty($merchant_options[$v_merchant])) {
- $merchant_options = array(
- $v_merchant => pht('(Restricted Merchant)'),
- ) + $merchant_options;
- }
-
- $merchant_instructions = null;
- if (!$merchant_options) {
- $merchant_instructions = pht(
- 'NOTE: You do not control any merchant accounts which can receive '.
- 'payments from this initiative. When you create an initiative, '.
- 'you need to specify a merchant account where funds will be paid '.
- 'to. Create a merchant account in the Phortune application before '.
- 'creating an initiative in Fund.');
- }
-
- return array(
- id(new PhabricatorTextEditField())
- ->setKey('name')
- ->setLabel(pht('Name'))
- ->setDescription(pht('Initiative name.'))
- ->setConduitTypeDescription(pht('New initiative name.'))
- ->setTransactionType(
- FundInitiativeNameTransaction::TRANSACTIONTYPE)
- ->setValue($object->getName())
- ->setIsRequired(true),
- id(new PhabricatorSelectEditField())
- ->setKey('merchantPHID')
- ->setLabel(pht('Merchant'))
- ->setDescription(pht('Merchant operating the initiative.'))
- ->setConduitTypeDescription(pht('New initiative merchant.'))
- ->setControlInstructions($merchant_instructions)
- ->setValue($object->getMerchantPHID())
- ->setTransactionType(
- FundInitiativeMerchantTransaction::TRANSACTIONTYPE)
- ->setOptions($merchant_options)
- ->setIsRequired(true),
- id(new PhabricatorRemarkupEditField())
- ->setKey('description')
- ->setLabel(pht('Description'))
- ->setDescription(pht('Initiative long description.'))
- ->setConduitTypeDescription(pht('New initiative description.'))
- ->setTransactionType(
- FundInitiativeDescriptionTransaction::TRANSACTIONTYPE)
- ->setValue($object->getDescription()),
- id(new PhabricatorRemarkupEditField())
- ->setKey('risks')
- ->setLabel(pht('Risks/Challenges'))
- ->setDescription(pht('Initiative risks and challenges.'))
- ->setConduitTypeDescription(pht('Initiative risks and challenges.'))
- ->setTransactionType(
- FundInitiativeRisksTransaction::TRANSACTIONTYPE)
- ->setValue($object->getRisks()),
-
- );
-
- }
-
-}
diff --git a/src/applications/fund/editor/FundInitiativeEditor.php b/src/applications/fund/editor/FundInitiativeEditor.php
deleted file mode 100644
--- a/src/applications/fund/editor/FundInitiativeEditor.php
+++ /dev/null
@@ -1,92 +0,0 @@
-
- pht('Someone backs an initiative.'),
- FundInitiativeTransaction::MAILTAG_STATUS =>
- pht("An initiative's status changes."),
- FundInitiativeTransaction::MAILTAG_OTHER =>
- pht('Other initiative activity not listed above occurs.'),
- );
- }
-
- protected function buildMailTemplate(PhabricatorLiskDAO $object) {
- $monogram = $object->getMonogram();
- $name = $object->getName();
-
- return id(new PhabricatorMetaMTAMail())
- ->setSubject("{$monogram}: {$name}");
- }
-
- protected function buildMailBody(
- PhabricatorLiskDAO $object,
- array $xactions) {
-
- $body = parent::buildMailBody($object, $xactions);
-
- $body->addLinkSection(
- pht('INITIATIVE DETAIL'),
- PhabricatorEnv::getProductionURI('/'.$object->getMonogram()));
-
- return $body;
- }
-
- protected function getMailTo(PhabricatorLiskDAO $object) {
- return array($object->getOwnerPHID());
- }
-
- protected function getMailSubjectPrefix() {
- return 'Fund';
- }
-
- protected function buildReplyHandler(PhabricatorLiskDAO $object) {
- return id(new FundInitiativeReplyHandler())
- ->setMailReceiver($object);
- }
-
- protected function shouldPublishFeedStory(
- PhabricatorLiskDAO $object,
- array $xactions) {
- return true;
- }
-
- protected function supportsSearch() {
- return true;
- }
-
-}
diff --git a/src/applications/fund/mail/FundInitiativeReplyHandler.php b/src/applications/fund/mail/FundInitiativeReplyHandler.php
deleted file mode 100644
--- a/src/applications/fund/mail/FundInitiativeReplyHandler.php
+++ /dev/null
@@ -1,16 +0,0 @@
-withPHIDs($phids);
- }
-
- public function loadHandles(
- PhabricatorHandleQuery $query,
- array $handles,
- array $objects) {
-
- foreach ($handles as $phid => $handle) {
- $initiative = $objects[$phid];
-
- $id = $initiative->getID();
- $monogram = $initiative->getMonogram();
- $name = $initiative->getName();
-
- $handle->setName($name);
- $handle->setFullName("{$monogram} {$name}");
- $handle->setURI("/fund/view/{$id}/");
- }
- }
-
-}
diff --git a/src/applications/fund/phid/FundInitiativePHIDType.php b/src/applications/fund/phid/FundInitiativePHIDType.php
deleted file mode 100644
--- a/src/applications/fund/phid/FundInitiativePHIDType.php
+++ /dev/null
@@ -1,78 +0,0 @@
-withPHIDs($phids);
- }
-
- public function loadHandles(
- PhabricatorHandleQuery $query,
- array $handles,
- array $objects) {
-
- foreach ($handles as $phid => $handle) {
- $initiative = $objects[$phid];
-
- $id = $initiative->getID();
- $monogram = $initiative->getMonogram();
- $name = $initiative->getName();
-
- if ($initiative->isClosed()) {
- $handle->setStatus(PhabricatorObjectHandle::STATUS_CLOSED);
- }
-
- $handle->setName($name);
- $handle->setFullName("{$monogram} {$name}");
- $handle->setURI("/I{$id}");
- }
- }
-
- public function canLoadNamedObject($name) {
- return preg_match('/^I\d*[1-9]\d*$/i', $name);
- }
-
- public function loadNamedObjects(
- PhabricatorObjectQuery $query,
- array $names) {
-
- $id_map = array();
- foreach ($names as $name) {
- $id = (int)substr($name, 1);
- $id_map[$id][] = $name;
- }
-
- $objects = id(new FundInitiativeQuery())
- ->setViewer($query->getViewer())
- ->withIDs(array_keys($id_map))
- ->execute();
-
- $results = array();
- foreach ($objects as $id => $object) {
- foreach (idx($id_map, $id, array()) as $name) {
- $results[$name] = $object;
- }
- }
-
- return $results;
- }
-
-}
diff --git a/src/applications/fund/phortune/FundBackerCart.php b/src/applications/fund/phortune/FundBackerCart.php
deleted file mode 100644
--- a/src/applications/fund/phortune/FundBackerCart.php
+++ /dev/null
@@ -1,87 +0,0 @@
-initiativePHID = $initiative_phid;
- return $this;
- }
-
- public function getInitiativePHID() {
- return $this->initiativePHID;
- }
-
- public function setInitiative(FundInitiative $initiative) {
- $this->initiative = $initiative;
- return $this;
- }
-
- public function getInitiative() {
- return $this->initiative;
- }
-
- public function getName(PhortuneCart $cart) {
- return pht('Fund Initiative');
- }
-
- public function willCreateCart(
- PhabricatorUser $viewer,
- PhortuneCart $cart) {
-
- $initiative = $this->getInitiative();
- if (!$initiative) {
- throw new PhutilInvalidStateException('setInitiative');
- }
-
- $cart->setMetadataValue('initiativePHID', $initiative->getPHID());
- }
-
- public function loadImplementationsForCarts(
- PhabricatorUser $viewer,
- array $carts) {
-
- $phids = array();
- foreach ($carts as $cart) {
- $phids[] = $cart->getMetadataValue('initiativePHID');
- }
-
- $initiatives = id(new FundInitiativeQuery())
- ->setViewer($viewer)
- ->withPHIDs($phids)
- ->execute();
- $initiatives = mpull($initiatives, null, 'getPHID');
-
- $objects = array();
- foreach ($carts as $key => $cart) {
- $initiative_phid = $cart->getMetadataValue('initiativePHID');
-
- $object = id(new FundBackerCart())
- ->setInitiativePHID($initiative_phid);
-
- $initiative = idx($initiatives, $initiative_phid);
- if ($initiative) {
- $object->setInitiative($initiative);
- }
-
- $objects[$key] = $object;
- }
-
- return $objects;
- }
-
- public function getCancelURI(PhortuneCart $cart) {
- return '/'.$this->getInitiative()->getMonogram();
- }
-
- public function getDoneURI(PhortuneCart $cart) {
- return '/'.$this->getInitiative()->getMonogram();
- }
-
- public function getDoneActionName(PhortuneCart $cart) {
- return pht('Return to Initiative');
- }
-
-}
diff --git a/src/applications/fund/phortune/FundBackerProduct.php b/src/applications/fund/phortune/FundBackerProduct.php
deleted file mode 100644
--- a/src/applications/fund/phortune/FundBackerProduct.php
+++ /dev/null
@@ -1,153 +0,0 @@
-viewer = $viewer;
- return $this;
- }
-
- public function getViewer() {
- return $this->viewer;
- }
-
- public function getRef() {
- return $this->getInitiativePHID();
- }
-
- public function getName(PhortuneProduct $product) {
- $initiative = $this->getInitiative();
-
- if (!$initiative) {
- return pht('Fund ');
- } else {
- return pht(
- 'Fund %s %s',
- $initiative->getMonogram(),
- $initiative->getName());
- }
- }
-
- public function getPriceAsCurrency(PhortuneProduct $product) {
- return PhortuneCurrency::newEmptyCurrency();
- }
-
- public function setInitiativePHID($initiative_phid) {
- $this->initiativePHID = $initiative_phid;
- return $this;
- }
-
- public function getInitiativePHID() {
- return $this->initiativePHID;
- }
-
- public function setInitiative(FundInitiative $initiative) {
- $this->initiative = $initiative;
- return $this;
- }
-
- public function getInitiative() {
- return $this->initiative;
- }
-
- public function loadImplementationsForRefs(
- PhabricatorUser $viewer,
- array $refs) {
-
- $initiatives = id(new FundInitiativeQuery())
- ->setViewer($viewer)
- ->withPHIDs($refs)
- ->execute();
- $initiatives = mpull($initiatives, null, 'getPHID');
-
- $objects = array();
- foreach ($refs as $ref) {
- $object = id(new FundBackerProduct())
- ->setViewer($viewer)
- ->setInitiativePHID($ref);
-
- $initiative = idx($initiatives, $ref);
- if ($initiative) {
- $object->setInitiative($initiative);
- }
-
- $objects[] = $object;
- }
-
- return $objects;
- }
-
- public function didPurchaseProduct(
- PhortuneProduct $product,
- PhortunePurchase $purchase) {
- $viewer = $this->getViewer();
-
- $backer = id(new FundBackerQuery())
- ->setViewer($viewer)
- ->withPHIDs(array($purchase->getMetadataValue('backerPHID')))
- ->executeOne();
- if (!$backer) {
- throw new Exception(pht('Unable to load %s!', 'FundBacker'));
- }
-
- // Load the actual backing user -- they may not be the curent viewer if this
- // product purchase is completing from a background worker or a merchant
- // action.
-
- $actor = id(new PhabricatorPeopleQuery())
- ->setViewer($viewer)
- ->withPHIDs(array($backer->getBackerPHID()))
- ->executeOne();
-
- $xactions = array();
- $xactions[] = id(new FundInitiativeTransaction())
- ->setTransactionType(FundInitiativeBackerTransaction::TRANSACTIONTYPE)
- ->setMetadataValue(
- FundInitiativeTransaction::PROPERTY_AMOUNT,
- $backer->getAmountAsCurrency()->serializeForStorage())
- ->setNewValue($backer->getPHID());
-
- $editor = id(new FundInitiativeEditor())
- ->setActor($actor)
- ->setContentSource($this->getContentSource());
-
- $editor->applyTransactions($this->getInitiative(), $xactions);
- }
-
- public function didRefundProduct(
- PhortuneProduct $product,
- PhortunePurchase $purchase,
- PhortuneCurrency $amount) {
- $viewer = $this->getViewer();
-
- $backer = id(new FundBackerQuery())
- ->setViewer($viewer)
- ->withPHIDs(array($purchase->getMetadataValue('backerPHID')))
- ->executeOne();
- if (!$backer) {
- throw new Exception(pht('Unable to load %s!', 'FundBacker'));
- }
-
- $xactions = array();
- $xactions[] = id(new FundInitiativeTransaction())
- ->setTransactionType(FundInitiativeRefundTransaction::TRANSACTIONTYPE)
- ->setMetadataValue(
- FundInitiativeTransaction::PROPERTY_AMOUNT,
- $amount->serializeForStorage())
- ->setMetadataValue(
- FundInitiativeTransaction::PROPERTY_BACKER,
- $backer->getBackerPHID())
- ->setNewValue($backer->getPHID());
-
- $editor = id(new FundInitiativeEditor())
- ->setActor($viewer)
- ->setContentSource($this->getContentSource());
-
- $editor->applyTransactions($this->getInitiative(), $xactions);
- }
-
-}
diff --git a/src/applications/fund/query/FundBackerQuery.php b/src/applications/fund/query/FundBackerQuery.php
deleted file mode 100644
--- a/src/applications/fund/query/FundBackerQuery.php
+++ /dev/null
@@ -1,118 +0,0 @@
-ids = $ids;
- return $this;
- }
-
- public function withPHIDs(array $phids) {
- $this->phids = $phids;
- return $this;
- }
-
- public function withStatuses(array $statuses) {
- $this->statuses = $statuses;
- return $this;
- }
-
- public function withInitiativePHIDs(array $phids) {
- $this->initiativePHIDs = $phids;
- return $this;
- }
-
- public function withBackerPHIDs(array $phids) {
- $this->backerPHIDs = $phids;
- return $this;
- }
-
- protected function loadPage() {
- $table = new FundBacker();
- $conn_r = $table->establishConnection('r');
-
- $rows = queryfx_all(
- $conn_r,
- 'SELECT * FROM %T %Q %Q %Q',
- $table->getTableName(),
- $this->buildWhereClause($conn_r),
- $this->buildOrderClause($conn_r),
- $this->buildLimitClause($conn_r));
-
- return $table->loadAllFromArray($rows);
- }
-
- protected function willFilterPage(array $backers) {
- $initiative_phids = mpull($backers, 'getInitiativePHID');
- $initiatives = id(new PhabricatorObjectQuery())
- ->setParentQuery($this)
- ->setViewer($this->getViewer())
- ->withPHIDs($initiative_phids)
- ->execute();
- $initiatives = mpull($initiatives, null, 'getPHID');
-
- foreach ($backers as $backer) {
- $initiative_phid = $backer->getInitiativePHID();
- $initiative = idx($initiatives, $initiative_phid);
- $backer->attachInitiative($initiative);
- }
-
- return $backers;
- }
-
- protected function buildWhereClause(AphrontDatabaseConnection $conn) {
- $where = array();
-
- $where[] = $this->buildPagingClause($conn);
-
- if ($this->ids !== null) {
- $where[] = qsprintf(
- $conn,
- 'id IN (%Ld)',
- $this->ids);
- }
-
- if ($this->phids !== null) {
- $where[] = qsprintf(
- $conn,
- 'phid IN (%Ls)',
- $this->phids);
- }
-
- if ($this->initiativePHIDs !== null) {
- $where[] = qsprintf(
- $conn,
- 'initiativePHID IN (%Ls)',
- $this->initiativePHIDs);
- }
-
- if ($this->backerPHIDs !== null) {
- $where[] = qsprintf(
- $conn,
- 'backerPHID IN (%Ls)',
- $this->backerPHIDs);
- }
-
- if ($this->statuses !== null) {
- $where[] = qsprintf(
- $conn,
- 'status IN (%Ls)',
- $this->statuses);
- }
-
- return $this->formatWhereClause($conn, $where);
- }
-
- public function getQueryApplicationClass() {
- return 'PhabricatorFundApplication';
- }
-
-}
diff --git a/src/applications/fund/query/FundBackerSearchEngine.php b/src/applications/fund/query/FundBackerSearchEngine.php
deleted file mode 100644
--- a/src/applications/fund/query/FundBackerSearchEngine.php
+++ /dev/null
@@ -1,151 +0,0 @@
-initiative = $initiative;
- return $this;
- }
-
- public function getInitiative() {
- return $this->initiative;
- }
-
- public function getResultTypeDescription() {
- return pht('Fund Backers');
- }
-
- public function getApplicationClassName() {
- return 'PhabricatorFundApplication';
- }
-
- public function buildSavedQueryFromRequest(AphrontRequest $request) {
- $saved = new PhabricatorSavedQuery();
-
- $saved->setParameter(
- 'backerPHIDs',
- $this->readUsersFromRequest($request, 'backers'));
-
- return $saved;
- }
-
- public function buildQueryFromSavedQuery(PhabricatorSavedQuery $saved) {
- $query = id(new FundBackerQuery());
-
- $query->withStatuses(array(FundBacker::STATUS_PURCHASED));
-
- if ($this->getInitiative()) {
- $query->withInitiativePHIDs(
- array(
- $this->getInitiative()->getPHID(),
- ));
- }
-
- $backer_phids = $saved->getParameter('backerPHIDs');
- if ($backer_phids) {
- $query->withBackerPHIDs($backer_phids);
- }
-
- return $query;
- }
-
- public function buildSearchForm(
- AphrontFormView $form,
- PhabricatorSavedQuery $saved) {
-
- $backer_phids = $saved->getParameter('backerPHIDs', array());
-
- $form
- ->appendControl(
- id(new AphrontFormTokenizerControl())
- ->setLabel(pht('Backers'))
- ->setName('backers')
- ->setDatasource(new PhabricatorPeopleDatasource())
- ->setValue($backer_phids));
- }
-
- protected function getURI($path) {
- if ($this->getInitiative()) {
- return '/fund/backers/'.$this->getInitiative()->getID().'/'.$path;
- } else {
- return '/fund/backers/'.$path;
- }
- }
-
- protected function getBuiltinQueryNames() {
- $names = array();
- $names['all'] = pht('All Backers');
-
- return $names;
- }
-
- public function buildSavedQueryFromBuiltin($query_key) {
- $query = $this->newSavedQuery();
- $query->setQueryKey($query_key);
-
- switch ($query_key) {
- case 'all':
- return $query;
- }
-
- return parent::buildSavedQueryFromBuiltin($query_key);
- }
-
- protected function getRequiredHandlePHIDsForResultList(
- array $backers,
- PhabricatorSavedQuery $query) {
-
- $phids = array();
- foreach ($backers as $backer) {
- $phids[] = $backer->getBackerPHID();
- $phids[] = $backer->getInitiativePHID();
- }
-
- return $phids;
- }
-
- protected function renderResultList(
- array $backers,
- PhabricatorSavedQuery $query,
- array $handles) {
- assert_instances_of($backers, 'FundBacker');
-
- $viewer = $this->requireViewer();
-
- $rows = array();
- foreach ($backers as $backer) {
- $rows[] = array(
- $handles[$backer->getInitiativePHID()]->renderLink(),
- $handles[$backer->getBackerPHID()]->renderLink(),
- $backer->getAmountAsCurrency()->formatForDisplay(),
- phabricator_datetime($backer->getDateCreated(), $viewer),
- );
- }
-
- $table = id(new AphrontTableView($rows))
- ->setNoDataString(pht('No backers found.'))
- ->setHeaders(
- array(
- pht('Initiative'),
- pht('Backer'),
- pht('Amount'),
- pht('Date'),
- ))
- ->setColumnClasses(
- array(
- null,
- null,
- 'wide right',
- 'right',
- ));
-
- $result = new PhabricatorApplicationSearchResultView();
- $result->setTable($table);
-
- return $result;
- }
-
-}
diff --git a/src/applications/fund/query/FundBackerTransactionQuery.php b/src/applications/fund/query/FundBackerTransactionQuery.php
deleted file mode 100644
--- a/src/applications/fund/query/FundBackerTransactionQuery.php
+++ /dev/null
@@ -1,10 +0,0 @@
-ids = $ids;
- return $this;
- }
-
- public function withPHIDs(array $phids) {
- $this->phids = $phids;
- return $this;
- }
-
- public function withOwnerPHIDs(array $phids) {
- $this->ownerPHIDs = $phids;
- return $this;
- }
-
- public function withStatuses(array $statuses) {
- $this->statuses = $statuses;
- return $this;
- }
-
- public function newResultObject() {
- return new FundInitiative();
- }
-
- protected function buildWhereClauseParts(AphrontDatabaseConnection $conn) {
- $where = parent::buildWhereClauseParts($conn);
-
- if ($this->ids !== null) {
- $where[] = qsprintf(
- $conn,
- 'i.id IN (%Ld)',
- $this->ids);
- }
-
- if ($this->phids !== null) {
- $where[] = qsprintf(
- $conn,
- 'i.phid IN (%Ls)',
- $this->phids);
- }
-
- if ($this->ownerPHIDs !== null) {
- $where[] = qsprintf(
- $conn,
- 'i.ownerPHID IN (%Ls)',
- $this->ownerPHIDs);
- }
-
- if ($this->statuses !== null) {
- $where[] = qsprintf(
- $conn,
- 'i.status IN (%Ls)',
- $this->statuses);
- }
-
- return $where;
- }
-
- public function getQueryApplicationClass() {
- return 'PhabricatorFundApplication';
- }
-
- protected function getPrimaryTableAlias() {
- return 'i';
- }
-
-}
diff --git a/src/applications/fund/query/FundInitiativeSearchEngine.php b/src/applications/fund/query/FundInitiativeSearchEngine.php
deleted file mode 100644
--- a/src/applications/fund/query/FundInitiativeSearchEngine.php
+++ /dev/null
@@ -1,154 +0,0 @@
-setKey('ownerPHIDs')
- ->setAliases(array('owner', 'ownerPHID', 'owners'))
- ->setLabel(pht('Owners')),
- id(new PhabricatorSearchCheckboxesField())
- ->setKey('statuses')
- ->setLabel(pht('Statuses'))
- ->setOptions(FundInitiative::getStatusNameMap()),
- );
- }
-
- protected function buildQueryFromParameters(array $map) {
- $query = $this->newQuery();
-
- if ($map['ownerPHIDs']) {
- $query->withOwnerPHIDs($map['ownerPHIDs']);
- }
-
- if ($map['statuses']) {
- $query->withStatuses($map['statuses']);
- }
-
- return $query;
- }
-
- protected function getURI($path) {
- return '/fund/'.$path;
- }
-
- protected function getBuiltinQueryNames() {
- $names = array();
-
- $names['open'] = pht('Open Initiatives');
- if ($this->requireViewer()->isLoggedIn()) {
- $names['owned'] = pht('Owned Initiatives');
- }
- $names['all'] = pht('All Initiatives');
-
- return $names;
- }
-
- public function buildSavedQueryFromBuiltin($query_key) {
- $query = $this->newSavedQuery();
- $query->setQueryKey($query_key);
-
- switch ($query_key) {
- case 'all':
- return $query;
- case 'owned':
- return $query->setParameter(
- 'ownerPHIDs',
- array(
- $this->requireViewer()->getPHID(),
- ));
- case 'open':
- return $query->setParameter(
- 'statuses',
- array(
- FundInitiative::STATUS_OPEN,
- ));
- }
-
- return parent::buildSavedQueryFromBuiltin($query_key);
- }
-
- protected function renderResultList(
- array $initiatives,
- PhabricatorSavedQuery $query,
- array $handles) {
- assert_instances_of($initiatives, 'FundInitiative');
-
- $viewer = $this->requireViewer();
-
- $load_phids = array();
- foreach ($initiatives as $initiative) {
- $load_phids[] = $initiative->getOwnerPHID();
- }
-
- if ($initiatives) {
- $edge_query = id(new PhabricatorEdgeQuery())
- ->withSourcePHIDs(mpull($initiatives, 'getPHID'))
- ->withEdgeTypes(
- array(
- PhabricatorProjectObjectHasProjectEdgeType::EDGECONST,
- ));
-
- $edge_query->execute();
-
- foreach ($edge_query->getDestinationPHIDs() as $phid) {
- $load_phids[] = $phid;
- }
- }
-
- $handles = $viewer->loadHandles($load_phids);
- $handles = iterator_to_array($handles);
-
- $list = new PHUIObjectItemListView();
- foreach ($initiatives as $initiative) {
- $owner_handle = $handles[$initiative->getOwnerPHID()];
-
- $item = id(new PHUIObjectItemView())
- ->setObjectName($initiative->getMonogram())
- ->setHeader($initiative->getName())
- ->setHref('/'.$initiative->getMonogram())
- ->addByline(pht('Owner: %s', $owner_handle->renderLink()));
-
- if ($initiative->isClosed()) {
- $item->setDisabled(true);
- }
-
- $project_phids = $edge_query->getDestinationPHIDs(
- array(
- $initiative->getPHID(),
- ));
-
- $project_handles = array_select_keys($handles, $project_phids);
- if ($project_handles) {
- $item->addAttribute(
- id(new PHUIHandleTagListView())
- ->setLimit(4)
- ->setSlim(true)
- ->setHandles($project_handles));
- }
-
- $list->addItem($item);
- }
-
- $result = new PhabricatorApplicationSearchResultView();
- $result->setObjectList($list);
- $result->setNoDataString(pht('No initiatives found.'));
-
- return $result;
- }
-
-}
diff --git a/src/applications/fund/query/FundInitiativeTransactionQuery.php b/src/applications/fund/query/FundInitiativeTransactionQuery.php
deleted file mode 100644
--- a/src/applications/fund/query/FundInitiativeTransactionQuery.php
+++ /dev/null
@@ -1,10 +0,0 @@
-getEngine()->getConfig('viewer');
-
- return id(new FundInitiativeQuery())
- ->setViewer($viewer)
- ->withIDs($ids)
- ->execute();
- }
-
-}
diff --git a/src/applications/fund/search/FundInitiativeFerretEngine.php b/src/applications/fund/search/FundInitiativeFerretEngine.php
deleted file mode 100644
--- a/src/applications/fund/search/FundInitiativeFerretEngine.php
+++ /dev/null
@@ -1,18 +0,0 @@
-setDocumentTitle($initiative->getName());
-
- $document->addRelationship(
- PhabricatorSearchRelationship::RELATIONSHIP_AUTHOR,
- $initiative->getOwnerPHID(),
- PhabricatorPeopleUserPHIDType::TYPECONST,
- $initiative->getDateCreated());
-
- $document->addRelationship(
- PhabricatorSearchRelationship::RELATIONSHIP_OWNER,
- $initiative->getOwnerPHID(),
- PhabricatorPeopleUserPHIDType::TYPECONST,
- $initiative->getDateCreated());
-
- $document->addRelationship(
- $initiative->isClosed()
- ? PhabricatorSearchRelationship::RELATIONSHIP_CLOSED
- : PhabricatorSearchRelationship::RELATIONSHIP_OPEN,
- $initiative->getPHID(),
- FundInitiativePHIDType::TYPECONST,
- PhabricatorTime::getNow());
- }
-}
diff --git a/src/applications/fund/storage/FundBacker.php b/src/applications/fund/storage/FundBacker.php
deleted file mode 100644
--- a/src/applications/fund/storage/FundBacker.php
+++ /dev/null
@@ -1,120 +0,0 @@
-setBackerPHID($actor->getPHID())
- ->setStatus(self::STATUS_NEW);
- }
-
- protected function getConfiguration() {
- return array(
- self::CONFIG_AUX_PHID => true,
- self::CONFIG_SERIALIZATION => array(
- 'properties' => self::SERIALIZATION_JSON,
- ),
- self::CONFIG_APPLICATION_SERIALIZERS => array(
- 'amountAsCurrency' => new PhortuneCurrencySerializer(),
- ),
- self::CONFIG_COLUMN_SCHEMA => array(
- 'status' => 'text32',
- 'amountAsCurrency' => 'text64',
- ),
- self::CONFIG_KEY_SCHEMA => array(
- 'key_initiative' => array(
- 'columns' => array('initiativePHID'),
- ),
- 'key_backer' => array(
- 'columns' => array('backerPHID'),
- ),
- ),
- ) + parent::getConfiguration();
- }
-
- public function generatePHID() {
- return PhabricatorPHID::generateNewPHID(FundBackerPHIDType::TYPECONST);
- }
-
- public function getProperty($key, $default = null) {
- return idx($this->properties, $key, $default);
- }
-
- public function setProperty($key, $value) {
- $this->properties[$key] = $value;
- return $this;
- }
-
- public function getInitiative() {
- return $this->assertAttached($this->initiative);
- }
-
- public function attachInitiative(FundInitiative $initiative = null) {
- $this->initiative = $initiative;
- return $this;
- }
-
-
-/* -( PhabricatorPolicyInterface )----------------------------------------- */
-
-
- public function getCapabilities() {
- return array(
- PhabricatorPolicyCapability::CAN_VIEW,
- PhabricatorPolicyCapability::CAN_EDIT,
- );
- }
-
- public function getPolicy($capability) {
- switch ($capability) {
- case PhabricatorPolicyCapability::CAN_VIEW:
- // If we have the initiative, use the initiative's policy.
- // Otherwise, return NOONE. This allows the backer to continue seeing
- // a backer even if they're no longer allowed to see the initiative.
-
- $initiative = $this->getInitiative();
- if ($initiative) {
- return $initiative->getPolicy($capability);
- }
- return PhabricatorPolicies::POLICY_NOONE;
- case PhabricatorPolicyCapability::CAN_EDIT:
- return PhabricatorPolicies::POLICY_NOONE;
- }
- }
-
- public function hasAutomaticCapability($capability, PhabricatorUser $viewer) {
- return ($viewer->getPHID() == $this->getBackerPHID());
- }
-
- public function describeAutomaticCapability($capability) {
- return pht('A backer can always see what they have backed.');
- }
-
-
-/* -( PhabricatorApplicationTransactionInterface )------------------------- */
-
-
- public function getApplicationTransactionEditor() {
- return new FundBackerEditor();
- }
-
- public function getApplicationTransactionTemplate() {
- return new FundBackerTransaction();
- }
-
-}
diff --git a/src/applications/fund/storage/FundBackerTransaction.php b/src/applications/fund/storage/FundBackerTransaction.php
deleted file mode 100644
--- a/src/applications/fund/storage/FundBackerTransaction.php
+++ /dev/null
@@ -1,18 +0,0 @@
- pht('Open'),
- self::STATUS_CLOSED => pht('Closed'),
- );
- }
-
- public static function initializeNewInitiative(PhabricatorUser $actor) {
- $app = id(new PhabricatorApplicationQuery())
- ->setViewer($actor)
- ->withClasses(array('PhabricatorFundApplication'))
- ->executeOne();
-
- $view_policy = $app->getPolicy(FundDefaultViewCapability::CAPABILITY);
-
- return id(new FundInitiative())
- ->setOwnerPHID($actor->getPHID())
- ->setViewPolicy($view_policy)
- ->setEditPolicy($actor->getPHID())
- ->setStatus(self::STATUS_OPEN)
- ->setTotalAsCurrency(PhortuneCurrency::newEmptyCurrency());
- }
-
- protected function getConfiguration() {
- return array(
- self::CONFIG_AUX_PHID => true,
- self::CONFIG_COLUMN_SCHEMA => array(
- 'name' => 'text255',
- 'description' => 'text',
- 'risks' => 'text',
- 'status' => 'text32',
- 'merchantPHID' => 'phid?',
- 'totalAsCurrency' => 'text64',
- ),
- self::CONFIG_APPLICATION_SERIALIZERS => array(
- 'totalAsCurrency' => new PhortuneCurrencySerializer(),
- ),
- self::CONFIG_KEY_SCHEMA => array(
- 'key_status' => array(
- 'columns' => array('status'),
- ),
- 'key_owner' => array(
- 'columns' => array('ownerPHID'),
- ),
- ),
- ) + parent::getConfiguration();
- }
-
- public function getPHIDType() {
- return FundInitiativePHIDType::TYPECONST;
- }
-
- public function getMonogram() {
- return 'I'.$this->getID();
- }
-
- public function getViewURI() {
- return '/'.$this->getMonogram();
- }
-
- public function getProjectPHIDs() {
- return $this->assertAttached($this->projectPHIDs);
- }
-
- public function attachProjectPHIDs(array $phids) {
- $this->projectPHIDs = $phids;
- return $this;
- }
-
- public function isClosed() {
- return ($this->getStatus() == self::STATUS_CLOSED);
- }
-
-
-/* -( PhabricatorPolicyInterface )----------------------------------------- */
-
-
- public function getCapabilities() {
- return array(
- PhabricatorPolicyCapability::CAN_VIEW,
- PhabricatorPolicyCapability::CAN_EDIT,
- );
- }
-
- public function getPolicy($capability) {
- switch ($capability) {
- case PhabricatorPolicyCapability::CAN_VIEW:
- return $this->getViewPolicy();
- case PhabricatorPolicyCapability::CAN_EDIT:
- return $this->getEditPolicy();
- }
- }
-
- public function hasAutomaticCapability($capability, PhabricatorUser $viewer) {
- if ($viewer->getPHID() == $this->getOwnerPHID()) {
- return true;
- }
-
- if ($capability == PhabricatorPolicyCapability::CAN_VIEW) {
- $can_merchant = PhortuneMerchantQuery::canViewersEditMerchants(
- array($viewer->getPHID()),
- array($this->getMerchantPHID()));
-
- if ($can_merchant) {
- return true;
- }
- }
-
- return false;
- }
-
- public function describeAutomaticCapability($capability) {
- return pht('The owner of an initiative can always view and edit it.');
- }
-
-
-/* -( PhabricatorApplicationTransactionInterface )------------------------- */
-
-
- public function getApplicationTransactionEditor() {
- return new FundInitiativeEditor();
- }
-
- public function getApplicationTransactionTemplate() {
- return new FundInitiativeTransaction();
- }
-
-
-/* -( PhabricatorSubscribableInterface )----------------------------------- */
-
-
- public function isAutomaticallySubscribed($phid) {
- return ($phid == $this->getOwnerPHID());
- }
-
-
-/* -( PhabricatorTokenRecevierInterface )---------------------------------- */
-
-
- public function getUsersToNotifyOfTokenGiven() {
- return array(
- $this->getOwnerPHID(),
- );
- }
-
-
-/* -( PhabricatorDestructibleInterface )----------------------------------- */
-
-
- public function destroyObjectPermanently(
- PhabricatorDestructionEngine $engine) {
-
- $this->openTransaction();
- $this->delete();
- $this->saveTransaction();
- }
-
-
-/* -( PhabricatorFulltextInterface )--------------------------------------- */
-
-
- public function newFulltextEngine() {
- return new FundInitiativeFulltextEngine();
- }
-
-
-/* -( PhabricatorFerretInterface )----------------------------------------- */
-
-
- public function newFerretEngine() {
- return new FundInitiativeFerretEngine();
- }
-
-}
diff --git a/src/applications/fund/storage/FundInitiativeTransaction.php b/src/applications/fund/storage/FundInitiativeTransaction.php
deleted file mode 100644
--- a/src/applications/fund/storage/FundInitiativeTransaction.php
+++ /dev/null
@@ -1,54 +0,0 @@
-getTransactionType()) {
- case FundInitiativeStatusTransaction::TRANSACTIONTYPE:
- $tags[] = self::MAILTAG_STATUS;
- break;
- case FundInitiativeBackerTransaction::TRANSACTIONTYPE:
- case FundInitiativeRefundTransaction::TRANSACTIONTYPE:
- $tags[] = self::MAILTAG_BACKER;
- break;
- default:
- $tags[] = self::MAILTAG_OTHER;
- break;
- }
-
- return $tags;
- }
-
-}
diff --git a/src/applications/fund/storage/FundInitiativeTransactionComment.php b/src/applications/fund/storage/FundInitiativeTransactionComment.php
deleted file mode 100644
--- a/src/applications/fund/storage/FundInitiativeTransactionComment.php
+++ /dev/null
@@ -1,10 +0,0 @@
-buildEdgeSchemata(new FundInitiative());
- }
-
-}
diff --git a/src/applications/fund/xaction/FundBackerRefundTransaction.php b/src/applications/fund/xaction/FundBackerRefundTransaction.php
deleted file mode 100644
--- a/src/applications/fund/xaction/FundBackerRefundTransaction.php
+++ /dev/null
@@ -1,13 +0,0 @@
-getStatus();
- }
-
- public function applyInternalEffects($object, $value) {
- $object->setStatus($value);
- }
-
-
-}
diff --git a/src/applications/fund/xaction/FundBackerTransactionType.php b/src/applications/fund/xaction/FundBackerTransactionType.php
deleted file mode 100644
--- a/src/applications/fund/xaction/FundBackerTransactionType.php
+++ /dev/null
@@ -1,4 +0,0 @@
-getMetadataValue(
- FundInitiativeTransaction::PROPERTY_AMOUNT);
- $amount = PhortuneCurrency::newFromString($amount);
- $total = $object->getTotalAsCurrency()->add($amount);
- $object->setTotalAsCurrency($total);
- }
-
- public function applyExternalEffects($object, $value) {
- $backer = id(new FundBackerQuery())
- ->setViewer($this->getActor())
- ->withPHIDs(array($value))
- ->executeOne();
- if (!$backer) {
- throw new Exception(pht('Unable to load %s!', 'FundBacker'));
- }
-
- $subx = array();
- $subx[] = id(new FundBackerTransaction())
- ->setTransactionType(FundBackerStatusTransaction::TRANSACTIONTYPE)
- ->setNewValue(FundBacker::STATUS_PURCHASED);
-
- $content_source = $this->getEditor()->getContentSource();
-
- $editor = id(new FundBackerEditor())
- ->setActor($this->getActor())
- ->setContentSource($content_source)
- ->setContinueOnMissingFields(true)
- ->setContinueOnNoEffect(true);
-
- $editor->applyTransactions($backer, $subx);
- }
-
- public function getTitle() {
- $amount = $this->getMetadataValue(
- FundInitiativeTransaction::PROPERTY_AMOUNT);
- $amount = PhortuneCurrency::newFromString($amount);
- return pht(
- '%s backed this initiative with %s.',
- $this->renderAuthor(),
- $amount->formatForDisplay());
- }
-
- public function getTitleForFeed() {
- $amount = $this->getMetadataValue(
- FundInitiativeTransaction::PROPERTY_AMOUNT);
- $amount = PhortuneCurrency::newFromString($amount);
- return pht(
- '%s backed %s with %s.',
- $this->renderAuthor(),
- $this->renderObject(),
- $amount->formatForDisplay());
- }
-
- public function getIcon() {
- return 'fa-heart';
- }
-
- public function getColor() {
- return 'red';
- }
-
-
-}
diff --git a/src/applications/fund/xaction/FundInitiativeDescriptionTransaction.php b/src/applications/fund/xaction/FundInitiativeDescriptionTransaction.php
deleted file mode 100644
--- a/src/applications/fund/xaction/FundInitiativeDescriptionTransaction.php
+++ /dev/null
@@ -1,75 +0,0 @@
-getDescription();
- }
-
- public function applyInternalEffects($object, $value) {
- $object->setDescription($value);
- }
-
- public function shouldHide() {
- $old = $this->getOldValue();
- $new = $this->getNewValue();
- if (!strlen($old) && !strlen($new)) {
- return true;
- }
- return false;
- }
-
- public function getTitle() {
- $old = $this->getOldValue();
- $new = $this->getNewValue();
-
- if ($old === null) {
- return pht(
- '%s set the initiative description.',
- $this->renderAuthor());
- } else {
- return pht(
- '%s updated the initiative description.',
- $this->renderAuthor());
- }
- }
-
- public function getTitleForFeed() {
- return pht(
- '%s updated the initiative description for %s.',
- $this->renderAuthor(),
- $this->renderObject());
- }
-
- public function hasChangeDetailView() {
- return true;
- }
-
- public function getMailDiffSectionHeader() {
- return pht('CHANGES TO INITIATIVE DESCRIPTION');
- }
-
- public function newChangeDetailView() {
- $viewer = $this->getViewer();
-
- return id(new PhabricatorApplicationTransactionTextDiffDetailView())
- ->setViewer($viewer)
- ->setOldText($this->getOldValue())
- ->setNewText($this->getNewValue());
- }
-
- public function newRemarkupChanges() {
- $changes = array();
-
- $changes[] = $this->newRemarkupChange()
- ->setOldValue($this->getOldValue())
- ->setNewValue($this->getNewValue());
-
- return $changes;
- }
-
-
-}
diff --git a/src/applications/fund/xaction/FundInitiativeMerchantTransaction.php b/src/applications/fund/xaction/FundInitiativeMerchantTransaction.php
deleted file mode 100644
--- a/src/applications/fund/xaction/FundInitiativeMerchantTransaction.php
+++ /dev/null
@@ -1,93 +0,0 @@
-getMerchantPHID();
- }
-
- public function applyInternalEffects($object, $value) {
- $object->setMerchantPHID($value);
- }
-
- public function getTitle() {
- $new = $this->getNewValue();
- $new_merchant = $this->renderHandleList(array($new));
-
- $old = $this->getOldValue();
- $old_merchant = $this->renderHandleList(array($old));
-
- if ($old) {
- return pht(
- '%s changed the merchant receiving funds from this '.
- 'initiative from %s to %s.',
- $this->renderAuthor(),
- $old_merchant,
- $new_merchant);
- } else {
- return pht(
- '%s set the merchant receiving funds from this '.
- 'initiative to %s.',
- $this->renderAuthor(),
- $new_merchant);
- }
- }
-
- public function getTitleForFeed() {
- $new = $this->getNewValue();
- $new_merchant = $this->renderHandleList(array($new));
-
- $old = $this->getOldValue();
- $old_merchant = $this->renderHandleList(array($old));
-
- return pht(
- '%s changed the merchant receiving funds from %s '.
- 'from %s to %s.',
- $this->renderAuthor(),
- $this->renderObject(),
- $old_merchant,
- $new_merchant);
- }
-
- public function validateTransactions($object, array $xactions) {
- $errors = array();
-
- if ($this->isEmptyTextTransaction($object->getMerchantPHID(), $xactions)) {
- $errors[] = $this->newRequiredError(
- pht('Initiatives must have a payable merchant.'));
- }
-
- foreach ($xactions as $xaction) {
- $merchant_phid = $xaction->getNewValue();
-
- // Make sure the actor has permission to edit the merchant they're
- // selecting. You aren't allowed to send payments to an account you
- // do not control.
- $merchants = id(new PhortuneMerchantQuery())
- ->setViewer($this->getActor())
- ->withPHIDs(array($merchant_phid))
- ->requireCapabilities(
- array(
- PhabricatorPolicyCapability::CAN_VIEW,
- PhabricatorPolicyCapability::CAN_EDIT,
- ))
- ->execute();
- if (!$merchants) {
- $errors[] = $this->newInvalidError(
- pht('You must specify a merchant account you control as the '.
- 'recipient of funds from this initiative.'));
- }
- }
-
- return $errors;
- }
-
- public function getIcon() {
- return 'fa-bank';
- }
-
-
-}
diff --git a/src/applications/fund/xaction/FundInitiativeNameTransaction.php b/src/applications/fund/xaction/FundInitiativeNameTransaction.php
deleted file mode 100644
--- a/src/applications/fund/xaction/FundInitiativeNameTransaction.php
+++ /dev/null
@@ -1,71 +0,0 @@
-getName();
- }
-
- public function applyInternalEffects($object, $value) {
- $object->setName($value);
- }
-
- public function getTitle() {
- $old = $this->getOldValue();
- if (!strlen($old)) {
- return pht(
- '%s created this initiative.',
- $this->renderAuthor());
- } else {
- return pht(
- '%s renamed this initiative from %s to %s.',
- $this->renderAuthor(),
- $this->renderOldValue(),
- $this->renderNewValue());
- }
- }
-
- public function getTitleForFeed() {
- $old = $this->getOldValue();
- if (!strlen($old)) {
- return pht(
- '%s created initiative %s.',
- $this->renderAuthor(),
- $this->renderObject());
- } else {
- return pht(
- '%s renamed %s from %s to %s.',
- $this->renderAuthor(),
- $this->renderObject(),
- $this->renderOldValue(),
- $this->renderNewValue());
- }
- }
-
- public function validateTransactions($object, array $xactions) {
- $errors = array();
-
- if ($this->isEmptyTextTransaction($object->getName(), $xactions)) {
- $errors[] = $this->newRequiredError(
- pht('Initiatives must have a name.'));
- }
-
- $max_length = $object->getColumnMaximumByteLength('name');
- foreach ($xactions as $xaction) {
- $new_value = $xaction->getNewValue();
- $new_length = strlen($new_value);
- if ($new_length > $max_length) {
- $errors[] = $this->newInvalidError(
- pht('The name can be no longer than %s characters.',
- new PhutilNumber($max_length)));
- }
- }
-
- return $errors;
- }
-
-
-}
diff --git a/src/applications/fund/xaction/FundInitiativeRefundTransaction.php b/src/applications/fund/xaction/FundInitiativeRefundTransaction.php
deleted file mode 100644
--- a/src/applications/fund/xaction/FundInitiativeRefundTransaction.php
+++ /dev/null
@@ -1,77 +0,0 @@
-getMetadataValue(
- FundInitiativeTransaction::PROPERTY_AMOUNT);
- $amount = PhortuneCurrency::newFromString($amount);
- $total = $object->getTotalAsCurrency()->subtract($amount);
- $object->setTotalAsCurrency($total);
- }
-
- public function applyExternalEffects($object, $value) {
- $backer = id(new FundBackerQuery())
- ->setViewer($this->getActor())
- ->withPHIDs(array($value))
- ->executeOne();
- if (!$backer) {
- throw new Exception(pht('Unable to load %s!', 'FundBacker'));
- }
-
- $subx = array();
- $amount = $this->getMetadataValue(
- FundInitiativeTransaction::PROPERTY_AMOUNT);
- $subx[] = id(new FundBackerTransaction())
- ->setTransactionType(FundBackerStatusTransaction::TRANSACTIONTYPE)
- ->setNewValue($amount);
-
- $content_source = $this->getEditor()->getContentSource();
-
- $editor = id(new FundBackerEditor())
- ->setActor($this->getActor())
- ->setContentSource($content_source)
- ->setContinueOnMissingFields(true)
- ->setContinueOnNoEffect(true);
-
- $editor->applyTransactions($backer, $subx);
- }
-
- public function getTitle() {
- $amount = $this->getMetadataValue(
- FundInitiativeTransaction::PROPERTY_AMOUNT);
- $amount = PhortuneCurrency::newFromString($amount);
- $backer_phid = $this->getMetadataValue(
- FundInitiativeTransaction::PROPERTY_BACKER);
-
- return pht(
- '%s refunded %s to %s.',
- $this->renderAuthor(),
- $amount->formatForDisplay(),
- $this->renderHandle($backer_phid));
- }
-
- public function getTitleForFeed() {
- $amount = $this->getMetadataValue(
- FundInitiativeTransaction::PROPERTY_AMOUNT);
- $amount = PhortuneCurrency::newFromString($amount);
- $backer_phid = $this->getMetadataValue(
- FundInitiativeTransaction::PROPERTY_BACKER);
-
- return pht(
- '%s refunded %s to %s for %s.',
- $this->renderAuthor(),
- $amount->formatForDisplay(),
- $this->renderHandle($backer_phid),
- $this->renderObject());
- }
-
-
-}
diff --git a/src/applications/fund/xaction/FundInitiativeRisksTransaction.php b/src/applications/fund/xaction/FundInitiativeRisksTransaction.php
deleted file mode 100644
--- a/src/applications/fund/xaction/FundInitiativeRisksTransaction.php
+++ /dev/null
@@ -1,80 +0,0 @@
-getRisks();
- }
-
- public function applyInternalEffects($object, $value) {
- $object->setRisks($value);
- }
-
- public function shouldHide() {
- $old = $this->getOldValue();
- $new = $this->getNewValue();
- if (!strlen($old) && !strlen($new)) {
- return true;
- }
- return false;
- }
-
- public function getTitle() {
- $old = $this->getOldValue();
- $new = $this->getNewValue();
-
- if ($old === null) {
- return pht(
- '%s set the initiative risks/challenges.',
- $this->renderAuthor());
- } else {
- return pht(
- '%s updated the initiative risks/challenges.',
- $this->renderAuthor());
- }
-
- }
-
- public function getTitleForFeed() {
- return pht(
- '%s updated the initiative risks/challenges for %s.',
- $this->renderAuthor(),
- $this->renderObject());
- }
-
- public function hasChangeDetailView() {
- return true;
- }
-
- public function getMailDiffSectionHeader() {
- return pht('CHANGES TO INITIATIVE RISKS/CHALLENGES');
- }
-
- public function newChangeDetailView() {
- $viewer = $this->getViewer();
-
- return id(new PhabricatorApplicationTransactionTextDiffDetailView())
- ->setViewer($viewer)
- ->setOldText($this->getOldValue())
- ->setNewText($this->getNewValue());
- }
-
- public function newRemarkupChanges() {
- $changes = array();
-
- $changes[] = $this->newRemarkupChange()
- ->setOldValue($this->getOldValue())
- ->setNewValue($this->getNewValue());
-
- return $changes;
- }
-
- public function getIcon() {
- return 'fa-ambulance';
- }
-
-
-}
diff --git a/src/applications/fund/xaction/FundInitiativeStatusTransaction.php b/src/applications/fund/xaction/FundInitiativeStatusTransaction.php
deleted file mode 100644
--- a/src/applications/fund/xaction/FundInitiativeStatusTransaction.php
+++ /dev/null
@@ -1,51 +0,0 @@
-getStatus();
- }
-
- public function applyInternalEffects($object, $value) {
- $object->setStatus($value);
- }
-
- public function getTitle() {
- if ($this->getNewValue() == FundInitiative::STATUS_CLOSED) {
- return pht(
- '%s closed this initiative.',
- $this->renderAuthor());
- } else {
- return pht(
- '%s reopened this initiative.',
- $this->renderAuthor());
- }
- }
-
- public function getTitleForFeed() {
- if ($this->getNewValue() == FundInitiative::STATUS_CLOSED) {
- return pht(
- '%s closed %s.',
- $this->renderAuthor(),
- $this->renderObject());
- } else {
- return pht(
- '%s reopened %s.',
- $this->renderAuthor(),
- $this->renderObject());
- }
- }
-
- public function getIcon() {
- if ($this->getNewValue() == FundInitiative::STATUS_CLOSED) {
- return 'fa-ban';
- } else {
- return 'fa-check';
- }
- }
-
-
-}
diff --git a/src/applications/fund/xaction/FundInitiativeTransactionType.php b/src/applications/fund/xaction/FundInitiativeTransactionType.php
deleted file mode 100644
--- a/src/applications/fund/xaction/FundInitiativeTransactionType.php
+++ /dev/null
@@ -1,4 +0,0 @@
- true,
- );
- }
-
- public function testNewPhortuneAccount() {
- $user = $this->generateNewTestUser();
- $content_source = $this->newContentSource();
-
- $accounts = PhortuneAccountQuery::loadAccountsForUser(
- $user,
- $content_source);
-
- $this->assertEqual(
- 1,
- count($accounts),
- pht('Creation of default account for users with no accounts.'));
-
- // Reload the account. The user should be able to view and edit it, and
- // should be a member.
-
- $account = head($accounts);
- $account = id(new PhortuneAccountQuery())
- ->setViewer($user)
- ->withPHIDs(array($account->getPHID()))
- ->requireCapabilities(
- array(
- PhabricatorPolicyCapability::CAN_VIEW,
- PhabricatorPolicyCapability::CAN_EDIT,
- ))
- ->executeOne();
-
- $this->assertEqual(true, ($account instanceof PhortuneAccount));
- $this->assertEqual(array($user->getPHID()), $account->getMemberPHIDs());
- }
-
-}
diff --git a/src/applications/phortune/action/PhortuneAddPaymentMethodAction.php b/src/applications/phortune/action/PhortuneAddPaymentMethodAction.php
deleted file mode 100644
--- a/src/applications/phortune/action/PhortuneAddPaymentMethodAction.php
+++ /dev/null
@@ -1,18 +0,0 @@
- array(
- '' => 'PhortuneLandingController',
- 'card/(?P\d+)/' => array(
- 'edit/' => 'PhortunePaymentMethodEditController',
- 'disable/' => 'PhortunePaymentMethodDisableController',
- ),
- 'cart/(?P\d+)/' => array(
- '' => 'PhortuneCartViewController',
- 'checkout/' => 'PhortuneCartCheckoutController',
- '(?Pprint)/' => 'PhortuneCartViewController',
- '(?Pcancel|refund)/' => 'PhortuneCartCancelController',
- 'accept/' => 'PhortuneCartAcceptController',
- 'void/' => 'PhortuneCartVoidController',
- 'update/' => 'PhortuneCartUpdateController',
- ),
- 'account/' => array(
- '' => 'PhortuneAccountListController',
-
- $this->getEditRoutePattern('edit/')
- => 'PhortuneAccountEditController',
-
- '(?P\d+)/' => array(
- '' => 'PhortuneAccountOverviewController',
- 'details/' => 'PhortuneAccountDetailsController',
- 'methods/' => array(
- '' => 'PhortuneAccountPaymentMethodController',
- '(?P\d+)/' => 'PhortuneAccountPaymentMethodViewController',
- 'new/' => 'PhortunePaymentMethodCreateController',
- ),
- 'orders/' => array(
- '' => 'PhortuneAccountOrdersController',
- $this->getQueryRoutePattern('list/')
- => 'PhortuneAccountOrderListController',
- ),
- 'charges/' => array(
- '' => 'PhortuneAccountChargesController',
- $this->getQueryRoutePattern('list/')
- => 'PhortuneAccountChargeListController',
- ),
- 'subscriptions/' => array(
- '' => 'PhortuneAccountSubscriptionController',
- '(?P\d+)/' => array(
- '' => 'PhortuneAccountSubscriptionViewController',
- 'autopay/(?P\d+)/'
- => 'PhortuneAccountSubscriptionAutopayController',
- $this->getQueryRoutePattern('orders/')
- => 'PhortuneAccountOrderListController',
- ),
- ),
- 'managers/' => array(
- '' => 'PhortuneAccountManagersController',
- 'add/' => 'PhortuneAccountAddManagerController',
- ),
- 'addresses/' => array(
- '' => 'PhortuneAccountEmailAddressesController',
- '(?P\d+)/' => array(
- '' => 'PhortuneAccountEmailViewController',
- 'rotate/' => 'PhortuneAccountEmailRotateController',
- '(?Pdisable|enable)/'
- => 'PhortuneAccountEmailStatusController',
- ),
- $this->getEditRoutePattern('edit/')
- => 'PhortuneAccountEmailEditController',
- ),
- ),
- ),
- 'product/' => array(
- '' => 'PhortuneProductListController',
- 'view/(?P\d+)/' => 'PhortuneProductViewController',
- ),
- 'provider/' => array(
- '(?P\d+)/(?P[^/]+)/'
- => 'PhortuneProviderActionController',
- ),
- 'external/(?P[^/]+)/(?P[^/]+)/' => array(
- '' => 'PhortuneExternalOverviewController',
- 'unsubscribe/' => 'PhortuneExternalUnsubscribeController',
- 'order/' => array(
- '(?P[^/]+)/' => array(
- '' => 'PhortuneExternalOrderController',
- '(?Pprint)/' => 'PhortuneExternalOrderController',
- ),
- ),
- ),
- 'merchant/' => array(
- $this->getQueryRoutePattern()
- => 'PhortuneMerchantListController',
- $this->getEditRoutePattern('edit/')
- => 'PhortuneMerchantEditController',
- '(?P\d+)/' => array(
- '' => 'PhortuneMerchantOverviewController',
- 'details/' => 'PhortuneMerchantDetailsController',
- 'providers/' => array(
- '' => 'PhortuneMerchantProvidersController',
- '(?P\d+)/' => array(
- '' => 'PhortuneMerchantProviderViewController',
- 'disable/' => 'PhortuneMerchantProviderDisableController',
- ),
- $this->getEditRoutePattern('edit/')
- => 'PhortuneMerchantProviderEditController',
- ),
- 'orders/' => array(
- '' => 'PhortuneMerchantOrdersController',
- $this->getQueryRoutePattern('list/')
- => 'PhortuneMerchantOrderListController',
- ),
- 'picture/' => array(
- 'edit/' => 'PhortuneMerchantPictureController',
- ),
- 'subscriptions/' => array(
- '' => 'PhortuneMerchantSubscriptionsController',
- $this->getQueryRoutePattern('list/')
- => 'PhortuneMerchantSubscriptionListController',
- ),
- 'managers/' => array(
- '' => 'PhortuneMerchantManagersController',
- 'new/' => 'PhortuneMerchantAddManagerController',
- ),
- ),
- ),
- ),
- );
- }
-
- protected function getCustomCapabilities() {
- return array(
- PhortuneMerchantCapability::CAPABILITY => array(
- 'caption' => pht('Merchant accounts can receive payments.'),
- 'default' => PhabricatorPolicies::POLICY_ADMIN,
- ),
- );
- }
-
-}
diff --git a/src/applications/phortune/capability/PhortuneMerchantCapability.php b/src/applications/phortune/capability/PhortuneMerchantCapability.php
deleted file mode 100644
--- a/src/applications/phortune/capability/PhortuneMerchantCapability.php
+++ /dev/null
@@ -1,17 +0,0 @@
- $cart) {
- $results[$key] = new PhortuneAdHocCart();
- }
-
- return $results;
- }
-
- public function getName(PhortuneCart $cart) {
- return $cart->getMetadataValue('adhoc.title');
- }
-
- public function getDescription(PhortuneCart $cart) {
- return $cart->getMetadataValue('adhoc.description');
- }
-
- public function getCancelURI(PhortuneCart $cart) {
- return null;
- }
-
- public function getDoneURI(PhortuneCart $cart) {
- return null;
- }
-
- public function willCreateCart(
- PhabricatorUser $viewer,
- PhortuneCart $cart) {
- return;
- }
-
-}
diff --git a/src/applications/phortune/cart/PhortuneCartImplementation.php b/src/applications/phortune/cart/PhortuneCartImplementation.php
deleted file mode 100644
--- a/src/applications/phortune/cart/PhortuneCartImplementation.php
+++ /dev/null
@@ -1,46 +0,0 @@
-getStatus()) {
- case PhortuneCart::STATUS_PURCHASED:
- throw new Exception(
- pht(
- 'This order can not be cancelled because it has already been '.
- 'completed.'));
- break;
- }
- }
-
- public function assertCanRefundOrder(PhortuneCart $cart) {
- return;
- }
-
- abstract public function willCreateCart(
- PhabricatorUser $viewer,
- PhortuneCart $cart);
-
-}
diff --git a/src/applications/phortune/cart/PhortuneSubscriptionCart.php b/src/applications/phortune/cart/PhortuneSubscriptionCart.php
deleted file mode 100644
--- a/src/applications/phortune/cart/PhortuneSubscriptionCart.php
+++ /dev/null
@@ -1,88 +0,0 @@
-subscriptionPHID = $subscription_phid;
- return $this;
- }
-
- public function getSubscriptionPHID() {
- return $this->subscriptionPHID;
- }
-
- public function setSubscription(PhortuneSubscription $subscription) {
- $this->subscription = $subscription;
- return $this;
- }
-
- public function getSubscription() {
- return $this->subscription;
- }
-
- public function getName(PhortuneCart $cart) {
- return $this->getSubscription()->getCartName($cart);
- }
-
- public function willCreateCart(
- PhabricatorUser $viewer,
- PhortuneCart $cart) {
-
- $subscription = $this->getSubscription();
- if (!$subscription) {
- throw new PhutilInvalidStateException('setSubscription');
- }
-
- $cart->setMetadataValue('subscriptionPHID', $subscription->getPHID());
- }
-
- public function loadImplementationsForCarts(
- PhabricatorUser $viewer,
- array $carts) {
-
- $phids = array();
- foreach ($carts as $cart) {
- $phids[] = $cart->getMetadataValue('subscriptionPHID');
- }
-
- $subscriptions = id(new PhortuneSubscriptionQuery())
- ->setViewer($viewer)
- ->withPHIDs($phids)
- ->execute();
- $subscriptions = mpull($subscriptions, null, 'getPHID');
-
- $objects = array();
- foreach ($carts as $key => $cart) {
- $subscription_phid = $cart->getMetadataValue('subscriptionPHID');
- $subscription = idx($subscriptions, $subscription_phid);
- if (!$subscription) {
- continue;
- }
-
- $object = id(new PhortuneSubscriptionCart())
- ->setSubscriptionPHID($subscription_phid)
- ->setSubscription($subscription);
-
- $objects[$key] = $object;
- }
-
- return $objects;
- }
-
- public function getCancelURI(PhortuneCart $cart) {
- return $this->getSubscription()->getURI();
- }
-
- public function getDoneURI(PhortuneCart $cart) {
- return $this->getSubscription()->getURI();
- }
-
- public function getDoneActionName(PhortuneCart $cart) {
- return pht('Return to Subscription');
- }
-
-}
diff --git a/src/applications/phortune/codex/PhortunePaymentMethodPolicyCodex.php b/src/applications/phortune/codex/PhortunePaymentMethodPolicyCodex.php
deleted file mode 100644
--- a/src/applications/phortune/codex/PhortunePaymentMethodPolicyCodex.php
+++ /dev/null
@@ -1,36 +0,0 @@
-getObject();
-
- $rules = array();
-
- $rules[] = $this->newRule()
- ->setCapabilities(
- array(
- PhabricatorPolicyCapability::CAN_VIEW,
- PhabricatorPolicyCapability::CAN_EDIT,
- ))
- ->setIsActive(true)
- ->setDescription(
- pht(
- 'Account members may view and edit payment methods.'));
-
- $rules[] = $this->newRule()
- ->setCapabilities(
- array(
- PhabricatorPolicyCapability::CAN_VIEW,
- ))
- ->setIsActive(true)
- ->setDescription(
- pht(
- 'Merchants you have a relationship with may view associated '.
- 'payment methods.'));
-
- return $rules;
- }
-
-}
diff --git a/src/applications/phortune/codex/PhortuneSubscriptionPolicyCodex.php b/src/applications/phortune/codex/PhortuneSubscriptionPolicyCodex.php
deleted file mode 100644
--- a/src/applications/phortune/codex/PhortuneSubscriptionPolicyCodex.php
+++ /dev/null
@@ -1,36 +0,0 @@
-getObject();
-
- $rules = array();
-
- $rules[] = $this->newRule()
- ->setCapabilities(
- array(
- PhabricatorPolicyCapability::CAN_VIEW,
- PhabricatorPolicyCapability::CAN_EDIT,
- ))
- ->setIsActive(true)
- ->setDescription(
- pht(
- 'Account members may view and edit subscriptions.'));
-
- $rules[] = $this->newRule()
- ->setCapabilities(
- array(
- PhabricatorPolicyCapability::CAN_VIEW,
- ))
- ->setIsActive(true)
- ->setDescription(
- pht(
- 'Merchants you have a relationship with may view associated '.
- 'subscriptions.'));
-
- return $rules;
- }
-
-}
diff --git a/src/applications/phortune/constants/PhortuneAccountEmailStatus.php b/src/applications/phortune/constants/PhortuneAccountEmailStatus.php
deleted file mode 100644
--- a/src/applications/phortune/constants/PhortuneAccountEmailStatus.php
+++ /dev/null
@@ -1,31 +0,0 @@
- array(
- 'name' => pht('Active'),
- 'closed' => false,
- ),
- self::STATUS_DISABLED => array(
- 'name' => pht('Disabled'),
- 'closed' => true,
- ),
- self::STATUS_UNSUBSCRIBED => array(
- 'name' => pht('Unsubscribed'),
- 'closed' => true,
- ),
- );
- }
-
-}
diff --git a/src/applications/phortune/constants/PhortuneConstants.php b/src/applications/phortune/constants/PhortuneConstants.php
deleted file mode 100644
--- a/src/applications/phortune/constants/PhortuneConstants.php
+++ /dev/null
@@ -1,3 +0,0 @@
-monthValue = $value;
- return $this;
- }
- private function getMonthInputValue() {
- return $this->monthValue;
- }
- private function getCurrentMonth() {
- return phabricator_format_local_time(
- time(),
- $this->getUser(),
- 'm');
- }
-
- public function setYearInputValue($value) {
- $this->yearValue = $value;
- return $this;
- }
- private function getYearInputValue() {
- return $this->yearValue;
- }
- private function getCurrentYear() {
- return phabricator_format_local_time(
- time(),
- $this->getUser(),
- 'Y');
- }
-
- protected function getCustomControlClass() {
- return 'aphront-form-control-text';
- }
-
- protected function renderInput() {
- if (!$this->getUser()) {
- throw new PhutilInvalidStateException('setUser');
- }
-
- // represent months like a credit card does
- $months = array(
- '01' => '01',
- '02' => '02',
- '03' => '03',
- '04' => '04',
- '05' => '05',
- '06' => '06',
- '07' => '07',
- '08' => '08',
- '09' => '09',
- '10' => '10',
- '11' => '11',
- '12' => '12',
- );
-
- $current_year = $this->getCurrentYear();
- $years = range($current_year, $current_year + 20);
- $years = array_fuse($years);
-
- if ($this->getMonthInputValue()) {
- $selected_month = $this->getMonthInputValue();
- } else {
- $selected_month = $this->getCurrentMonth();
- }
- $months_sel = AphrontFormSelectControl::renderSelectTag(
- $selected_month,
- $months,
- array(
- 'sigil' => 'month-input',
- ));
-
- $years_sel = AphrontFormSelectControl::renderSelectTag(
- $this->getYearInputValue(),
- $years,
- array(
- 'sigil' => 'year-input',
- ));
-
- return hsprintf('%s%s', $months_sel, $years_sel);
- }
-
-}
diff --git a/src/applications/phortune/controller/PhortuneController.php b/src/applications/phortune/controller/PhortuneController.php
deleted file mode 100644
--- a/src/applications/phortune/controller/PhortuneController.php
+++ /dev/null
@@ -1,51 +0,0 @@
-getRequest()->getUser();
-
- $provider_configs = id(new PhortunePaymentProviderConfigQuery())
- ->setViewer($viewer)
- ->withMerchantPHIDs(array($merchant->getPHID()))
- ->execute();
- $providers = mpull($provider_configs, 'buildProvider', 'getID');
-
- foreach ($providers as $key => $provider) {
- if (!$provider->isEnabled()) {
- unset($providers[$key]);
- }
- }
-
- return $providers;
- }
-
- protected function loadCreatePaymentMethodProvidersForMerchant(
- PhortuneMerchant $merchant) {
-
- $providers = $this->loadEnabledProvidersForMerchant($merchant);
- foreach ($providers as $key => $provider) {
- if (!$provider->canCreatePaymentMethods()) {
- unset($providers[$key]);
- continue;
- }
- }
-
- return $providers;
- }
-
- protected function loadOneTimePaymentProvidersForMerchant(
- PhortuneMerchant $merchant) {
-
- $providers = $this->loadEnabledProvidersForMerchant($merchant);
- foreach ($providers as $key => $provider) {
- if (!$provider->canProcessOneTimePayments()) {
- unset($providers[$key]);
- continue;
- }
- }
-
- return $providers;
- }
-
-}
diff --git a/src/applications/phortune/controller/PhortuneLandingController.php b/src/applications/phortune/controller/PhortuneLandingController.php
deleted file mode 100644
--- a/src/applications/phortune/controller/PhortuneLandingController.php
+++ /dev/null
@@ -1,22 +0,0 @@
-getViewer();
-
- $accounts = PhortuneAccountQuery::loadAccountsForUser(
- $viewer,
- PhabricatorContentSource::newFromRequest($request));
-
- if (count($accounts) == 1) {
- $account = head($accounts);
- $next_uri = $account->getURI();
- } else {
- $next_uri = $this->getApplicationURI('account/');
- }
-
- return id(new AphrontRedirectResponse())->setURI($next_uri);
- }
-
-}
diff --git a/src/applications/phortune/controller/account/PhortuneAccountAddManagerController.php b/src/applications/phortune/controller/account/PhortuneAccountAddManagerController.php
deleted file mode 100644
--- a/src/applications/phortune/controller/account/PhortuneAccountAddManagerController.php
+++ /dev/null
@@ -1,80 +0,0 @@
-getViewer();
- $account = $this->getAccount();
-
- $id = $account->getID();
-
- $v_managers = array();
- $e_managers = null;
- $account_uri = $this->getApplicationURI("/account/{$id}/managers/");
-
- if ($request->isFormPost()) {
- $xactions = array();
- $v_managers = $request->getArr('managerPHIDs');
- $type_edge = PhabricatorTransactions::TYPE_EDGE;
-
- $xactions[] = id(new PhortuneAccountTransaction())
- ->setTransactionType($type_edge)
- ->setMetadataValue(
- 'edge:type',
- PhortuneAccountHasMemberEdgeType::EDGECONST)
- ->setNewValue(
- array(
- '+' => array_fuse($v_managers),
- ));
-
- $editor = id(new PhortuneAccountEditor())
- ->setActor($viewer)
- ->setContentSourceFromRequest($request)
- ->setContinueOnNoEffect(true);
-
- try {
- $editor->applyTransactions($account, $xactions);
-
- return id(new AphrontRedirectResponse())->setURI($account_uri);
- } catch (PhabricatorApplicationTransactionValidationException $ex) {
- $validation_exception = $ex;
- $e_managers = $ex->getShortMessage($type_edge);
- }
- }
-
- $account_phid = $account->getPHID();
- $handles = $viewer->loadHandles(array($account_phid));
- $handle = $handles[$account_phid];
-
- $form = id(new AphrontFormView())
- ->setViewer($viewer)
- ->appendInstructions(
- pht(
- 'Choose one or more users to add as account managers. Managers '.
- 'have full control of the account.'))
- ->appendControl(
- id(new AphrontFormStaticControl())
- ->setLabel(pht('Payment Account'))
- ->setValue($handle->renderLink()))
- ->appendControl(
- id(new AphrontFormTokenizerControl())
- ->setDatasource(new PhabricatorPeopleDatasource())
- ->setLabel(pht('Add Managers'))
- ->setName('managerPHIDs')
- ->setValue($v_managers)
- ->setError($e_managers));
-
- return $this->newDialog()
- ->setTitle(pht('Add New Managers'))
- ->appendForm($form)
- ->setWidth(AphrontDialogView::WIDTH_FORM)
- ->addCancelButton($account_uri)
- ->addSubmitButton(pht('Add Managers'));
- }
-
-}
diff --git a/src/applications/phortune/controller/account/PhortuneAccountChargeListController.php b/src/applications/phortune/controller/account/PhortuneAccountChargeListController.php
deleted file mode 100644
--- a/src/applications/phortune/controller/account/PhortuneAccountChargeListController.php
+++ /dev/null
@@ -1,35 +0,0 @@
-getViewer();
- $account = $this->getAccount();
-
- return id(new PhortuneChargeSearchEngine())
- ->setAccount($account)
- ->setController($this)
- ->buildResponse();
- }
-
- protected function buildApplicationCrumbs() {
- $crumbs = parent::buildApplicationCrumbs();
-
- if ($this->hasAccount()) {
- $account = $this->getAccount();
- $id = $account->getID();
-
- $crumbs->addTextCrumb(
- pht('Charges'),
- $account->getChargesURI());
- }
-
- return $crumbs;
- }
-
-}
diff --git a/src/applications/phortune/controller/account/PhortuneAccountChargesController.php b/src/applications/phortune/controller/account/PhortuneAccountChargesController.php
deleted file mode 100644
--- a/src/applications/phortune/controller/account/PhortuneAccountChargesController.php
+++ /dev/null
@@ -1,70 +0,0 @@
-getAccount();
- $title = $account->getName();
-
- $crumbs = $this->buildApplicationCrumbs()
- ->addTextCrumb(pht('Orders'))
- ->setBorder(true);
-
- $header = $this->buildHeaderView();
- $authority = $this->newAccountAuthorityView();
- $charge_history = $this->buildChargeHistorySection($account);
-
- $view = id(new PHUITwoColumnView())
- ->setHeader($header)
- ->setFooter(
- array(
- $authority,
- $charge_history,
- ));
-
- $navigation = $this->buildSideNavView('charges');
-
- return $this->newPage()
- ->setTitle($title)
- ->setCrumbs($crumbs)
- ->setNavigation($navigation)
- ->appendChild($view);
- }
-
- private function buildChargeHistorySection(PhortuneAccount $account) {
- $viewer = $this->getViewer();
-
- $charges = id(new PhortuneChargeQuery())
- ->setViewer($viewer)
- ->withAccountPHIDs(array($account->getPHID()))
- ->needCarts(true)
- ->setLimit(100)
- ->execute();
-
- $charges_uri = $account->getChargeListURI();
-
- $table = id(new PhortuneChargeTableView())
- ->setUser($viewer)
- ->setCharges($charges);
-
- $header = id(new PHUIHeaderView())
- ->setHeader(pht('Recent Charges'))
- ->addActionLink(
- id(new PHUIButtonView())
- ->setTag('a')
- ->setIcon('fa-list')
- ->setHref($charges_uri)
- ->setText(pht('View All Charges')));
-
- return id(new PHUIObjectBoxView())
- ->setHeader($header)
- ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)
- ->setTable($table);
- }
-
-}
diff --git a/src/applications/phortune/controller/account/PhortuneAccountController.php b/src/applications/phortune/controller/account/PhortuneAccountController.php
deleted file mode 100644
--- a/src/applications/phortune/controller/account/PhortuneAccountController.php
+++ /dev/null
@@ -1,162 +0,0 @@
-shouldRequireAccountEditCapability()) {
- $response = $this->loadAccountForEdit();
- } else {
- $response = $this->loadAccountForView();
- }
-
- if ($response) {
- return $response;
- }
-
- return $this->handleAccountRequest($request);
- }
-
- abstract protected function shouldRequireAccountEditCapability();
- abstract protected function handleAccountRequest(AphrontRequest $request);
-
- final protected function hasAccount() {
- return (bool)$this->account;
- }
-
- final protected function getAccount() {
- if ($this->account === null) {
- throw new Exception(
- pht(
- 'Unable to "getAccount()" before loading or setting account '.
- 'context.'));
- }
-
- return $this->account;
- }
-
- protected function buildApplicationCrumbs() {
- $crumbs = parent::buildApplicationCrumbs();
-
- // If we hit a policy exception, we can make it here without finding
- // an account.
- if ($this->hasAccount()) {
- $account = $this->getAccount();
- $crumbs->addTextCrumb($account->getName(), $account->getURI());
- }
-
- return $crumbs;
- }
-
- private function loadAccountForEdit() {
- return $this->loadAccountWithCapabilities(
- array(
- PhabricatorPolicyCapability::CAN_VIEW,
- PhabricatorPolicyCapability::CAN_EDIT,
- ));
- }
-
- private function loadAccountForView() {
- return $this->loadAccountWithCapabilities(
- array(
- PhabricatorPolicyCapability::CAN_VIEW,
- ));
- }
-
- private function loadAccountWithCapabilities(array $capabilities) {
- $viewer = $this->getViewer();
- $request = $this->getRequest();
-
- $account_id = $request->getURIData('accountID');
- if (!$account_id) {
- throw new Exception(
- pht(
- 'Controller ("%s") extends controller "%s", but is reachable '.
- 'with no "accountID" in URI.',
- get_class($this),
- __CLASS__));
- }
-
- $account = id(new PhortuneAccountQuery())
- ->setViewer($viewer)
- ->withIDs(array($account_id))
- ->requireCapabilities($capabilities)
- ->executeOne();
- if (!$account) {
- return new Aphront404Response();
- }
-
- $this->setAccount($account);
-
- return null;
- }
-
- private function setAccount(PhortuneAccount $account) {
- $this->account = $account;
-
- $viewer = $this->getViewer();
- if (!$account->isUserAccountMember($viewer)) {
- $merchant_phids = $account->getMerchantPHIDs();
- $merchants = id(new PhortuneMerchantQuery())
- ->setViewer($viewer)
- ->withPHIDs($merchant_phids)
- ->withMemberPHIDs(array($viewer->getPHID()))
- ->requireCapabilities(
- array(
- PhabricatorPolicyCapability::CAN_VIEW,
- PhabricatorPolicyCapability::CAN_EDIT,
- ))
- ->execute();
-
- $this->merchants = $merchants;
- } else {
- $this->merchants = array();
- }
-
- return $this;
- }
-
- final protected function getMerchants() {
- if ($this->merchants === null) {
- throw new Exception(
- pht(
- 'Unable to "getMerchants()" before loading or setting account '.
- 'context.'));
- }
-
- return $this->merchants;
- }
-
- final protected function newAccountAuthorityView() {
- $viewer = $this->getViewer();
-
- $merchants = $this->getMerchants();
- if (!$merchants) {
- return null;
- }
-
- $merchant_phids = mpull($merchants, 'getPHID');
- $merchant_handles = $viewer->loadHandles($merchant_phids);
- $merchant_handles = iterator_to_array($merchant_handles);
-
- $merchant_list = mpull($merchant_handles, 'renderLink');
- $merchant_list = phutil_implode_html(', ', $merchant_list);
-
- $merchant_message = pht(
- 'You can view this account because you control %d merchant(s) it '.
- 'has a relationship with: %s.',
- phutil_count($merchants),
- $merchant_list);
-
- return id(new PHUIInfoView())
- ->setSeverity(PHUIInfoView::SEVERITY_NOTICE)
- ->setErrors(
- array(
- $merchant_message,
- ));
- }
-
-}
diff --git a/src/applications/phortune/controller/account/PhortuneAccountDetailsController.php b/src/applications/phortune/controller/account/PhortuneAccountDetailsController.php
deleted file mode 100644
--- a/src/applications/phortune/controller/account/PhortuneAccountDetailsController.php
+++ /dev/null
@@ -1,155 +0,0 @@
-getAccount();
- $title = $account->getName();
-
- $viewer = $this->getViewer();
-
- $invoices = id(new PhortuneCartQuery())
- ->setViewer($viewer)
- ->withAccountPHIDs(array($account->getPHID()))
- ->needPurchases(true)
- ->withInvoices(true)
- ->execute();
-
- $crumbs = $this->buildApplicationCrumbs();
- $crumbs->setBorder(true);
-
- $header = $this->buildHeaderView();
-
- $authority = $this->newAccountAuthorityView();
- $details = $this->newDetailsView($account);
-
- $curtain = $this->buildCurtainView($account);
-
- $timeline = $this->buildTransactionTimeline(
- $account,
- new PhortuneAccountTransactionQuery());
- $timeline->setShouldTerminate(true);
-
-
- $view = id(new PHUITwoColumnView())
- ->setHeader($header)
- ->setCurtain($curtain)
- ->setMainColumn(
- array(
- $authority,
- $details,
- $timeline,
- ));
-
- $navigation = $this->buildSideNavView('details');
-
- return $this->newPage()
- ->setTitle($title)
- ->setCrumbs($crumbs)
- ->setNavigation($navigation)
- ->appendChild($view);
-
- }
-
- private function buildCurtainView(PhortuneAccount $account) {
- $viewer = $this->getViewer();
-
- $can_edit = PhabricatorPolicyFilter::hasCapability(
- $viewer,
- $account,
- PhabricatorPolicyCapability::CAN_EDIT);
-
- $edit_uri = $this->getApplicationURI('account/edit/'.$account->getID().'/');
-
- $curtain = $this->newCurtainView($account);
- $curtain->addAction(
- id(new PhabricatorActionView())
- ->setName(pht('Edit Account'))
- ->setIcon('fa-pencil')
- ->setHref($edit_uri)
- ->setDisabled(!$can_edit)
- ->setWorkflow(!$can_edit));
-
- $member_phids = $account->getMemberPHIDs();
- $handles = $viewer->loadHandles($member_phids);
-
- $member_list = id(new PHUIObjectItemListView())
- ->setSimple(true);
-
- foreach ($member_phids as $member_phid) {
- $image_uri = $handles[$member_phid]->getImageURI();
- $image_href = $handles[$member_phid]->getURI();
- $person = $handles[$member_phid];
-
- $member = id(new PHUIObjectItemView())
- ->setImageURI($image_uri)
- ->setHref($image_href)
- ->setHeader($person->getFullName());
-
- $member_list->addItem($member);
- }
-
- $curtain->newPanel()
- ->setHeaderText(pht('Managers'))
- ->appendChild($member_list);
-
- $merchant_list = id(new PHUIObjectItemListView())
- ->setSimple(true)
- ->setNoDataString(pht('No purchase history.'));
-
- $merchant_phids = $account->getMerchantPHIDs();
- $handles = $viewer->loadHandles($merchant_phids);
-
- foreach ($merchant_phids as $merchant_phid) {
- $handle = $handles[$merchant_phid];
-
- $merchant = id(new PHUIObjectItemView())
- ->setImageURI($handle->getImageURI())
- ->setHref($handle->getURI())
- ->setHeader($handle->getFullName());
-
- $merchant_list->addItem($merchant);
- }
-
- $curtain->newPanel()
- ->setHeaderText(pht('Merchants'))
- ->appendChild($merchant_list);
-
- return $curtain;
- }
-
- private function newDetailsView(PhortuneAccount $account) {
- $viewer = $this->getViewer();
-
- $view = id(new PHUIPropertyListView())
- ->setUser($viewer);
-
- $view->addProperty(pht('Account Name'), $account->getName());
-
- $display_name = $account->getBillingName();
- if (!strlen($display_name)) {
- $display_name = phutil_tag('em', array(), pht('None'));
- }
-
- $display_address = $account->getBillingAddress();
- if (!strlen($display_address)) {
- $display_address = phutil_tag('em', array(), pht('None'));
- } else {
- $display_address = phutil_escape_html_newlines($display_address);
- }
-
- $view->addProperty(pht('Billing Name'), $display_name);
- $view->addProperty(pht('Billing Address'), $display_address);
-
- return id(new PHUIObjectBoxView())
- ->setHeaderText(pht('Account Details'))
- ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)
- ->addPropertyList($view);
- }
-
-}
diff --git a/src/applications/phortune/controller/account/PhortuneAccountEditController.php b/src/applications/phortune/controller/account/PhortuneAccountEditController.php
deleted file mode 100644
--- a/src/applications/phortune/controller/account/PhortuneAccountEditController.php
+++ /dev/null
@@ -1,11 +0,0 @@
-setController($this)
- ->buildResponse();
- }
-}
diff --git a/src/applications/phortune/controller/account/PhortuneAccountEmailAddressesController.php b/src/applications/phortune/controller/account/PhortuneAccountEmailAddressesController.php
deleted file mode 100644
--- a/src/applications/phortune/controller/account/PhortuneAccountEmailAddressesController.php
+++ /dev/null
@@ -1,92 +0,0 @@
-getAccount();
- $title = $account->getName();
-
- $crumbs = $this->buildApplicationCrumbs()
- ->addTextCrumb(pht('Email Addresses'))
- ->setBorder(true);
-
- $header = $this->buildHeaderView();
- $authority = $this->newAccountAuthorityView();
- $addresses = $this->buildAddressesSection($account);
-
- $view = id(new PHUITwoColumnView())
- ->setHeader($header)
- ->setFooter(
- array(
- $authority,
- $addresses,
- ));
-
- $navigation = $this->buildSideNavView('addresses');
-
- return $this->newPage()
- ->setTitle($title)
- ->setCrumbs($crumbs)
- ->setNavigation($navigation)
- ->appendChild($view);
- }
-
- private function buildAddressesSection(PhortuneAccount $account) {
- $viewer = $this->getViewer();
-
- $can_edit = PhabricatorPolicyFilter::hasCapability(
- $viewer,
- $account,
- PhabricatorPolicyCapability::CAN_EDIT);
-
- $id = $account->getID();
-
- $add = id(new PHUIButtonView())
- ->setTag('a')
- ->setText(pht('Add Address'))
- ->setIcon('fa-plus')
- ->setWorkflow(!$can_edit)
- ->setDisabled(!$can_edit)
- ->setHref("/phortune/account/{$id}/addresses/edit/");
-
- $header = id(new PHUIHeaderView())
- ->setHeader(pht('Billing Email Addresses'))
- ->addActionLink($add);
-
- $addresses = id(new PhortuneAccountEmailQuery())
- ->setViewer($viewer)
- ->withAccountPHIDs(array($account->getPHID()))
- ->execute();
-
- $list = id(new PHUIObjectItemListView())
- ->setUser($viewer)
- ->setNoDataString(
- pht(
- 'There are no billing email addresses associated '.
- 'with this account.'));
-
- $addresses = id(new PhortuneAccountEmailQuery())
- ->setViewer($viewer)
- ->withAccountPHIDs(array($account->getPHID()))
- ->execute();
- foreach ($addresses as $address) {
- $item = id(new PHUIObjectItemView())
- ->setObjectName($address->getObjectName())
- ->setHeader($address->getAddress())
- ->setHref($address->getURI());
-
- $list->addItem($item);
- }
-
- return id(new PHUIObjectBoxView())
- ->setHeader($header)
- ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)
- ->setObjectList($list);
- }
-
-}
diff --git a/src/applications/phortune/controller/account/PhortuneAccountEmailEditController.php b/src/applications/phortune/controller/account/PhortuneAccountEmailEditController.php
deleted file mode 100644
--- a/src/applications/phortune/controller/account/PhortuneAccountEmailEditController.php
+++ /dev/null
@@ -1,22 +0,0 @@
-getAccount();
-
- $engine = id(new PhortuneAccountEmailEditEngine())
- ->setController($this);
-
- if (!$request->getURIData('id')) {
- $engine->setAccount($account);
- }
-
- return $engine->buildResponse();
- }
-}
diff --git a/src/applications/phortune/controller/account/PhortuneAccountEmailRotateController.php b/src/applications/phortune/controller/account/PhortuneAccountEmailRotateController.php
deleted file mode 100644
--- a/src/applications/phortune/controller/account/PhortuneAccountEmailRotateController.php
+++ /dev/null
@@ -1,62 +0,0 @@
-getViewer();
- $account = $this->getAccount();
-
- $address = id(new PhortuneAccountEmailQuery())
- ->setViewer($viewer)
- ->withAccountPHIDs(array($account->getPHID()))
- ->withIDs(array($request->getURIData('addressID')))
- ->requireCapabilities(
- array(
- PhabricatorPolicyCapability::CAN_VIEW,
- PhabricatorPolicyCapability::CAN_EDIT,
- ))
- ->executeOne();
- if (!$address) {
- return new Aphront404Response();
- }
-
- $address_uri = $address->getURI();
-
- if ($request->isFormOrHisecPost()) {
- $xactions = array();
-
- $xactions[] = $address->getApplicationTransactionTemplate()
- ->setTransactionType(
- PhortuneAccountEmailRotateTransaction::TRANSACTIONTYPE)
- ->setNewValue(true);
-
- $address->getApplicationTransactionEditor()
- ->setActor($viewer)
- ->setContentSourceFromRequest($request)
- ->setContinueOnMissingFields(true)
- ->setContinueOnNoEffect(true)
- ->setCancelURI($address_uri)
- ->applyTransactions($address, $xactions);
-
- return id(new AphrontRedirectResponse())->setURI($address_uri);
- }
-
- return $this->newDialog()
- ->setTitle(pht('Rotate Access Key'))
- ->appendParagraph(
- pht(
- 'Rotate the access key for email address %s?',
- phutil_tag('strong', array(), $address->getAddress())))
- ->appendParagraph(
- pht(
- 'Existing access links which have been sent to this email address '.
- 'will stop working.'))
- ->addSubmitButton(pht('Rotate Access Key'))
- ->addCancelButton($address_uri);
- }
-}
diff --git a/src/applications/phortune/controller/account/PhortuneAccountEmailStatusController.php b/src/applications/phortune/controller/account/PhortuneAccountEmailStatusController.php
deleted file mode 100644
--- a/src/applications/phortune/controller/account/PhortuneAccountEmailStatusController.php
+++ /dev/null
@@ -1,137 +0,0 @@
-getViewer();
- $account = $this->getAccount();
-
- $address = id(new PhortuneAccountEmailQuery())
- ->setViewer($viewer)
- ->withAccountPHIDs(array($account->getPHID()))
- ->withIDs(array($request->getURIData('addressID')))
- ->requireCapabilities(
- array(
- PhabricatorPolicyCapability::CAN_VIEW,
- PhabricatorPolicyCapability::CAN_EDIT,
- ))
- ->executeOne();
- if (!$address) {
- return new Aphront404Response();
- }
-
- $address_uri = $address->getURI();
-
- $is_enable = false;
- $is_disable = false;
-
- $old_status = $address->getStatus();
- switch ($request->getURIData('action')) {
- case 'enable':
- if ($old_status === PhortuneAccountEmailStatus::STATUS_ACTIVE) {
- return $this->newDialog()
- ->setTitle(pht('Already Enabled'))
- ->appendParagraph(
- pht(
- 'You can not enable this address because it is already '.
- 'active.'))
- ->addCancelButton($address_uri);
- }
-
- if ($old_status === PhortuneAccountEmailStatus::STATUS_UNSUBSCRIBED) {
- return $this->newDialog()
- ->setTitle(pht('Permanently Unsubscribed'))
- ->appendParagraph(
- pht(
- 'You can not enable this address because it has been '.
- 'permanently unsubscribed.'))
- ->addCancelButton($address_uri);
- }
-
- $new_status = PhortuneAccountEmailStatus::STATUS_ACTIVE;
- $is_enable = true;
- break;
- case 'disable':
- if ($old_status === PhortuneAccountEmailStatus::STATUS_DISABLED) {
- return $this->newDialog()
- ->setTitle(pht('Already Disabled'))
- ->appendParagraph(
- pht(
- 'You can not disabled this address because it is already '.
- 'disabled.'))
- ->addCancelButton($address_uri);
- }
-
- if ($old_status === PhortuneAccountEmailStatus::STATUS_UNSUBSCRIBED) {
- return $this->newDialog()
- ->setTitle(pht('Permanently Unsubscribed'))
- ->appendParagraph(
- pht(
- 'You can not disable this address because it has been '.
- 'permanently unsubscribed.'))
- ->addCancelButton($address_uri);
- }
-
- $new_status = PhortuneAccountEmailStatus::STATUS_DISABLED;
- $is_disable = true;
- break;
- default:
- return new Aphront404Response();
- }
-
- if ($request->isFormOrHisecPost()) {
- $xactions = array();
-
- $xactions[] = $address->getApplicationTransactionTemplate()
- ->setTransactionType(
- PhortuneAccountEmailStatusTransaction::TRANSACTIONTYPE)
- ->setNewValue($new_status);
-
- $address->getApplicationTransactionEditor()
- ->setActor($viewer)
- ->setContentSourceFromRequest($request)
- ->setContinueOnMissingFields(true)
- ->setContinueOnNoEffect(true)
- ->setCancelURI($address_uri)
- ->applyTransactions($address, $xactions);
-
- return id(new AphrontRedirectResponse())->setURI($address_uri);
- }
-
- $dialog = $this->newDialog();
-
- $body = array();
-
- if ($is_disable) {
- $title = pht('Disable Address');
-
- $body[] = pht(
- 'This address will no longer receive email, and access links will '.
- 'no longer function.');
-
- $submit = pht('Disable Address');
- } else {
- $title = pht('Enable Address');
-
- $body[] = pht(
- 'This address will receive email again, and existing links '.
- 'to access order history will work again.');
-
- $submit = pht('Enable Address');
- }
-
- foreach ($body as $graph) {
- $dialog->appendParagraph($graph);
- }
-
- return $dialog
- ->setTitle($title)
- ->addCancelButton($address_uri)
- ->addSubmitButton($submit);
- }
-}
diff --git a/src/applications/phortune/controller/account/PhortuneAccountEmailViewController.php b/src/applications/phortune/controller/account/PhortuneAccountEmailViewController.php
deleted file mode 100644
--- a/src/applications/phortune/controller/account/PhortuneAccountEmailViewController.php
+++ /dev/null
@@ -1,176 +0,0 @@
-getViewer();
- $account = $this->getAccount();
-
- $address = id(new PhortuneAccountEmailQuery())
- ->setViewer($viewer)
- ->withAccountPHIDs(array($account->getPHID()))
- ->withIDs(array($request->getURIData('addressID')))
- ->executeOne();
- if (!$address) {
- return new Aphront404Response();
- }
-
- $crumbs = $this->buildApplicationCrumbs()
- ->addTextCrumb(pht('Email Addresses'), $account->getEmailAddressesURI())
- ->addTextCrumb($address->getObjectName())
- ->setBorder(true);
-
- $header = id(new PHUIHeaderView())
- ->setHeader(pht('Account Email: %s', $address->getAddress()));
-
- $details = $this->newDetailsView($address);
-
- $timeline = $this->buildTransactionTimeline(
- $address,
- new PhortuneAccountEmailTransactionQuery());
- $timeline->setShouldTerminate(true);
-
- $curtain = $this->buildCurtainView($address);
-
- $view = id(new PHUITwoColumnView())
- ->setHeader($header)
- ->setCurtain($curtain)
- ->setMainColumn(
- array(
- $details,
- $timeline,
- ));
-
- return $this->newPage()
- ->setTitle($address->getObjectName())
- ->setCrumbs($crumbs)
- ->appendChild($view);
- }
-
- private function buildCurtainView(PhortuneAccountEmail $address) {
- $viewer = $this->getViewer();
- $account = $address->getAccount();
-
- $can_edit = PhabricatorPolicyFilter::hasCapability(
- $viewer,
- $address,
- PhabricatorPolicyCapability::CAN_EDIT);
-
- $edit_uri = $this->getApplicationURI(
- urisprintf(
- 'account/%d/addresses/edit/%d/',
- $account->getID(),
- $address->getID()));
-
- if ($can_edit) {
- $external_uri = $address->getExternalURI();
- } else {
- $external_uri = null;
- }
-
- $curtain = $this->newCurtainView($account);
-
- $curtain->addAction(
- id(new PhabricatorActionView())
- ->setName(pht('Edit Address'))
- ->setIcon('fa-pencil')
- ->setHref($edit_uri)
- ->setDisabled(!$can_edit)
- ->setWorkflow(!$can_edit));
-
- switch ($address->getStatus()) {
- case PhortuneAccountEmailStatus::STATUS_ACTIVE:
- $disable_name = pht('Disable Address');
- $disable_icon = 'fa-times';
- $can_disable = true;
- $disable_action = 'disable';
- break;
- case PhortuneAccountEmailStatus::STATUS_DISABLED:
- $disable_name = pht('Enable Address');
- $disable_icon = 'fa-check';
- $can_disable = true;
- $disable_action = 'enable';
- break;
- case PhortuneAccountEmailStatus::STATUS_UNSUBSCRIBED:
- $disable_name = pht('Disable Address');
- $disable_icon = 'fa-times';
- $can_disable = false;
- $disable_action = 'disable';
- break;
- }
-
- $disable_uri = $this->getApplicationURI(
- urisprintf(
- 'account/%d/addresses/%d/%s/',
- $account->getID(),
- $address->getID(),
- $disable_action));
-
- $curtain->addAction(
- id(new PhabricatorActionView())
- ->setName($disable_name)
- ->setIcon($disable_icon)
- ->setHref($disable_uri)
- ->setDisabled(!$can_disable)
- ->setWorkflow(true));
-
- $rotate_uri = $this->getApplicationURI(
- urisprintf(
- 'account/%d/addresses/%d/rotate/',
- $account->getID(),
- $address->getID()));
-
- $curtain->addAction(
- id(new PhabricatorActionView())
- ->setName(pht('Rotate Access Key'))
- ->setIcon('fa-refresh')
- ->setHref($rotate_uri)
- ->setDisabled(!$can_edit)
- ->setWorkflow(true));
-
- $curtain->addAction(
- id(new PhabricatorActionView())
- ->setName(pht('Show External View'))
- ->setIcon('fa-eye')
- ->setHref($external_uri)
- ->setDisabled(!$can_edit)
- ->setOpenInNewWindow(true));
-
- return $curtain;
- }
-
- private function newDetailsView(PhortuneAccountEmail $address) {
- $viewer = $this->getViewer();
-
- $view = id(new PHUIPropertyListView())
- ->setUser($viewer);
-
- $access_key = $address->getAccessKey();
-
- // This is not a meaningful security barrier: the full plaintext of the
- // access key is visible on the page in the link target of the "Show
- // External View" action. It's just here to make it clear "Rotate Access
- // Key" actually does something.
-
- $prefix_length = 4;
- $visible_part = substr($access_key, 0, $prefix_length);
- $masked_part = str_repeat(
- "\xE2\x80\xA2",
- strlen($access_key) - $prefix_length);
- $access_display = $visible_part.$masked_part;
- $access_display = phutil_tag('tt', array(), $access_display);
-
- $view->addProperty(pht('Email Address'), $address->getAddress());
- $view->addProperty(pht('Access Key'), $access_display);
-
- return id(new PHUIObjectBoxView())
- ->setHeaderText(pht('Email Address Details'))
- ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)
- ->addPropertyList($view);
- }
-}
diff --git a/src/applications/phortune/controller/account/PhortuneAccountListController.php b/src/applications/phortune/controller/account/PhortuneAccountListController.php
deleted file mode 100644
--- a/src/applications/phortune/controller/account/PhortuneAccountListController.php
+++ /dev/null
@@ -1,111 +0,0 @@
-getViewer();
-
- $accounts = id(new PhortuneAccountQuery())
- ->setViewer($viewer)
- ->withMemberPHIDs(array($viewer->getPHID()))
- ->requireCapabilities(
- array(
- PhabricatorPolicyCapability::CAN_VIEW,
- PhabricatorPolicyCapability::CAN_EDIT,
- ))
- ->execute();
-
- $merchants = id(new PhortuneMerchantQuery())
- ->setViewer($viewer)
- ->withMemberPHIDs(array($viewer->getPHID()))
- ->needProfileImage(true)
- ->execute();
-
- $title = pht('Accounts');
-
- $crumbs = $this->buildApplicationCrumbs();
- $crumbs->addTextCrumb(pht('Accounts'));
- $crumbs->setBorder(true);
-
- $payment_list = id(new PHUIObjectItemListView())
- ->setUser($viewer)
- ->setNoDataString(
- pht(
- 'You are not a member of any payment accounts. Payment '.
- 'accounts are used to make purchases.'));
-
- foreach ($accounts as $account) {
- $item = id(new PHUIObjectItemView())
- ->setSubhead(pht('Account %d', $account->getID()))
- ->setHeader($account->getName())
- ->setHref($account->getURI())
- ->setObject($account)
- ->setImageIcon('fa-user-circle');
-
- $payment_list->addItem($item);
- }
-
- $payment_header = id(new PHUIHeaderView())
- ->setHeader(pht('Payment Accounts'))
- ->addActionLink(
- id(new PHUIButtonView())
- ->setTag('a')
- ->setHref($this->getApplicationURI('account/edit/'))
- ->setIcon('fa-plus')
- ->setText(pht('Create Account')));
-
- $payment_box = id(new PHUIObjectBoxView())
- ->setHeader($payment_header)
- ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)
- ->setObjectList($payment_list);
-
- $merchant_list = id(new PHUIObjectItemListView())
- ->setUser($viewer)
- ->setNoDataString(
- pht(
- 'You do not control any merchant accounts. Merchant accounts are '.
- 'used to receive payments.'));
-
- foreach ($merchants as $merchant) {
- $item = id(new PHUIObjectItemView())
- ->setSubhead(pht('Merchant %d', $merchant->getID()))
- ->setHeader($merchant->getName())
- ->setHref($this->getApplicationURI('/merchant/'.$merchant->getID().'/'))
- ->setObject($merchant)
- ->setImageURI($merchant->getProfileImageURI());
-
- $merchant_list->addItem($item);
- }
-
- $merchant_header = id(new PHUIHeaderView())
- ->setHeader(pht('Merchant Accounts'))
- ->addActionLink(
- id(new PHUIButtonView())
- ->setTag('a')
- ->setHref($this->getApplicationURI('merchant/'))
- ->setIcon('fa-list')
- ->setText(pht('View All Merchants')));
-
- $merchant_box = id(new PHUIObjectBoxView())
- ->setHeader($merchant_header)
- ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)
- ->setObjectList($merchant_list);
-
- $header = id(new PHUIHeaderView())
- ->setHeader(pht('Accounts'));
-
- $view = id(new PHUITwoColumnView())
- ->setHeader($header)
- ->setFooter(array(
- $payment_box,
- $merchant_box,
- ));
-
- return $this->newPage()
- ->setTitle($title)
- ->setCrumbs($crumbs)
- ->appendChild($view);
-
- }
-
-}
diff --git a/src/applications/phortune/controller/account/PhortuneAccountManagersController.php b/src/applications/phortune/controller/account/PhortuneAccountManagersController.php
deleted file mode 100644
--- a/src/applications/phortune/controller/account/PhortuneAccountManagersController.php
+++ /dev/null
@@ -1,88 +0,0 @@
-getAccount();
- $title = $account->getName();
-
- $crumbs = $this->buildApplicationCrumbs()
- ->addTextCrumb(pht('Managers'))
- ->setBorder(true);
-
- $header = $this->buildHeaderView();
- $authority = $this->newAccountAuthorityView();
- $members = $this->buildMembersSection($account);
-
- $view = id(new PHUITwoColumnView())
- ->setHeader($header)
- ->setFooter(
- array(
- $authority,
- $members,
- ));
-
- $navigation = $this->buildSideNavView('managers');
-
- return $this->newPage()
- ->setTitle($title)
- ->setCrumbs($crumbs)
- ->setNavigation($navigation)
- ->appendChild($view);
-
- }
-
- private function buildMembersSection(PhortuneAccount $account) {
- $viewer = $this->getViewer();
-
- $can_edit = PhabricatorPolicyFilter::hasCapability(
- $viewer,
- $account,
- PhabricatorPolicyCapability::CAN_EDIT);
-
- $id = $account->getID();
-
- $add = id(new PHUIButtonView())
- ->setTag('a')
- ->setText(pht('Add Managers'))
- ->setIcon('fa-plus')
- ->setWorkflow(true)
- ->setDisabled(!$can_edit)
- ->setHref("/phortune/account/{$id}/managers/add/");
-
- $header = id(new PHUIHeaderView())
- ->setHeader(pht('Account Managers'))
- ->addActionLink($add);
-
- $list = id(new PHUIObjectItemListView())
- ->setUser($viewer);
-
- $member_phids = $account->getMemberPHIDs();
- $handles = $viewer->loadHandles($member_phids);
-
- foreach ($member_phids as $member_phid) {
- $image_uri = $handles[$member_phid]->getImageURI();
- $image_href = $handles[$member_phid]->getURI();
- $person = $handles[$member_phid];
-
- $member = id(new PHUIObjectItemView())
- ->setImageURI($image_uri)
- ->setHref($image_href)
- ->setHeader($person->getFullName())
- ->addAttribute(pht('Account Manager'));
-
- $list->addItem($member);
- }
-
- return id(new PHUIObjectBoxView())
- ->setHeader($header)
- ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)
- ->setObjectList($list);
- }
-
-}
diff --git a/src/applications/phortune/controller/account/PhortuneAccountOrderListController.php b/src/applications/phortune/controller/account/PhortuneAccountOrderListController.php
deleted file mode 100644
--- a/src/applications/phortune/controller/account/PhortuneAccountOrderListController.php
+++ /dev/null
@@ -1,55 +0,0 @@
-getViewer();
- $account = $this->getAccount();
-
- $engine = id(new PhortuneCartSearchEngine())
- ->setController($this)
- ->setAccount($account);
-
- $subscription_id = $request->getURIData('subscriptionID');
- if ($subscription_id) {
- $subscription = id(new PhortuneSubscriptionQuery())
- ->setViewer($viewer)
- ->withIDs(array($subscription_id))
- ->executeOne();
- if (!$subscription) {
- return new Aphront404Response();
- }
-
- $engine->setSubscription($subscription);
- $this->subscription = $subscription;
- }
-
- return $engine->buildResponse();
- }
-
- protected function buildApplicationCrumbs() {
- $crumbs = parent::buildApplicationCrumbs();
-
- $subscription = $this->subscription;
- if ($subscription) {
- $crumbs->addTextCrumb(
- $subscription->getObjectName(),
- $subscription->getURI());
- } else if ($this->hasAccount()) {
- $account = $this->getAccount();
-
- $crumbs->addTextCrumb(pht('Orders'), $account->getOrdersURI());
- }
-
- return $crumbs;
- }
-
-
-}
diff --git a/src/applications/phortune/controller/account/PhortuneAccountOrdersController.php b/src/applications/phortune/controller/account/PhortuneAccountOrdersController.php
deleted file mode 100644
--- a/src/applications/phortune/controller/account/PhortuneAccountOrdersController.php
+++ /dev/null
@@ -1,40 +0,0 @@
-getAccount();
- $title = $account->getName();
-
- $crumbs = $this->buildApplicationCrumbs()
- ->addTextCrumb(pht('Orders'))
- ->setBorder(true);
-
- $header = $this->buildHeaderView();
- $authority = $this->newAccountAuthorityView();
-
- $order_history = $this->newRecentOrdersView($account, 100);
-
- $view = id(new PHUITwoColumnView())
- ->setHeader($header)
- ->setFooter(
- array(
- $authority,
- $order_history,
- ));
-
- $navigation = $this->buildSideNavView('orders');
-
- return $this->newPage()
- ->setTitle($title)
- ->setCrumbs($crumbs)
- ->setNavigation($navigation)
- ->appendChild($view);
- }
-
-}
diff --git a/src/applications/phortune/controller/account/PhortuneAccountOverviewController.php b/src/applications/phortune/controller/account/PhortuneAccountOverviewController.php
deleted file mode 100644
--- a/src/applications/phortune/controller/account/PhortuneAccountOverviewController.php
+++ /dev/null
@@ -1,126 +0,0 @@
-getAccount();
- $title = $account->getName();
-
- $viewer = $this->getViewer();
-
- $invoices = id(new PhortuneCartQuery())
- ->setViewer($viewer)
- ->withAccountPHIDs(array($account->getPHID()))
- ->needPurchases(true)
- ->withInvoices(true)
- ->execute();
-
- $crumbs = $this->buildApplicationCrumbs();
- $crumbs->setBorder(true);
-
- $header = $this->buildHeaderView();
-
- $authority = $this->newAccountAuthorityView();
- $status = $this->buildStatusView($account, $invoices);
- $invoices = $this->buildInvoicesSection($account, $invoices);
- $purchase_history = $this->newRecentOrdersView($account, 10);
-
- $view = id(new PHUITwoColumnView())
- ->setHeader($header)
- ->setFooter(
- array(
- $authority,
- $status,
- $invoices,
- $purchase_history,
- ));
-
- $navigation = $this->buildSideNavView('overview');
-
- return $this->newPage()
- ->setTitle($title)
- ->setCrumbs($crumbs)
- ->setNavigation($navigation)
- ->appendChild($view);
- }
-
- private function buildStatusView(PhortuneAccount $account, $invoices) {
- $status_items = $this->getStatusItemsForAccount($account, $invoices);
- $view = array();
- foreach ($status_items as $item) {
- $view[] = id(new PHUIInfoView())
- ->setSeverity(idx($item, 'severity'))
- ->appendChild(idx($item, 'note'));
- }
- return $view;
- }
-
- private function buildInvoicesSection(
- PhortuneAccount $account,
- array $carts) {
-
- $viewer = $this->getViewer();
-
- $table = id(new PhortuneOrderTableView())
- ->setNoDataString(pht('You have no unpaid invoices.'))
- ->setIsInvoices(true)
- ->setUser($viewer)
- ->setCarts($carts);
-
- $header = id(new PHUIHeaderView())
- ->setHeader(pht('Invoices Due'));
-
- return id(new PHUIObjectBoxView())
- ->setHeader($header)
- ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)
- ->setTable($table);
- }
-
- protected function buildApplicationCrumbs() {
- $crumbs = parent::buildApplicationCrumbs();
-
- $crumbs->addAction(
- id(new PHUIListItemView())
- ->setIcon('fa-exchange')
- ->setHref($this->getApplicationURI('account/'))
- ->setName(pht('Switch Accounts')));
-
- return $crumbs;
- }
-
- private function getStatusItemsForAccount(
- PhortuneAccount $account,
- array $invoices) {
- $viewer = $this->getViewer();
-
- assert_instances_of($invoices, 'PhortuneCart');
- $items = array();
-
- $methods = id(new PhortunePaymentMethodQuery())
- ->setViewer($viewer)
- ->withAccountPHIDs(array($account->getPHID()))
- ->withStatuses(
- array(
- PhortunePaymentMethod::STATUS_ACTIVE,
- ))
- ->execute();
-
- if ($invoices) {
- $items[] = array(
- 'severity' => PHUIInfoView::SEVERITY_ERROR,
- 'note' => pht('You have %d unpaid invoice(s).', count($invoices)),
- );
- }
-
- // TODO: If a payment method has expired or is expiring soon, we should
- // add a status check for it.
-
- return $items;
- }
-
-}
diff --git a/src/applications/phortune/controller/account/PhortuneAccountPaymentMethodController.php b/src/applications/phortune/controller/account/PhortuneAccountPaymentMethodController.php
deleted file mode 100644
--- a/src/applications/phortune/controller/account/PhortuneAccountPaymentMethodController.php
+++ /dev/null
@@ -1,96 +0,0 @@
-getAccount();
- $title = $account->getName();
-
- $crumbs = $this->buildApplicationCrumbs()
- ->addTextCrumb(pht('Payment Methods'))
- ->setBorder(true);
-
- $authority = $this->newAccountAuthorityView();
- $header = $this->buildHeaderView();
- $methods = $this->buildPaymentMethodsSection($account);
-
- $view = id(new PHUITwoColumnView())
- ->setHeader($header)
- ->setFooter(
- array(
- $authority,
- $methods,
- ));
-
- $navigation = $this->buildSideNavView('methods');
-
- return $this->newPage()
- ->setTitle($title)
- ->setCrumbs($crumbs)
- ->setNavigation($navigation)
- ->appendChild($view);
- }
-
- private function buildPaymentMethodsSection(PhortuneAccount $account) {
- $viewer = $this->getViewer();
-
- $can_edit = PhabricatorPolicyFilter::hasCapability(
- $viewer,
- $account,
- PhabricatorPolicyCapability::CAN_EDIT);
-
- $id = $account->getID();
-
- $add = id(new PHUIButtonView())
- ->setTag('a')
- ->setText(pht('Add Payment Method'))
- ->setIcon('fa-plus')
- ->setHref($this->getApplicationURI("account/{$id}/methods/new/"))
- ->setDisabled(!$can_edit)
- ->setWorkflow(!$can_edit);
-
- $header = id(new PHUIHeaderView())
- ->setHeader(pht('Payment Methods'))
- ->addActionLink($add);
-
- $list = id(new PHUIObjectItemListView())
- ->setUser($viewer)
- ->setFlush(true)
- ->setNoDataString(
- pht('There are no payment methods associated with this account.'));
-
- $methods = id(new PhortunePaymentMethodQuery())
- ->setViewer($viewer)
- ->withAccountPHIDs(array($account->getPHID()))
- ->withStatuses(
- array(
- PhortunePaymentMethod::STATUS_ACTIVE,
- ))
- ->execute();
-
- foreach ($methods as $method) {
- $id = $method->getID();
-
- $item = id(new PHUIObjectItemView())
- ->setObjectName($method->getObjectName())
- ->setHeader($method->getFullDisplayName())
- ->setHref($method->getURI());
-
- $provider = $method->buildPaymentProvider();
- $item->addAttribute($provider->getPaymentMethodProviderDescription());
-
- $list->addItem($item);
- }
-
- return id(new PHUIObjectBoxView())
- ->setHeader($header)
- ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)
- ->setObjectList($list);
- }
-
-}
diff --git a/src/applications/phortune/controller/account/PhortuneAccountPaymentMethodViewController.php b/src/applications/phortune/controller/account/PhortuneAccountPaymentMethodViewController.php
deleted file mode 100644
--- a/src/applications/phortune/controller/account/PhortuneAccountPaymentMethodViewController.php
+++ /dev/null
@@ -1,154 +0,0 @@
-getViewer();
- $account = $this->getAccount();
-
- $method = id(new PhortunePaymentMethodQuery())
- ->setViewer($viewer)
- ->withAccountPHIDs(array($account->getPHID()))
- ->withIDs(array($request->getURIData('id')))
- ->withStatuses(
- array(
- PhortunePaymentMethod::STATUS_ACTIVE,
- ))
- ->executeOne();
- if (!$method) {
- return new Aphront404Response();
- }
-
- $crumbs = $this->buildApplicationCrumbs()
- ->addTextCrumb(pht('Payment Methods'), $account->getPaymentMethodsURI())
- ->addTextCrumb($method->getObjectName())
- ->setBorder(true);
-
- $header = id(new PHUIHeaderView())
- ->setHeader($method->getFullDisplayName());
-
- $details = $this->newDetailsView($method);
-
- $timeline = $this->buildTransactionTimeline(
- $method,
- new PhortunePaymentMethodTransactionQuery());
- $timeline->setShouldTerminate(true);
-
- $autopay = $this->newAutopayView($method);
-
- $curtain = $this->buildCurtainView($method);
-
- $view = id(new PHUITwoColumnView())
- ->setHeader($header)
- ->setCurtain($curtain)
- ->setMainColumn(
- array(
- $details,
- $autopay,
- $timeline,
- ));
-
- return $this->newPage()
- ->setTitle($method->getObjectName())
- ->setCrumbs($crumbs)
- ->appendChild($view);
- }
-
- private function buildCurtainView(PhortunePaymentMethod $method) {
- $viewer = $this->getViewer();
-
- $can_edit = PhabricatorPolicyFilter::hasCapability(
- $viewer,
- $method,
- PhabricatorPolicyCapability::CAN_EDIT);
-
- $edit_uri = $this->getApplicationURI(
- urisprintf(
- 'card/%d/edit/',
- $method->getID()));
-
- $remove_uri = $this->getApplicationURI(
- urisprintf(
- 'card/%d/disable/',
- $method->getID()));
-
- $curtain = $this->newCurtainView($method);
-
- $curtain->addAction(
- id(new PhabricatorActionView())
- ->setName(pht('Edit Payment Method'))
- ->setIcon('fa-pencil')
- ->setHref($edit_uri)
- ->setDisabled(!$can_edit)
- ->setWorkflow(!$can_edit));
-
- $curtain->addAction(
- id(new PhabricatorActionView())
- ->setName(pht('Remove Payment Method'))
- ->setIcon('fa-times')
- ->setHref($remove_uri)
- ->setDisabled(!$can_edit)
- ->setWorkflow(true));
-
- return $curtain;
- }
-
- private function newDetailsView(PhortunePaymentMethod $method) {
- $viewer = $this->getViewer();
-
- $merchant_phid = $method->getMerchantPHID();
- $handles = $viewer->loadHandles(
- array(
- $merchant_phid,
- ));
-
- $view = id(new PHUIPropertyListView())
- ->setUser($viewer);
-
- if (strlen($method->getName())) {
- $view->addProperty(pht('Name'), $method->getDisplayName());
- }
-
- $view->addProperty(pht('Summary'), $method->getSummary());
- $view->addProperty(pht('Expires'), $method->getDisplayExpires());
-
- $view->addProperty(
- pht('Merchant'),
- $handles[$merchant_phid]->renderLink());
-
- return id(new PHUIObjectBoxView())
- ->setHeaderText(pht('Payment Method Details'))
- ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)
- ->addPropertyList($view);
- }
-
- private function newAutopayView(PhortunePaymentMethod $method) {
- $viewer = $this->getViewer();
-
- $subscriptions = id(new PhortuneSubscriptionQuery())
- ->setViewer($viewer)
- ->withPaymentMethodPHIDs(array($method->getPHID()))
- ->execute();
-
- $table = id(new PhortuneSubscriptionTableView())
- ->setViewer($viewer)
- ->setSubscriptions($subscriptions)
- ->newTableView();
-
- $table->setNoDataString(
- pht(
- 'This payment method is not the default payment method for '.
- 'any subscriptions.'));
-
- return id(new PHUIObjectBoxView())
- ->setHeaderText(pht('Autopay Subscriptions'))
- ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)
- ->setTable($table);
- }
-
-}
diff --git a/src/applications/phortune/controller/account/PhortuneAccountProfileController.php b/src/applications/phortune/controller/account/PhortuneAccountProfileController.php
deleted file mode 100644
--- a/src/applications/phortune/controller/account/PhortuneAccountProfileController.php
+++ /dev/null
@@ -1,142 +0,0 @@
-getViewer();
- $account = $this->getAccount();
- $title = $account->getName();
-
- $header = id(new PHUIHeaderView())
- ->setUser($viewer)
- ->setHeader($title)
- ->setHeaderIcon('fa-user-circle');
-
- if ($this->getMerchants()) {
- $customer_tag = id(new PHUITagView())
- ->setType(PHUITagView::TYPE_SHADE)
- ->setName(pht('Customer Account'))
- ->setColor('indigo')
- ->setIcon('fa-credit-card');
- $header->addTag($customer_tag);
- }
-
- return $header;
- }
-
- protected function buildSideNavView($filter = null) {
- $viewer = $this->getViewer();
- $account = $this->getAccount();
- $id = $account->getID();
-
- $can_edit = !$this->getMerchants();
-
- $nav = id(new AphrontSideNavFilterView())
- ->setBaseURI(new PhutilURI($this->getApplicationURI()));
-
- $nav->addLabel(pht('Account'));
-
- $nav->addFilter(
- 'overview',
- pht('Overview'),
- $account->getURI(),
- 'fa-user-circle');
-
- $nav->newLink('details')
- ->setName(pht('Account Details'))
- ->setHref($this->getApplicationURI("/account/{$id}/details/"))
- ->setIcon('fa-address-card-o')
- ->setWorkflow(!$can_edit)
- ->setDisabled(!$can_edit);
-
- $nav->addLabel(pht('Payments'));
-
- $nav->addFilter(
- 'methods',
- pht('Payment Methods'),
- $account->getPaymentMethodsURI(),
- 'fa-credit-card');
-
- $nav->addFilter(
- 'subscriptions',
- pht('Subscriptions'),
- $account->getSubscriptionsURI(),
- 'fa-retweet');
-
- $nav->addFilter(
- 'orders',
- pht('Orders'),
- $account->getOrdersURI(),
- 'fa-shopping-bag');
-
- $nav->addFilter(
- 'charges',
- pht('Charges'),
- $account->getChargesURI(),
- 'fa-calculator');
-
- $nav->addLabel(pht('Personnel'));
-
- $nav->addFilter(
- 'managers',
- pht('Account Managers'),
- $this->getApplicationURI("/account/{$id}/managers/"),
- 'fa-group');
-
- $nav->newLink('addresses')
- ->setname(pht('Email Addresses'))
- ->setHref($account->getEmailAddressesURI())
- ->setIcon('fa-envelope-o')
- ->setWorkflow(!$can_edit)
- ->setDisabled(!$can_edit);
-
- $nav->selectFilter($filter);
-
- return $nav;
- }
-
- final protected function newRecentOrdersView(
- PhortuneAccount $account,
- $limit) {
-
- $viewer = $this->getViewer();
-
- $carts = id(new PhortuneCartQuery())
- ->setViewer($viewer)
- ->withAccountPHIDs(array($account->getPHID()))
- ->needPurchases(true)
- ->withStatuses(
- array(
- PhortuneCart::STATUS_PURCHASING,
- PhortuneCart::STATUS_CHARGED,
- PhortuneCart::STATUS_HOLD,
- PhortuneCart::STATUS_REVIEW,
- PhortuneCart::STATUS_PURCHASED,
- ))
- ->setLimit($limit)
- ->execute();
-
- $orders_uri = $account->getOrderListURI();
-
- $table = id(new PhortuneOrderTableView())
- ->setUser($viewer)
- ->setCarts($carts);
-
- $header = id(new PHUIHeaderView())
- ->setHeader(pht('Recent Orders'))
- ->addActionLink(
- id(new PHUIButtonView())
- ->setTag('a')
- ->setIcon('fa-list')
- ->setHref($orders_uri)
- ->setText(pht('View All Orders')));
-
- return id(new PHUIObjectBoxView())
- ->setHeader($header)
- ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)
- ->setTable($table);
- }
-
-
-}
diff --git a/src/applications/phortune/controller/account/PhortuneAccountSubscriptionAutopayController.php b/src/applications/phortune/controller/account/PhortuneAccountSubscriptionAutopayController.php
deleted file mode 100644
--- a/src/applications/phortune/controller/account/PhortuneAccountSubscriptionAutopayController.php
+++ /dev/null
@@ -1,137 +0,0 @@
-getViewer();
- $account = $this->getAccount();
-
- $subscription = id(new PhortuneSubscriptionQuery())
- ->setViewer($viewer)
- ->withIDs(array($request->getURIData('subscriptionID')))
- ->withAccountPHIDs(array($account->getPHID()))
- ->requireCapabilities(
- array(
- PhabricatorPolicyCapability::CAN_VIEW,
- PhabricatorPolicyCapability::CAN_EDIT,
- ))
- ->executeOne();
- if (!$subscription) {
- return new Aphront404Response();
- }
-
- $method = id(new PhortunePaymentMethodQuery())
- ->setViewer($viewer)
- ->withIDs(array($request->getURIData('methodID')))
- ->withAccountPHIDs(array($subscription->getAccountPHID()))
- ->withMerchantPHIDs(array($subscription->getMerchantPHID()))
- ->withStatuses(
- array(
- PhortunePaymentMethod::STATUS_ACTIVE,
- ))
- ->executeOne();
- if (!$method) {
- return new Aphront404Response();
- }
-
- $next_uri = $subscription->getURI();
-
- $autopay_phid = $subscription->getDefaultPaymentMethodPHID();
- $is_stop = ($autopay_phid === $method->getPHID());
-
- if ($request->isFormOrHisecPost()) {
- if ($is_stop) {
- $new_phid = null;
- } else {
- $new_phid = $method->getPHID();
- }
-
- $xactions = array();
-
- $xactions[] = $subscription->getApplicationTransactionTemplate()
- ->setTransactionType(
- PhortuneSubscriptionAutopayTransaction::TRANSACTIONTYPE)
- ->setNewValue($new_phid);
-
- $editor = $subscription->getApplicationTransactionEditor()
- ->setActor($viewer)
- ->setContentSourceFromRequest($request)
- ->setContinueOnNoEffect(true)
- ->setContinueOnMissingFields(true)
- ->setCancelURI($next_uri);
-
- $editor->applyTransactions($subscription, $xactions);
-
- return id(new AphrontRedirectResponse())->setURI($next_uri);
- }
-
- $method_phid = $method->getPHID();
- $subscription_phid = $subscription->getPHID();
-
- $handles = $viewer->loadHandles(
- array(
- $method_phid,
- $subscription_phid,
- ));
-
- $method_handle = $handles[$method_phid];
- $subscription_handle = $handles[$subscription_phid];
-
- $method_display = $method_handle->renderLink();
- $method_display = phutil_tag(
- 'strong',
- array(),
- $method_display);
-
- $subscription_display = $subscription_handle->renderLink();
- $subscription_display = phutil_tag(
- 'strong',
- array(),
- $subscription_display);
-
- $body = array();
- if ($is_stop) {
- $title = pht('Stop Autopay');
-
- $body[] = pht(
- 'Remove %s as the automatic payment method for subscription %s?',
- $method_display,
- $subscription_display);
-
- $body[] = pht(
- 'This payment method will no longer be charged automatically.');
-
- $submit = pht('Stop Autopay');
- } else {
- $title = pht('Start Autopay');
-
- $body[] = pht(
- 'Set %s as the automatic payment method for subscription %s?',
- $method_display,
- $subscription_display);
-
- $body[] = pht(
- 'This payment method will be used to automatically pay future '.
- 'charges.');
-
- $submit = pht('Start Autopay');
- }
-
- $dialog = $this->newDialog()
- ->setTitle($title)
- ->addCancelButton($next_uri)
- ->addSubmitButton($submit);
-
- foreach ($body as $graph) {
- $dialog->appendParagraph($graph);
- }
-
- return $dialog;
- }
-
-}
diff --git a/src/applications/phortune/controller/account/PhortuneAccountSubscriptionController.php b/src/applications/phortune/controller/account/PhortuneAccountSubscriptionController.php
deleted file mode 100644
--- a/src/applications/phortune/controller/account/PhortuneAccountSubscriptionController.php
+++ /dev/null
@@ -1,63 +0,0 @@
-getAccount();
- $title = $account->getName();
-
- $crumbs = $this->buildApplicationCrumbs()
- ->addTextCrumb(pht('Subscriptions'))
- ->setBorder(true);
-
- $header = $this->buildHeaderView();
- $authority = $this->newAccountAuthorityView();
-
- $subscriptions = $this->buildSubscriptionsSection($account);
-
- $view = id(new PHUITwoColumnView())
- ->setHeader($header)
- ->setFooter(
- array(
- $authority,
- $subscriptions,
- ));
-
- $navigation = $this->buildSideNavView('subscriptions');
-
- return $this->newPage()
- ->setTitle($title)
- ->setCrumbs($crumbs)
- ->setNavigation($navigation)
- ->appendChild($view);
-
- }
-
- private function buildSubscriptionsSection(PhortuneAccount $account) {
- $viewer = $this->getViewer();
-
- $subscriptions = id(new PhortuneSubscriptionQuery())
- ->setViewer($viewer)
- ->withAccountPHIDs(array($account->getPHID()))
- ->setLimit(25)
- ->execute();
-
- $table = id(new PhortuneSubscriptionTableView())
- ->setUser($viewer)
- ->setSubscriptions($subscriptions);
-
- $header = id(new PHUIHeaderView())
- ->setHeader(pht('Subscriptions'));
-
- return id(new PHUIObjectBoxView())
- ->setHeader($header)
- ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)
- ->setTable($table);
- }
-
-}
diff --git a/src/applications/phortune/controller/account/PhortuneAccountSubscriptionViewController.php b/src/applications/phortune/controller/account/PhortuneAccountSubscriptionViewController.php
deleted file mode 100644
--- a/src/applications/phortune/controller/account/PhortuneAccountSubscriptionViewController.php
+++ /dev/null
@@ -1,317 +0,0 @@
-getViewer();
-
- $subscription = id(new PhortuneSubscriptionQuery())
- ->setViewer($viewer)
- ->withIDs(array($request->getURIData('subscriptionID')))
- ->needTriggers(true)
- ->executeOne();
- if (!$subscription) {
- return new Aphront404Response();
- }
-
- $can_edit = PhabricatorPolicyFilter::hasCapability(
- $viewer,
- $subscription,
- PhabricatorPolicyCapability::CAN_EDIT);
-
- $merchant = $subscription->getMerchant();
- $account = $subscription->getAccount();
-
- $account_id = $account->getID();
- $subscription_id = $subscription->getID();
-
- $title = $subscription->getSubscriptionFullName();
-
- $header = id(new PHUIHeaderView())
- ->setHeader($title)
- ->setHeaderIcon('fa-retweet');
-
- $edit_uri = $subscription->getEditURI();
-
- $crumbs = $this->buildApplicationCrumbs()
- ->addTextCrumb($subscription->getSubscriptionCrumbName())
- ->setBorder(true);
-
- $properties = id(new PHUIPropertyListView())
- ->setUser($viewer);
-
- $next_invoice = $subscription->getTrigger()->getNextEventPrediction();
- $properties->addProperty(
- pht('Next Invoice'),
- phabricator_datetime($next_invoice, $viewer));
-
- $autopay = $this->newAutopayView($subscription);
-
- $details = id(new PHUIObjectBoxView())
- ->setHeaderText(pht('Subscription Details'))
- ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)
- ->addPropertyList($properties);
-
- $due_box = $this->buildDueInvoices($subscription);
- $invoice_box = $this->buildPastInvoices($subscription);
-
- $timeline = $this->buildTransactionTimeline(
- $subscription,
- new PhortuneSubscriptionTransactionQuery());
- $timeline->setShouldTerminate(true);
-
- $view = id(new PHUITwoColumnView())
- ->setHeader($header)
- ->setFooter(
- array(
- $details,
- $autopay,
- $due_box,
- $invoice_box,
- $timeline,
- ));
-
- return $this->newPage()
- ->setTitle($title)
- ->setCrumbs($crumbs)
- ->appendChild($view);
- }
-
- private function buildDueInvoices(PhortuneSubscription $subscription) {
- $viewer = $this->getViewer();
-
- $invoices = id(new PhortuneCartQuery())
- ->setViewer($viewer)
- ->withSubscriptionPHIDs(array($subscription->getPHID()))
- ->needPurchases(true)
- ->withInvoices(true)
- ->execute();
-
- $invoice_table = id(new PhortuneOrderTableView())
- ->setUser($viewer)
- ->setCarts($invoices)
- ->setIsInvoices(true);
-
- $invoice_header = id(new PHUIHeaderView())
- ->setHeader(pht('Invoices Due'));
-
- return id(new PHUIObjectBoxView())
- ->setHeader($invoice_header)
- ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)
- ->appendChild($invoice_table);
- }
-
- private function buildPastInvoices(PhortuneSubscription $subscription) {
- $viewer = $this->getViewer();
-
- $invoices = id(new PhortuneCartQuery())
- ->setViewer($viewer)
- ->withSubscriptionPHIDs(array($subscription->getPHID()))
- ->needPurchases(true)
- ->withStatuses(
- array(
- PhortuneCart::STATUS_PURCHASING,
- PhortuneCart::STATUS_CHARGED,
- PhortuneCart::STATUS_HOLD,
- PhortuneCart::STATUS_REVIEW,
- PhortuneCart::STATUS_PURCHASED,
- ))
- ->setLimit(50)
- ->execute();
-
- $invoice_table = id(new PhortuneOrderTableView())
- ->setUser($viewer)
- ->setCarts($invoices);
-
- $account = $subscription->getAccount();
- $merchant = $subscription->getMerchant();
-
- $account_id = $account->getID();
- $merchant_id = $merchant->getID();
- $subscription_id = $subscription->getID();
-
- $invoices_uri = $this->getApplicationURI(
- "{$account_id}/subscription/order/{$subscription_id}/");
-
- $invoice_header = id(new PHUIHeaderView())
- ->setHeader(pht('Past Invoices'))
- ->addActionLink(
- id(new PHUIButtonView())
- ->setTag('a')
- ->setIcon('fa-list')
- ->setHref($invoices_uri)
- ->setText(pht('View All Invoices')));
-
- return id(new PHUIObjectBoxView())
- ->setHeader($invoice_header)
- ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)
- ->appendChild($invoice_table);
- }
-
- private function newAutopayView(PhortuneSubscription $subscription) {
- $viewer = $this->getViewer();
- $account = $subscription->getAccount();
-
- $add_method_uri = urisprintf(
- '/account/%d/methods/new/?subscriptionID=%s',
- $account->getID(),
- $subscription->getID());
- $add_method_uri = $this->getApplicationURI($add_method_uri);
-
- $can_edit = PhabricatorPolicyFilter::hasCapability(
- $viewer,
- $subscription,
- PhabricatorPolicyCapability::CAN_EDIT);
-
- $methods = id(new PhortunePaymentMethodQuery())
- ->setViewer($viewer)
- ->withAccountPHIDs(array($subscription->getAccountPHID()))
- ->withMerchantPHIDs(array($subscription->getMerchantPHID()))
- ->withStatuses(
- array(
- PhortunePaymentMethod::STATUS_ACTIVE,
- ))
- ->execute();
- $methods = mpull($methods, null, 'getPHID');
-
- $autopay_phid = $subscription->getDefaultPaymentMethodPHID();
- $autopay_method = idx($methods, $autopay_phid);
-
- $header = id(new PHUIHeaderView())
- ->setHeader(pht('Autopay'))
- ->addActionLink(
- id(new PHUIButtonView())
- ->setTag('a')
- ->setIcon('fa-plus')
- ->setHref($add_method_uri)
- ->setText(pht('Add Payment Method'))
- ->setWorkflow(!$can_edit)
- ->setDisabled(!$can_edit));
-
- $methods = array_select_keys($methods, array($autopay_phid)) + $methods;
-
- $rows = array();
- $rowc = array();
- foreach ($methods as $method) {
- $is_autopay = ($autopay_method === $method);
-
- $remove_uri = urisprintf(
- '/card/%d/disable/?subscriptionID=%d',
- $method->getID(),
- $subscription->getID());
- $remove_uri = $this->getApplicationURI($remove_uri);
-
- $autopay_uri = urisprintf(
- '/account/%d/subscriptions/%d/autopay/%d/',
- $account->getID(),
- $subscription->getID(),
- $method->getID());
- $autopay_uri = $this->getApplicationURI($autopay_uri);
-
- $remove_button = id(new PHUIButtonView())
- ->setTag('a')
- ->setColor('grey')
- ->setIcon('fa-times')
- ->setText(pht('Delete'))
- ->setHref($remove_uri)
- ->setWorkflow(true)
- ->setDisabled(!$can_edit);
-
- if ($is_autopay) {
- $autopay_button = id(new PHUIButtonView())
- ->setColor('red')
- ->setIcon('fa-times')
- ->setText(pht('Stop Autopay'));
- } else {
- if ($autopay_method) {
- $make_color = 'grey';
- } else {
- $make_color = 'green';
- }
-
- $autopay_button = id(new PHUIButtonView())
- ->setColor($make_color)
- ->setIcon('fa-retweet')
- ->setText(pht('Start Autopay'));
- }
-
- $autopay_button
- ->setTag('a')
- ->setHref($autopay_uri)
- ->setWorkflow(true)
- ->setDisabled(!$can_edit);
-
- $rows[] = array(
- $method->getID(),
- phutil_tag(
- 'a',
- array(
- 'href' => $method->getURI(),
- ),
- $method->getFullDisplayName()),
- $method->getDisplayExpires(),
- $autopay_button,
- $remove_button,
- );
-
- if ($is_autopay) {
- $rowc[] = 'highlighted';
- } else {
- $rowc[] = null;
- }
- }
-
- $method_table = id(new AphrontTableView($rows))
- ->setHeaders(
- array(
- pht('ID'),
- pht('Payment Method'),
- pht('Expires'),
- null,
- null,
- ))
- ->setRowClasses($rowc)
- ->setColumnClasses(
- array(
- null,
- 'pri wide',
- null,
- 'right',
- null,
- ));
-
- if (!$autopay_method) {
- $method_table->setNotice(
- array(
- id(new PHUIIconView())->setIcon('fa-warning yellow'),
- ' ',
- pht('Autopay is not currently configured for this subscription.'),
- ));
- } else {
- $method_table->setNotice(
- array(
- id(new PHUIIconView())->setIcon('fa-check green'),
- ' ',
- pht(
- 'Autopay is configured using %s.',
- phutil_tag(
- 'a',
- array(
- 'href' => $autopay_method->getURI(),
- ),
- $autopay_method->getFullDisplayName())),
- ));
- }
-
- return id(new PHUIObjectBoxView())
- ->setHeader($header)
- ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)
- ->setTable($method_table);
- }
-
-}
diff --git a/src/applications/phortune/controller/cart/PhortuneCartAcceptController.php b/src/applications/phortune/controller/cart/PhortuneCartAcceptController.php
deleted file mode 100644
--- a/src/applications/phortune/controller/cart/PhortuneCartAcceptController.php
+++ /dev/null
@@ -1,44 +0,0 @@
-getViewer();
- $cart = $this->getCart();
-
- $cancel_uri = $cart->getDetailURI();
-
- if ($cart->getStatus() !== PhortuneCart::STATUS_REVIEW) {
- return $this->newDialog()
- ->setTitle(pht('Order Not in Review'))
- ->appendParagraph(
- pht(
- 'This order does not need manual review, so you can not '.
- 'accept it.'))
- ->addCancelButton($cancel_uri);
- }
-
- if ($request->isFormPost()) {
- $cart->didReviewCart();
- return id(new AphrontRedirectResponse())->setURI($cancel_uri);
- }
-
- return $this->newDialog()
- ->setTitle(pht('Accept Order?'))
- ->appendParagraph(
- pht(
- 'This order has been flagged for manual review. You should review '.
- 'it carefully before accepting it.'))
- ->addCancelButton($cancel_uri)
- ->addSubmitButton(pht('Accept Order'));
- }
-}
diff --git a/src/applications/phortune/controller/cart/PhortuneCartCancelController.php b/src/applications/phortune/controller/cart/PhortuneCartCancelController.php
deleted file mode 100644
--- a/src/applications/phortune/controller/cart/PhortuneCartCancelController.php
+++ /dev/null
@@ -1,201 +0,0 @@
-getViewer();
- $id = $request->getURIData('id');
- $action = $request->getURIData('action');
-
- $cart = $this->getCart();
- $authority = $this->getMerchantAuthority();
-
- switch ($action) {
- case 'cancel':
- // You must be able to edit the account to cancel an order.
- PhabricatorPolicyFilter::requireCapability(
- $viewer,
- $cart->getAccount(),
- PhabricatorPolicyCapability::CAN_EDIT);
- $is_refund = false;
- break;
- case 'refund':
- // You must be able to control the merchant to refund an order.
- PhabricatorPolicyFilter::requireCapability(
- $viewer,
- $cart->getMerchant(),
- PhabricatorPolicyCapability::CAN_EDIT);
- $is_refund = true;
- break;
- default:
- return new Aphront404Response();
- }
-
- $cancel_uri = $cart->getDetailURI();
- $merchant = $cart->getMerchant();
-
- try {
- if ($is_refund) {
- $title = pht('Unable to Refund Order');
- $cart->assertCanRefundOrder();
- } else {
- $title = pht('Unable to Cancel Order');
- $cart->assertCanCancelOrder();
- }
- } catch (Exception $ex) {
- return $this->newDialog()
- ->setTitle($title)
- ->appendChild($ex->getMessage())
- ->addCancelButton($cancel_uri, pht('Rats'));
- }
-
- $charges = id(new PhortuneChargeQuery())
- ->setViewer($viewer)
- ->withCartPHIDs(array($cart->getPHID()))
- ->withStatuses(
- array(
- PhortuneCharge::STATUS_HOLD,
- PhortuneCharge::STATUS_CHARGED,
- ))
- ->execute();
-
- $amounts = mpull($charges, 'getAmountAsCurrency');
- $maximum = PhortuneCurrency::newFromList($amounts);
- $v_refund = $maximum->formatForDisplay();
-
- $errors = array();
- $e_refund = true;
- if ($request->isFormPost()) {
- if ($is_refund) {
- try {
- $refund = PhortuneCurrency::newFromUserInput(
- $viewer,
- $request->getStr('refund'));
- $refund->assertInRange('0.00 USD', $maximum->formatForDisplay());
- } catch (Exception $ex) {
- $errors[] = $ex->getMessage();
- $e_refund = pht('Invalid');
- }
- } else {
- $refund = $maximum;
- }
-
- if (!$errors) {
- $charges = msort($charges, 'getID');
- $charges = array_reverse($charges);
-
- if ($charges) {
- $providers = id(new PhortunePaymentProviderConfigQuery())
- ->setViewer($viewer)
- ->withPHIDs(mpull($charges, 'getProviderPHID'))
- ->execute();
- $providers = mpull($providers, null, 'getPHID');
- } else {
- $providers = array();
- }
-
- foreach ($charges as $charge) {
- $refundable = $charge->getAmountRefundableAsCurrency();
- if (!$refundable->isPositive()) {
- // This charge is a refund, or has already been fully refunded.
- continue;
- }
-
- if ($refund->isGreaterThan($refundable)) {
- $refund_amount = $refundable;
- } else {
- $refund_amount = $refund;
- }
-
- $provider_config = idx($providers, $charge->getProviderPHID());
- if (!$provider_config) {
- throw new Exception(pht('Unable to load provider for charge!'));
- }
-
- $provider = $provider_config->buildProvider();
-
- $refund_charge = $cart->willRefundCharge(
- $viewer,
- $provider,
- $charge,
- $refund_amount);
-
- $refunded = false;
- try {
- $provider->refundCharge($charge, $refund_charge);
- $refunded = true;
- } catch (Exception $ex) {
- phlog($ex);
- $cart->didFailRefund($charge, $refund_charge);
- }
-
- if ($refunded) {
- $cart->didRefundCharge($charge, $refund_charge);
- $refund = $refund->subtract($refund_amount);
- }
-
- if (!$refund->isPositive()) {
- break;
- }
- }
-
- if ($refund->isPositive()) {
- throw new Exception(pht('Unable to refund some charges!'));
- }
-
- // TODO: If every HOLD and CHARGING transaction has been fully refunded
- // and we're in a HOLD, REVIEW, PURCHASING or CHARGED cart state we
- // probably need to kick the cart back to READY here (or maybe kill
- // it if it was in REVIEW)?
-
- return id(new AphrontRedirectResponse())->setURI($cancel_uri);
- }
- }
-
- if ($is_refund) {
- $title = pht('Refund Order?');
- $body = pht('Really refund this order?');
- $button = pht('Refund Order');
- $cancel_text = pht('Cancel');
-
- $form = id(new AphrontFormView())
- ->setUser($viewer)
- ->appendChild(
- id(new AphrontFormTextControl())
- ->setName('refund')
- ->setLabel(pht('Amount'))
- ->setError($e_refund)
- ->setValue($v_refund));
-
- $form = $form->buildLayoutView();
-
- } else {
- $title = pht('Cancel Order?');
- $body = pht('Really cancel this order? Any payment will be refunded.');
- $button = pht('Cancel Order');
-
- // Don't give the user a "Cancel" button in response to a "Cancel?"
- // prompt, as it's confusing.
- $cancel_text = pht('Do Not Cancel Order');
-
- $form = null;
- }
-
- return $this->newDialog()
- ->setTitle($title)
- ->setErrors($errors)
- ->appendChild($body)
- ->appendChild($form)
- ->addSubmitButton($button)
- ->addCancelButton($cancel_uri, $cancel_text);
- }
-}
diff --git a/src/applications/phortune/controller/cart/PhortuneCartCheckoutController.php b/src/applications/phortune/controller/cart/PhortuneCartCheckoutController.php
deleted file mode 100644
--- a/src/applications/phortune/controller/cart/PhortuneCartCheckoutController.php
+++ /dev/null
@@ -1,234 +0,0 @@
-getViewer();
- $cart = $this->getCart();
-
- $cancel_uri = $cart->getCancelURI();
- $merchant = $cart->getMerchant();
-
- switch ($cart->getStatus()) {
- case PhortuneCart::STATUS_BUILDING:
- return $this->newDialog()
- ->setTitle(pht('Incomplete Cart'))
- ->appendParagraph(
- pht(
- 'The application that created this cart did not finish putting '.
- 'products in it. You can not checkout with an incomplete '.
- 'cart.'))
- ->addCancelButton($cancel_uri);
- case PhortuneCart::STATUS_READY:
- // This is the expected, normal state for a cart that's ready for
- // checkout.
- break;
- case PhortuneCart::STATUS_CHARGED:
- case PhortuneCart::STATUS_PURCHASING:
- case PhortuneCart::STATUS_HOLD:
- case PhortuneCart::STATUS_REVIEW:
- case PhortuneCart::STATUS_PURCHASED:
- // For these states, kick the user to the order page to give them
- // information and options.
- return id(new AphrontRedirectResponse())->setURI($cart->getDetailURI());
- default:
- throw new Exception(
- pht(
- 'Unknown cart status "%s"!',
- $cart->getStatus()));
- }
-
- $account = $cart->getAccount();
- $account_uri = $this->getApplicationURI($account->getID().'/');
-
- $methods = id(new PhortunePaymentMethodQuery())
- ->setViewer($viewer)
- ->withAccountPHIDs(array($account->getPHID()))
- ->withMerchantPHIDs(array($merchant->getPHID()))
- ->withStatuses(array(PhortunePaymentMethod::STATUS_ACTIVE))
- ->execute();
-
- $e_method = null;
- $errors = array();
-
- if ($request->isFormPost()) {
-
- // Require CAN_EDIT on the cart to actually make purchases.
-
- PhabricatorPolicyFilter::requireCapability(
- $viewer,
- $cart,
- PhabricatorPolicyCapability::CAN_EDIT);
-
- $method_id = $request->getInt('paymentMethodID');
- $method = idx($methods, $method_id);
- if (!$method) {
- $e_method = pht('Required');
- $errors[] = pht('You must choose a payment method.');
- }
-
- if (!$errors) {
- $provider = $method->buildPaymentProvider();
-
- $charge = $cart->willApplyCharge($viewer, $provider, $method);
-
- try {
- $provider->applyCharge($method, $charge);
- } catch (Exception $ex) {
- $cart->didFailCharge($charge);
- return $this->newDialog()
- ->setTitle(pht('Charge Failed'))
- ->appendParagraph(
- pht(
- 'Unable to make payment: %s',
- $ex->getMessage()))
- ->addCancelButton($cart->getCheckoutURI(), pht('Continue'));
- }
-
- $cart->didApplyCharge($charge);
-
- $done_uri = $cart->getCheckoutURI();
- return id(new AphrontRedirectResponse())->setURI($done_uri);
- }
- }
-
- $cart_box = id(new PhortuneOrderItemsView())
- ->setViewer($viewer)
- ->setOrder($cart);
-
- $title = $cart->getName();
-
- if (!$methods) {
- $method_control = id(new AphrontFormStaticControl())
- ->setLabel(pht('Payment Method'))
- ->setValue(
- phutil_tag('em', array(), pht('No payment methods configured.')));
- } else {
- $method_control = id(new AphrontFormRadioButtonControl())
- ->setLabel(pht('Payment Method'))
- ->setName('paymentMethodID')
- ->setValue($request->getInt('paymentMethodID'));
- foreach ($methods as $method) {
- $method_control->addButton(
- $method->getID(),
- $method->getFullDisplayName(),
- $method->getDescription());
- }
- }
-
- $method_control->setError($e_method);
-
- $account_id = $account->getID();
-
- $params = array(
- 'merchantID' => $merchant->getID(),
- 'cartID' => $cart->getID(),
- );
-
- $payment_method_uri = urisprintf(
- 'account/%d/methods/new/',
- $account->getID());
- $payment_method_uri = $this->getApplicationURI($payment_method_uri);
- $payment_method_uri = new PhutilURI($payment_method_uri, $params);
-
- $form = id(new AphrontFormView())
- ->setUser($viewer)
- ->appendChild($method_control);
-
- $add_providers = $this->loadCreatePaymentMethodProvidersForMerchant(
- $merchant);
- if ($add_providers) {
- $new_method = javelin_tag(
- 'a',
- array(
- 'class' => 'button button-grey',
- 'href' => $payment_method_uri,
- ),
- pht('Add New Payment Method'));
- $form->appendChild(
- id(new AphrontFormMarkupControl())
- ->setValue($new_method));
- }
-
- if ($methods || $add_providers) {
- $submit = id(new AphrontFormSubmitControl())
- ->setValue(pht('Submit Payment'))
- ->setDisabled(!$methods);
-
- if ($cart->getCancelURI() !== null) {
- $submit->addCancelButton($cart->getCancelURI());
- }
-
- $form->appendChild($submit);
- }
-
- $provider_form = null;
-
- $pay_providers = $this->loadOneTimePaymentProvidersForMerchant($merchant);
- if ($pay_providers) {
- $one_time_options = array();
- foreach ($pay_providers as $provider) {
- $one_time_options[] = $provider->renderOneTimePaymentButton(
- $account,
- $cart,
- $viewer);
- }
-
- $one_time_options = phutil_tag(
- 'div',
- array(
- 'class' => 'phortune-payment-onetime-list',
- ),
- $one_time_options);
-
- $provider_form = new PHUIFormLayoutView();
- $provider_form->appendChild(
- id(new AphrontFormMarkupControl())
- ->setLabel(pht('Pay With'))
- ->setValue($one_time_options));
- }
-
- $payment_box = id(new PHUIObjectBoxView())
- ->setHeaderText(pht('Choose Payment Method'))
- ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)
- ->appendChild($form)
- ->appendChild($provider_form);
-
- $description_view = id(new PhortuneOrderDescriptionView())
- ->setViewer($viewer)
- ->setOrder($cart);
-
- $crumbs = $this->buildApplicationCrumbs();
- $crumbs->addTextCrumb(pht('Checkout'));
- $crumbs->addTextCrumb($title);
- $crumbs->setBorder(true);
-
- $header = id(new PHUIHeaderView())
- ->setHeader($title)
- ->setHeaderIcon('fa-shopping-cart');
-
- $view = id(new PHUITwoColumnView())
- ->setHeader($header)
- ->setFooter(
- array(
- $description_view,
- $cart_box,
- $payment_box,
- ));
-
- return $this->newPage()
- ->setTitle($title)
- ->setCrumbs($crumbs)
- ->appendChild($view);
-
- }
-}
diff --git a/src/applications/phortune/controller/cart/PhortuneCartController.php b/src/applications/phortune/controller/cart/PhortuneCartController.php
deleted file mode 100644
--- a/src/applications/phortune/controller/cart/PhortuneCartController.php
+++ /dev/null
@@ -1,77 +0,0 @@
-getViewer();
-
- if ($this->shouldRequireAccountAuthority()) {
- $capabilities = array(
- PhabricatorPolicyCapability::CAN_VIEW,
- PhabricatorPolicyCapability::CAN_EDIT,
- );
- } else {
- $capabilities = array(
- PhabricatorPolicyCapability::CAN_VIEW,
- );
- }
-
- $cart = id(new PhortuneCartQuery())
- ->setViewer($viewer)
- ->withIDs(array($request->getURIData('id')))
- ->needPurchases(true)
- ->requireCapabilities($capabilities)
- ->executeOne();
- if (!$cart) {
- return new Aphront404Response();
- }
-
- if ($this->shouldRequireMerchantAuthority()) {
- PhabricatorPolicyFilter::requireCapability(
- $viewer,
- $cart->getMerchant(),
- PhabricatorPolicyCapability::CAN_EDIT);
- }
-
- $this->cart = $cart;
-
- $can_edit = PhortuneMerchantQuery::canViewersEditMerchants(
- array($viewer->getPHID()),
- array($cart->getMerchantPHID()));
- if ($can_edit) {
- $this->merchantAuthority = $cart->getMerchant();
- } else {
- $this->merchantAuthority = null;
- }
-
- return $this->handleCartRequest($request);
- }
-
- final protected function getCart() {
- return $this->cart;
- }
-
- final protected function getMerchantAuthority() {
- return $this->merchantAuthority;
- }
-
- final protected function hasMerchantAuthority() {
- return (bool)$this->merchantAuthority;
- }
-
- final protected function hasAccountAuthority() {
- return (bool)PhabricatorPolicyFilter::hasCapability(
- $this->getViewer(),
- $this->getCart(),
- PhabricatorPolicyCapability::CAN_EDIT);
- }
-
-}
diff --git a/src/applications/phortune/controller/cart/PhortuneCartUpdateController.php b/src/applications/phortune/controller/cart/PhortuneCartUpdateController.php
deleted file mode 100644
--- a/src/applications/phortune/controller/cart/PhortuneCartUpdateController.php
+++ /dev/null
@@ -1,61 +0,0 @@
-getViewer();
- $id = $request->getURIData('id');
-
- $cart = $this->getCart();
- $authority = $this->getMerchantAuthority();
-
- $charges = id(new PhortuneChargeQuery())
- ->setViewer($viewer)
- ->withCartPHIDs(array($cart->getPHID()))
- ->needCarts(true)
- ->withStatuses(
- array(
- PhortuneCharge::STATUS_HOLD,
- PhortuneCharge::STATUS_CHARGED,
- ))
- ->execute();
-
- if ($charges) {
- $providers = id(new PhortunePaymentProviderConfigQuery())
- ->setViewer($viewer)
- ->withPHIDs(mpull($charges, 'getProviderPHID'))
- ->execute();
- $providers = mpull($providers, null, 'getPHID');
- } else {
- $providers = array();
- }
-
- foreach ($charges as $charge) {
- if ($charge->isRefund()) {
- // Don't update refunds.
- continue;
- }
-
- $provider_config = idx($providers, $charge->getProviderPHID());
- if (!$provider_config) {
- throw new Exception(pht('Unable to load provider for charge!'));
- }
-
- $provider = $provider_config->buildProvider();
- $provider->updateCharge($charge);
- }
-
- return id(new AphrontRedirectResponse())
- ->setURI($cart->getDetailURI());
- }
-
-}
diff --git a/src/applications/phortune/controller/cart/PhortuneCartViewController.php b/src/applications/phortune/controller/cart/PhortuneCartViewController.php
deleted file mode 100644
--- a/src/applications/phortune/controller/cart/PhortuneCartViewController.php
+++ /dev/null
@@ -1,213 +0,0 @@
-getViewer();
- $order = $this->getCart();
- $authority = $this->getMerchantAuthority();
- $can_edit = $this->hasAccountAuthority();
-
- $is_printable = ($request->getURIData('action') === 'print');
-
- $resume_uri = null;
- if ($order->getStatus() === PhortuneCart::STATUS_PURCHASING) {
- if ($can_edit) {
- $resume_uri = $order->getMetadataValue('provider.checkoutURI');
- }
- }
-
- $header = id(new PHUIHeaderView())
- ->setUser($viewer)
- ->setHeader($order->getName())
- ->setHeaderIcon('fa-shopping-bag');
-
- if ($order->getStatus() == PhortuneCart::STATUS_PURCHASED) {
- $done_uri = $order->getDoneURI();
- if ($done_uri) {
- $header->addActionLink(
- id(new PHUIButtonView())
- ->setTag('a')
- ->setHref($done_uri)
- ->setIcon('fa-check-square green')
- ->setText($order->getDoneActionName()));
- }
- }
-
- $order_view = id(new PhortuneOrderSummaryView())
- ->setViewer($viewer)
- ->setOrder($order)
- ->setResumeURI($resume_uri)
- ->setPrintable($is_printable);
-
- $crumbs = null;
- $curtain = null;
-
- $main = array();
- $tail = array();
-
- require_celerity_resource('phortune-invoice-css');
-
- if ($is_printable) {
- $body_class = 'phortune-invoice-view';
-
- $tail[] = $order_view;
- } else {
- $body_class = 'phortune-cart-page';
-
- $curtain = $this->buildCurtainView(
- $order,
- $can_edit,
- $authority,
- $resume_uri);
-
- $account = $order->getAccount();
- $crumbs = $this->buildApplicationCrumbs()
- ->addTextCrumb($account->getName(), $account->getURI())
- ->addTextCrumb(pht('Orders'), $account->getOrdersURI())
- ->addTextCrumb($order->getObjectName())
- ->setBorder(true);
-
- $timeline = $this->buildTransactionTimeline($order)
- ->setShouldTerminate(true);
-
- $main[] = $order_view;
- $main[] = $timeline;
- }
-
- $column_view = id(new PHUITwoColumnView())
- ->setMainColumn($main)
- ->setFooter($tail);
-
- if ($curtain) {
- $column_view->setCurtain($curtain);
- }
-
- $page = $this->newPage()
- ->addClass($body_class)
- ->setTitle(
- array(
- $order->getObjectName(),
- $order->getName(),
- ))
- ->appendChild($column_view);
-
- if ($crumbs) {
- $page->setCrumbs($crumbs);
- }
-
- return $page;
- }
-
- private function buildCurtainView(
- PhortuneCart $cart,
- $can_edit,
- $authority,
- $resume_uri) {
-
- $viewer = $this->getViewer();
- $id = $cart->getID();
- $curtain = $this->newCurtainView($cart);
- $status = $cart->getStatus();
-
- $is_ready = ($status === PhortuneCart::STATUS_READY);
-
- $can_cancel = ($can_edit && $cart->canCancelOrder());
- $can_checkout = ($can_edit && $is_ready);
- $can_accept = ($status === PhortuneCart::STATUS_REVIEW);
- $can_refund = ($authority && $cart->canRefundOrder());
- $can_void = ($authority && $cart->canVoidOrder());
-
- $cancel_uri = $this->getApplicationURI("cart/{$id}/cancel/");
- $refund_uri = $this->getApplicationURI("cart/{$id}/refund/");
- $update_uri = $this->getApplicationURI("cart/{$id}/update/");
- $accept_uri = $this->getApplicationURI("cart/{$id}/accept/");
- $print_uri = $this->getApplicationURI("cart/{$id}/print/");
- $checkout_uri = $cart->getCheckoutURI();
- $void_uri = $this->getApplicationURI("cart/{$id}/void/");
-
-
- $curtain->addAction(
- id(new PhabricatorActionView())
- ->setName(pht('Printable Version'))
- ->setHref($print_uri)
- ->setOpenInNewWindow(true)
- ->setIcon('fa-print'));
-
- $curtain->addAction(
- id(new PhabricatorActionView())
- ->setType(PhabricatorActionView::TYPE_DIVIDER));
-
- $curtain->addAction(
- id(new PhabricatorActionView())
- ->setName(pht('Pay Now'))
- ->setIcon('fa-credit-card')
- ->setDisabled(!$can_checkout)
- ->setWorkflow(!$can_checkout)
- ->setHref($checkout_uri));
-
- $curtain->addAction(
- id(new PhabricatorActionView())
- ->setName(pht('Cancel Order'))
- ->setIcon('fa-times')
- ->setDisabled(!$can_cancel)
- ->setWorkflow(true)
- ->setHref($cancel_uri));
-
- $curtain->addAction(
- id(new PhabricatorActionView())
- ->setName(pht('Update Status'))
- ->setIcon('fa-refresh')
- ->setHref($update_uri));
-
- if ($can_edit && $resume_uri) {
- $curtain->addAction(
- id(new PhabricatorActionView())
- ->setName(pht('Continue Checkout'))
- ->setIcon('fa-shopping-bag')
- ->setHref($resume_uri));
- }
-
- if ($authority) {
- $curtain->addAction(
- id(new PhabricatorActionView())
- ->setType(PhabricatorActionView::TYPE_DIVIDER));
-
- $curtain->addAction(
- id(new PhabricatorActionView())
- ->setName(pht('Accept Order'))
- ->setIcon('fa-check')
- ->setWorkflow(true)
- ->setDisabled(!$can_accept)
- ->setHref($accept_uri));
-
- $curtain->addAction(
- id(new PhabricatorActionView())
- ->setName(pht('Refund Order'))
- ->setIcon('fa-reply')
- ->setWorkflow(true)
- ->setDisabled(!$can_refund)
- ->setHref($refund_uri));
-
- $curtain->addAction(
- id(new PhabricatorActionView())
- ->setName(pht('Void Invoice'))
- ->setIcon('fa-times')
- ->setWorkflow(true)
- ->setDisabled(!$can_void)
- ->setHref($void_uri));
- }
-
- return $curtain;
- }
-
-}
diff --git a/src/applications/phortune/controller/cart/PhortuneCartVoidController.php b/src/applications/phortune/controller/cart/PhortuneCartVoidController.php
deleted file mode 100644
--- a/src/applications/phortune/controller/cart/PhortuneCartVoidController.php
+++ /dev/null
@@ -1,43 +0,0 @@
-getViewer();
- $cart = $this->getCart();
-
- $cancel_uri = $cart->getDetailURI();
-
- try {
- $title = pht('Unable to Void Invoice');
- $cart->assertCanVoidOrder();
- } catch (Exception $ex) {
- return $this->newDialog()
- ->setTitle($title)
- ->appendChild($ex->getMessage())
- ->addCancelButton($cancel_uri);
- }
-
- if ($request->isFormPost()) {
- return id(new AphrontRedirectResponse())->setURI($cancel_uri);
- }
-
- return $this->newDialog()
- ->setTitle(pht('Void Invoice?'))
- ->appendParagraph(
- pht(
- 'Really void this invoice? The customer will no longer be asked '.
- 'to submit payment for it.'))
- ->addCancelButton($cancel_uri)
- ->addSubmitButton(pht('Void Invoice'));
- }
-}
diff --git a/src/applications/phortune/controller/external/PhortuneExternalController.php b/src/applications/phortune/controller/external/PhortuneExternalController.php
deleted file mode 100644
--- a/src/applications/phortune/controller/external/PhortuneExternalController.php
+++ /dev/null
@@ -1,172 +0,0 @@
-email;
- }
-
- final protected function getAccountEmail() {
- return $this->email;
- }
-
- final protected function getExternalViewer() {
- return PhabricatorUser::getOmnipotentUser();
- }
-
- final public function handleRequest(AphrontRequest $request) {
- $address_key = $request->getURIData('addressKey');
- $access_key = $request->getURIData('accessKey');
-
- $viewer = $this->getViewer();
- $xviewer = $this->getExternalViewer();
-
- $email = id(new PhortuneAccountEmailQuery())
- ->setViewer($xviewer)
- ->withAddressKeys(array($address_key))
- ->executeOne();
- if (!$email) {
- return new Aphront404Response();
- }
-
- $account = $email->getAccount();
-
- $can_see = PhabricatorPolicyFilter::hasCapability(
- $viewer,
- $account,
- PhabricatorPolicyCapability::CAN_EDIT);
-
- $email_display = phutil_tag('strong', array(), $email->getAddress());
- $user_display = phutil_tag('strong', array(), $viewer->getUsername());
-
- $actual_key = $email->getAccessKey();
- if (!phutil_hashes_are_identical($access_key, $actual_key)) {
- $dialog = $this->newDialog()
- ->setTitle(pht('Email Access Link Out of Date'))
- ->appendParagraph(
- pht(
- 'You are trying to access this payment account as: %s',
- $email_display))
- ->appendParagraph(
- pht(
- 'The access link you have followed is out of date and no longer '.
- 'works.'));
-
- if ($can_see) {
- $dialog->appendParagraph(
- pht(
- 'You are currently logged in as a user (%s) who has '.
- 'permission to manage the payment account, so you can '.
- 'continue to the updated link.',
- $user_display));
-
- $dialog->addCancelButton(
- $email->getExternalURI(),
- pht('Continue to Updated Link'));
- } else {
- $dialog->appendParagraph(
- pht(
- 'To access information about this payment account, follow '.
- 'a more recent link or ask a user with access to give you '.
- 'an updated link.'));
- }
-
- return $dialog;
- }
-
- switch ($email->getStatus()) {
- case PhortuneAccountEmailStatus::STATUS_ACTIVE:
- break;
- case PhortuneAccountEmailStatus::STATUS_DISABLED:
- return $this->newDialog()
- ->setTitle(pht('Address Disabled'))
- ->appendParagraph(
- pht(
- 'This email address (%s) has been disabled and no longer has '.
- 'access to this payment account.',
- $email_display));
- case PhortuneAccountEmailStatus::STATUS_UNSUBSCRIBED:
- return $this->newDialog()
- ->setTitle(pht('Permanently Unsubscribed'))
- ->appendParagraph(
- pht(
- 'This email address (%s) has been permanently unsubscribed '.
- 'and no longer has access to this payment account.',
- $email_display));
- break;
- default:
- return new Aphront404Response();
- }
-
- $this->email = $email;
-
- return $this->handleExternalRequest($request);
- }
-
- final protected function newExternalCrumbs() {
- $viewer = $this->getViewer();
-
- $crumbs = new PHUICrumbsView();
-
- if ($this->hasAccountEmail()) {
- $email = $this->getAccountEmail();
- $account = $email->getAccount();
-
- $crumb_name = pht(
- 'Payment Account: %s',
- $account->getName());
-
- $crumb = id(new PHUICrumbView())
- ->setIcon('fa-diamond')
- ->setName($crumb_name)
- ->setHref($email->getExternalURI());
-
- $crumbs
- ->addCrumb($crumb);
- } else {
- $crumb = id(new PHUICrumbView())
- ->setIcon('fa-diamond')
- ->setText(pht('External Account View'));
-
- $crumbs->addCrumb($crumb);
- }
-
- return $crumbs;
- }
-
- final protected function newExternalView() {
- $email = $this->getAccountEmail();
- $xviewer = $this->getExternalViewer();
-
- $origin_phid = $email->getAuthorPHID();
-
- $handles = $xviewer->loadHandles(array($origin_phid));
-
-
- $messages = array();
- $messages[] = pht(
- 'You are viewing this payment account as: %s',
- phutil_tag('strong', array(), $email->getAddress()));
-
- $messages[] = pht(
- 'This email address was added to this payment account by: %s',
- phutil_tag('strong', array(), $handles[$origin_phid]->getFullName()));
-
- $messages[] = pht(
- 'Anyone who has a link to this page can view order history for '.
- 'this payment account.');
-
- return id(new PHUIInfoView())
- ->setSeverity(PHUIInfoView::SEVERITY_WARNING)
- ->setErrors($messages);
- }
-}
diff --git a/src/applications/phortune/controller/external/PhortuneExternalOrderController.php b/src/applications/phortune/controller/external/PhortuneExternalOrderController.php
deleted file mode 100644
--- a/src/applications/phortune/controller/external/PhortuneExternalOrderController.php
+++ /dev/null
@@ -1,98 +0,0 @@
-getExternalViewer();
- $email = $this->getAccountEmail();
- $account = $email->getAccount();
-
- $order = id(new PhortuneCartQuery())
- ->setViewer($xviewer)
- ->withAccountPHIDs(array($account->getPHID()))
- ->withIDs(array($request->getURIData('orderID')))
- ->executeOne();
- if (!$order) {
- return new Aphront404Response();
- }
-
- $is_printable = ($request->getURIData('action') === 'print');
-
- $order_view = id(new PhortuneOrderSummaryView())
- ->setViewer($xviewer)
- ->setOrder($order)
- ->setPrintable($is_printable);
-
- $crumbs = null;
- $curtain = null;
-
- $main = array();
- $tail = array();
-
- require_celerity_resource('phortune-invoice-css');
-
- if ($is_printable) {
- $body_class = 'phortune-invoice-view';
-
- $tail[] = $order_view;
- } else {
- $body_class = 'phortune-cart-page';
-
- $curtain = $this->newCurtain($order);
-
- $crumbs = $this->newExternalCrumbs()
- ->addTextCrumb($order->getObjectName())
- ->setBorder(true);
-
- $timeline = $this->buildTransactionTimeline($order)
- ->setShouldTerminate(true);
-
- $main[] = $order_view;
- $main[] = $timeline;
- }
-
- $column_view = id(new PHUITwoColumnView())
- ->setMainColumn($main)
- ->setFooter($tail);
-
- if ($curtain) {
- $column_view->setCurtain($curtain);
- }
-
- $page = $this->newPage()
- ->addClass($body_class)
- ->setTitle(
- array(
- $order->getObjectName(),
- $order->getName(),
- ))
- ->appendChild($column_view);
-
- if ($crumbs) {
- $page->setCrumbs($crumbs);
- }
-
- return $page;
- }
-
-
- private function newCurtain(PhortuneCart $order) {
- $xviewer = $this->getExternalViewer();
- $email = $this->getAccountEmail();
-
- $curtain = $this->newCurtainView($order);
-
- $print_uri = $email->getExternalOrderPrintURI($order);
-
- $curtain->addAction(
- id(new PhabricatorActionView())
- ->setName(pht('Printable Version'))
- ->setHref($print_uri)
- ->setOpenInNewWindow(true)
- ->setIcon('fa-print'));
-
- return $curtain;
- }
-
-}
diff --git a/src/applications/phortune/controller/external/PhortuneExternalOverviewController.php b/src/applications/phortune/controller/external/PhortuneExternalOverviewController.php
deleted file mode 100644
--- a/src/applications/phortune/controller/external/PhortuneExternalOverviewController.php
+++ /dev/null
@@ -1,101 +0,0 @@
-getExternalViewer();
- $email = $this->getAccountEmail();
- $account = $email->getAccount();
-
- $crumbs = $this->newExternalCrumbs()
- ->addTextCrumb(pht('Viewing As "%s"', $email->getAddress()))
- ->setBorder(true);
-
- $header = id(new PHUIHeaderView())
- ->setHeader(pht('Invoices and Receipts: %s', $account->getName()))
- ->addActionLink(
- id(new PHUIButtonView())
- ->setTag('a')
- ->setIcon('fa-times')
- ->setText(pht('Unsubscribe'))
- ->setHref($email->getUnsubscribeURI())
- ->setWorkflow(true));
-
- $external_view = $this->newExternalView();
- $invoices_view = $this->newInvoicesView();
- $receipts_view = $this->newReceiptsView();
-
- $column_view = id(new PHUITwoColumnView())
- ->setHeader($header)
- ->setFooter(
- array(
- $external_view,
- $invoices_view,
- $receipts_view,
- ));
-
- return $this->newPage()
- ->setCrumbs($crumbs)
- ->setTitle(
- array(
- pht('Invoices and Receipts'),
- $account->getName(),
- ))
- ->appendChild($column_view);
- }
-
- private function newInvoicesView() {
- $xviewer = $this->getExternalViewer();
- $email = $this->getAccountEmail();
- $account = $email->getAccount();
-
- $invoices = id(new PhortuneCartQuery())
- ->setViewer($xviewer)
- ->withAccountPHIDs(array($account->getPHID()))
- ->needPurchases(true)
- ->withInvoices(true)
- ->execute();
-
- $header = id(new PHUIHeaderView())
- ->setHeader(pht('Invoices'));
-
- $invoices_table = id(new PhortuneOrderTableView())
- ->setViewer($xviewer)
- ->setAccountEmail($email)
- ->setCarts($invoices)
- ->setIsInvoices(true);
-
- return id(new PHUIObjectBoxView())
- ->setHeader($header)
- ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)
- ->setTable($invoices_table);
- }
-
- private function newReceiptsView() {
- $xviewer = $this->getExternalViewer();
- $email = $this->getAccountEmail();
- $account = $email->getAccount();
-
- $receipts = id(new PhortuneCartQuery())
- ->setViewer($xviewer)
- ->withAccountPHIDs(array($account->getPHID()))
- ->needPurchases(true)
- ->withInvoices(false)
- ->execute();
-
- $header = id(new PHUIHeaderView())
- ->setHeader(pht('Receipts'));
-
- $receipts_table = id(new PhortuneOrderTableView())
- ->setViewer($xviewer)
- ->setAccountEmail($email)
- ->setCarts($receipts);
-
- return id(new PHUIObjectBoxView())
- ->setHeader($header)
- ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)
- ->setTable($receipts_table);
- }
-
-}
diff --git a/src/applications/phortune/controller/external/PhortuneExternalUnsubscribeController.php b/src/applications/phortune/controller/external/PhortuneExternalUnsubscribeController.php
deleted file mode 100644
--- a/src/applications/phortune/controller/external/PhortuneExternalUnsubscribeController.php
+++ /dev/null
@@ -1,67 +0,0 @@
-getExternalViewer();
- $email = $this->getAccountEmail();
- $account = $email->getAccount();
-
- $email_uri = $email->getExternalURI();
-
- if ($request->isFormOrHisecPost()) {
- $xactions = array();
-
- $xactions[] = $email->getApplicationTransactionTemplate()
- ->setTransactionType(
- PhortuneAccountEmailStatusTransaction::TRANSACTIONTYPE)
- ->setNewValue(PhortuneAccountEmailStatus::STATUS_UNSUBSCRIBED);
-
- $email->getApplicationTransactionEditor()
- ->setActor($xviewer)
- ->setActingAsPHID($email->getPHID())
- ->setContentSourceFromRequest($request)
- ->setContinueOnMissingFields(true)
- ->setContinueOnNoEffect(true)
- ->setCancelURI($email_uri)
- ->applyTransactions($email, $xactions);
-
- return id(new AphrontRedirectResponse())->setURI($email_uri);
- }
-
- $email_display = phutil_tag(
- 'strong',
- array(),
- $email->getAddress());
-
- $account_display = phutil_tag(
- 'strong',
- array(),
- $account->getName());
-
- $submit = pht(
- 'Permanently Unsubscribe (%s)',
- $email->getAddress());
-
- return $this->newDialog()
- ->setTitle(pht('Permanently Unsubscribe'))
- ->appendParagraph(
- pht(
- 'Permanently unsubscribe this email address (%s) from this '.
- 'payment account (%s)?',
- $email_display,
- $account_display))
- ->appendParagraph(
- pht(
- 'You will no longer receive email and access links will no longer '.
- 'function.'))
- ->appendParagraph(
- pht(
- 'This action is permanent and can not be undone.'))
- ->addCancelButton($email_uri)
- ->addSubmitButton($submit);
-
- }
-
-}
diff --git a/src/applications/phortune/controller/merchant/PhortuneMerchantAddManagerController.php b/src/applications/phortune/controller/merchant/PhortuneMerchantAddManagerController.php
deleted file mode 100644
--- a/src/applications/phortune/controller/merchant/PhortuneMerchantAddManagerController.php
+++ /dev/null
@@ -1,67 +0,0 @@
-getViewer();
- $merchant = $this->getMerchant();
-
- $v_members = array();
- $e_members = null;
- $merchant_uri = $merchant->getManagersURI();
-
- if ($request->isFormOrHiSecPost()) {
- $xactions = array();
- $v_members = $request->getArr('managerPHIDs');
- $type_edge = PhabricatorTransactions::TYPE_EDGE;
-
- $xactions[] = id(new PhortuneMerchantTransaction())
- ->setTransactionType($type_edge)
- ->setMetadataValue(
- 'edge:type',
- PhortuneMerchantHasMemberEdgeType::EDGECONST)
- ->setNewValue(
- array(
- '+' => array_fuse($v_members),
- ));
-
- $editor = id(new PhortuneMerchantEditor())
- ->setActor($viewer)
- ->setContentSourceFromRequest($request)
- ->setContinueOnNoEffect(true);
-
- try {
- $editor->applyTransactions($merchant, $xactions);
-
- return id(new AphrontRedirectResponse())->setURI($merchant_uri);
- } catch (PhabricatorApplicationTransactionValidationException $ex) {
- $validation_exception = $ex;
- $e_members = $ex->getShortMessage($type_edge);
- }
- }
-
- $form = id(new AphrontFormView())
- ->setUser($viewer)
- ->appendControl(
- id(new AphrontFormTokenizerControl())
- ->setDatasource(new PhabricatorPeopleDatasource())
- ->setLabel(pht('New Managers'))
- ->setName('managerPHIDs')
- ->setValue($v_members)
- ->setError($e_members));
-
- return $this->newDialog()
- ->setTitle(pht('Add New Managers'))
- ->appendForm($form)
- ->setWidth(AphrontDialogView::WIDTH_FORM)
- ->addCancelButton($merchant_uri)
- ->addSubmitButton(pht('Add Manager'));
-
- }
-
-}
diff --git a/src/applications/phortune/controller/merchant/PhortuneMerchantController.php b/src/applications/phortune/controller/merchant/PhortuneMerchantController.php
deleted file mode 100644
--- a/src/applications/phortune/controller/merchant/PhortuneMerchantController.php
+++ /dev/null
@@ -1,82 +0,0 @@
-merchant = $merchant;
- return $this;
- }
-
- final protected function getMerchant() {
- return $this->merchant;
- }
-
- final protected function hasMerchant() {
- return (bool)$this->merchant;
- }
-
- final public function handleRequest(AphrontRequest $request) {
- if ($this->shouldRequireMerchantEditCapability()) {
- $response = $this->loadMerchantForEdit();
- } else {
- $response = $this->loadMerchantForView();
- }
-
- if ($response) {
- return $response;
- }
-
- return $this->handleMerchantRequest($request);
- }
-
- abstract protected function shouldRequireMerchantEditCapability();
- abstract protected function handleMerchantRequest(AphrontRequest $request);
-
- private function loadMerchantForEdit() {
- return $this->loadMerchantWithCapabilities(
- array(
- PhabricatorPolicyCapability::CAN_VIEW,
- PhabricatorPolicyCapability::CAN_EDIT,
- ));
- }
-
- private function loadMerchantForView() {
- return $this->loadMerchantWithCapabilities(
- array(
- PhabricatorPolicyCapability::CAN_VIEW,
- ));
- }
-
- private function loadMerchantWithCapabilities(array $capabilities) {
- $viewer = $this->getViewer();
- $request = $this->getRequest();
-
- $merchant_id = $request->getURIData('merchantID');
- if (!$merchant_id) {
- throw new Exception(
- pht(
- 'Controller ("%s") extends controller "%s", but is reachable '.
- 'with no "merchantID" in URI.',
- get_class($this),
- __CLASS__));
- }
-
- $merchant = id(new PhortuneMerchantQuery())
- ->setViewer($viewer)
- ->withIDs(array($merchant_id))
- ->needProfileImage(true)
- ->requireCapabilities($capabilities)
- ->executeOne();
- if (!$merchant) {
- return new Aphront404Response();
- }
-
- $this->setMerchant($merchant);
-
- return null;
- }
-
-}
diff --git a/src/applications/phortune/controller/merchant/PhortuneMerchantDetailsController.php b/src/applications/phortune/controller/merchant/PhortuneMerchantDetailsController.php
deleted file mode 100644
--- a/src/applications/phortune/controller/merchant/PhortuneMerchantDetailsController.php
+++ /dev/null
@@ -1,151 +0,0 @@
-getViewer();
- $id = $request->getURIData('id');
-
- $merchant = $this->getMerchant();
-
- $crumbs = $this->buildApplicationCrumbs()
- ->addTextCrumb(pht('Account Details'))
- ->setBorder(true);
- $header = $this->buildHeaderView();
-
- $title = pht(
- '%s %s',
- $merchant->getObjectName(),
- $merchant->getName());
-
- $details = $this->buildDetailsView($merchant);
- $curtain = $this->buildCurtainView($merchant);
-
- $timeline = $this->buildTransactionTimeline(
- $merchant,
- new PhortuneMerchantTransactionQuery());
- $timeline->setShouldTerminate(true);
-
- $navigation = $this->buildSideNavView('details');
-
- $view = id(new PHUITwoColumnView())
- ->setHeader($header)
- ->setCurtain($curtain)
- ->setMainColumn(array(
- $details,
- $timeline,
- ));
-
- return $this->newPage()
- ->setTitle($title)
- ->setCrumbs($crumbs)
- ->setNavigation($navigation)
- ->appendChild($view);
- }
-
- private function buildDetailsView(PhortuneMerchant $merchant) {
- $viewer = $this->getViewer();
-
- $view = id(new PHUIPropertyListView())
- ->setUser($viewer)
- ->setObject($merchant);
-
- $invoice_from = $merchant->getInvoiceEmail();
- if (!$invoice_from) {
- $invoice_from = pht('No email address set');
- $invoice_from = phutil_tag('em', array(), $invoice_from);
- }
- $view->addProperty(pht('Invoice From'), $invoice_from);
-
- $description = $merchant->getDescription();
- if (strlen($description)) {
- $description = new PHUIRemarkupView($viewer, $description);
- $view->addSectionHeader(
- pht('Description'),
- PHUIPropertyListView::ICON_SUMMARY);
- $view->addTextContent($description);
- }
-
- $contact_info = $merchant->getContactInfo();
- if (strlen($contact_info)) {
- $contact_info = new PHUIRemarkupView($viewer, $contact_info);
- $view->addSectionHeader(
- pht('Contact Information'),
- PHUIPropertyListView::ICON_SUMMARY);
- $view->addTextContent($contact_info);
- }
-
- $footer_info = $merchant->getInvoiceFooter();
- if (strlen($footer_info)) {
- $footer_info = new PHUIRemarkupView($viewer, $footer_info);
- $view->addSectionHeader(
- pht('Invoice Footer'),
- PHUIPropertyListView::ICON_SUMMARY);
- $view->addTextContent($footer_info);
- }
-
- return id(new PHUIObjectBoxView())
- ->setHeaderText(pht('Details'))
- ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)
- ->appendChild($view);
- }
-
- private function buildCurtainView(PhortuneMerchant $merchant) {
- $viewer = $this->getRequest()->getUser();
- $id = $merchant->getID();
-
- $can_edit = PhabricatorPolicyFilter::hasCapability(
- $viewer,
- $merchant,
- PhabricatorPolicyCapability::CAN_EDIT);
-
- $curtain = $this->newCurtainView($merchant);
-
- $curtain->addAction(
- id(new PhabricatorActionView())
- ->setName(pht('Edit Merchant'))
- ->setIcon('fa-pencil')
- ->setDisabled(!$can_edit)
- ->setWorkflow(!$can_edit)
- ->setHref($this->getApplicationURI("merchant/edit/{$id}/")));
-
- $curtain->addAction(
- id(new PhabricatorActionView())
- ->setName(pht('Edit Logo'))
- ->setIcon('fa-picture-o')
- ->setDisabled(!$can_edit)
- ->setWorkflow(!$can_edit)
- ->setHref($this->getApplicationURI("merchant/{$id}/picture/edit/")));
-
- $member_phids = $merchant->getMemberPHIDs();
- $handles = $viewer->loadHandles($member_phids);
-
- $member_list = id(new PHUIObjectItemListView())
- ->setSimple(true);
-
- foreach ($member_phids as $member_phid) {
- $image_uri = $handles[$member_phid]->getImageURI();
- $image_href = $handles[$member_phid]->getURI();
- $person = $handles[$member_phid];
-
- $member = id(new PHUIObjectItemView())
- ->setImageURI($image_uri)
- ->setHref($image_href)
- ->setHeader($person->getFullName());
-
- $member_list->addItem($member);
- }
-
- $curtain->newPanel()
- ->setHeaderText(pht('Managers'))
- ->appendChild($member_list);
-
- return $curtain;
- }
-
-}
diff --git a/src/applications/phortune/controller/merchant/PhortuneMerchantEditController.php b/src/applications/phortune/controller/merchant/PhortuneMerchantEditController.php
deleted file mode 100644
--- a/src/applications/phortune/controller/merchant/PhortuneMerchantEditController.php
+++ /dev/null
@@ -1,11 +0,0 @@
-setController($this)
- ->buildResponse();
- }
-}
diff --git a/src/applications/phortune/controller/merchant/PhortuneMerchantInvoiceCreateController.php b/src/applications/phortune/controller/merchant/PhortuneMerchantInvoiceCreateController.php
deleted file mode 100644
--- a/src/applications/phortune/controller/merchant/PhortuneMerchantInvoiceCreateController.php
+++ /dev/null
@@ -1,265 +0,0 @@
-getUser();
-
- $merchant = $this->loadMerchantAuthority();
- if (!$merchant) {
- return new Aphront404Response();
- }
-
- $this->setMerchant($merchant);
- $merchant_id = $merchant->getID();
- $cancel_uri = $this->getApplicationURI("/merchant/{$merchant_id}/");
-
- // Load the user to invoice, or prompt the viewer to select one.
- $target_user = null;
- $user_phid = head($request->getArr('userPHID'));
- if (!$user_phid) {
- $user_phid = $request->getStr('userPHID');
- }
- if ($user_phid) {
- $target_user = id(new PhabricatorPeopleQuery())
- ->setViewer($viewer)
- ->withPHIDs(array($user_phid))
- ->executeOne();
- }
-
- if (!$target_user) {
- $form = id(new AphrontFormView())
- ->setUser($viewer)
- ->appendRemarkupInstructions(pht('Choose a user to invoice.'))
- ->appendControl(
- id(new AphrontFormTokenizerControl())
- ->setLabel(pht('User'))
- ->setDatasource(new PhabricatorPeopleDatasource())
- ->setName('userPHID')
- ->setLimit(1));
-
- return $this->newDialog()
- ->setTitle(pht('Choose User'))
- ->appendForm($form)
- ->addCancelButton($cancel_uri)
- ->addSubmitButton(pht('Continue'));
- }
-
- // Load the account to invoice, or prompt the viewer to select one.
- $target_account = null;
- $account_phid = $request->getStr('accountPHID');
- if ($account_phid) {
- $target_account = id(new PhortuneAccountQuery())
- ->setViewer($viewer)
- ->withPHIDs(array($account_phid))
- ->withMemberPHIDs(array($target_user->getPHID()))
- ->executeOne();
- }
-
- if (!$target_account) {
- $accounts = id(new PhortuneAccountQuery())
- ->setViewer($viewer)
- ->withMemberPHIDs(array($target_user->getPHID()))
- ->execute();
-
- $form = id(new AphrontFormView())
- ->setUser($viewer)
- ->addHiddenInput('userPHID', $target_user->getPHID())
- ->appendRemarkupInstructions(pht('Choose which account to invoice.'))
- ->appendControl(
- id(new AphrontFormMarkupControl())
- ->setLabel(pht('User'))
- ->setValue($viewer->renderHandle($target_user->getPHID())))
- ->appendControl(
- id(new AphrontFormSelectControl())
- ->setLabel(pht('Account'))
- ->setName('accountPHID')
- ->setValue($account_phid)
- ->setOptions(mpull($accounts, 'getName', 'getPHID')));
-
- return $this->newDialog()
- ->setTitle(pht('Choose Account'))
- ->appendForm($form)
- ->addCancelButton($cancel_uri)
- ->addSubmitButton(pht('Continue'));
- }
-
-
- // Now we build the actual invoice.
- $title = pht('New Invoice');
-
- $crumbs = $this->buildApplicationCrumbs();
- $crumbs->addTextCrumb($title);
-
- $v_title = $request->getStr('title');
- $e_title = true;
-
- $v_name = $request->getStr('name');
- $e_name = true;
-
- $v_cost = $request->getStr('cost');
- $e_cost = true;
-
- $v_desc = $request->getStr('description');
-
- $v_quantity = 1;
- $e_quantity = null;
-
- $errors = array();
- if ($request->isFormPost() && $request->getStr('invoice')) {
- $v_quantity = $request->getStr('quantity');
-
- $e_title = null;
- $e_name = null;
- $e_cost = null;
- $e_quantity = null;
-
- if (!strlen($v_title)) {
- $e_title = pht('Required');
- $errors[] = pht('You must title this invoice.');
- }
-
- if (!strlen($v_name)) {
- $e_name = pht('Required');
- $errors[] = pht('You must provide a name for this purchase.');
- }
-
- if (!strlen($v_cost)) {
- $e_cost = pht('Required');
- $errors[] = pht('You must provide a cost for this purchase.');
- } else {
- try {
- $v_currency = PhortuneCurrency::newFromUserInput(
- $viewer,
- $v_cost);
- } catch (Exception $ex) {
- $errors[] = $ex->getMessage();
- $e_cost = pht('Invalid');
- }
- }
-
- if ((int)$v_quantity <= 0) {
- $e_quantity = pht('Invalid');
- $errors[] = pht('Quantity must be a positive integer.');
- }
-
- if (!$errors) {
- $unique = Filesystem::readRandomCharacters(16);
-
- $product = id(new PhortuneProductQuery())
- ->setViewer($target_user)
- ->withClassAndRef('PhortuneAdHocProduct', $unique)
- ->executeOne();
-
- $cart_implementation = new PhortuneAdHocCart();
-
- $cart = $target_account->newCart(
- $target_user,
- $cart_implementation,
- $merchant);
-
- $cart
- ->setMetadataValue('adhoc.title', $v_title)
- ->setMetadataValue('adhoc.description', $v_desc);
-
- $purchase = $cart->newPurchase($target_user, $product)
- ->setBasePriceAsCurrency($v_currency)
- ->setQuantity((int)$v_quantity)
- ->setMetadataValue('adhoc.name', $v_name)
- ->save();
-
- $cart
- ->setIsInvoice(1)
- ->save();
-
- $cart->activateCart();
- $cart_id = $cart->getID();
-
- $uri = "/merchant/{$merchant_id}/cart/{$cart_id}/";
- $uri = $this->getApplicationURI($uri);
-
- return id(new AphrontRedirectResponse())->setURI($uri);
- }
- }
-
- $form = id(new AphrontFormView())
- ->setUser($viewer)
- ->addHiddenInput('userPHID', $target_user->getPHID())
- ->addHiddenInput('accountPHID', $target_account->getPHID())
- ->addHiddenInput('invoice', true)
- ->appendControl(
- id(new AphrontFormMarkupControl())
- ->setLabel(pht('User'))
- ->setValue($viewer->renderHandle($target_user->getPHID())))
- ->appendControl(
- id(new AphrontFormMarkupControl())
- ->setLabel(pht('Account'))
- ->setValue($viewer->renderHandle($target_account->getPHID())))
- ->appendChild(
- id(new AphrontFormTextControl())
- ->setLabel(pht('Invoice Title'))
- ->setName('title')
- ->setValue($v_title)
- ->setError($e_title))
- ->appendChild(
- id(new AphrontFormTextControl())
- ->setLabel(pht('Purchase Name'))
- ->setName('name')
- ->setValue($v_name)
- ->setError($e_name))
- ->appendChild(
- id(new AphrontFormTextControl())
- ->setLabel(pht('Purchase Cost'))
- ->setName('cost')
- ->setValue($v_cost)
- ->setError($e_cost))
- ->appendChild(
- id(new AphrontFormTextControl())
- ->setLabel(pht('Quantity'))
- ->setName('quantity')
- ->setValue($v_quantity)
- ->setError($e_quantity))
- ->appendChild(
- id(new AphrontFormTextAreaControl())
- ->setLabel(pht('Invoice Description'))
- ->setName('description')
- ->setValue($v_desc))
- ->appendChild(
- id(new AphrontFormSubmitControl())
- ->addCancelButton($cancel_uri)
- ->setValue(pht('Send Invoice')));
-
- $box = id(new PHUIObjectBoxView())
- ->setHeaderText(pht('Details'))
- ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)
- ->setFormErrors($errors)
- ->setForm($form);
-
- $header = id(new PHUIHeaderView())
- ->setHeader($title)
- ->setHeaderIcon('fa-plus-square');
-
- $view = id(new PHUITwoColumnView())
- ->setHeader($header)
- ->setFooter(array(
- $box,
- ));
-
- $navigation = $this->buildSideNavView('orders');
-
- return $this->newPage()
- ->setTitle($title)
- ->setCrumbs($crumbs)
- ->setNavigation($navigation)
- ->appendChild($view);
- }
-
-}
diff --git a/src/applications/phortune/controller/merchant/PhortuneMerchantListController.php b/src/applications/phortune/controller/merchant/PhortuneMerchantListController.php
deleted file mode 100644
--- a/src/applications/phortune/controller/merchant/PhortuneMerchantListController.php
+++ /dev/null
@@ -1,29 +0,0 @@
-setController($this)
- ->buildResponse();
- }
-
- protected function buildApplicationCrumbs() {
- $crumbs = parent::buildApplicationCrumbs();
-
- $can_create = $this->hasApplicationCapability(
- PhortuneMerchantCapability::CAPABILITY);
-
- $crumbs->addAction(
- id(new PHUIListItemView())
- ->setName(pht('Create Merchant'))
- ->setHref($this->getApplicationURI('merchant/edit/'))
- ->setIcon('fa-plus-square')
- ->setWorkflow(!$can_create)
- ->setDisabled(!$can_create));
-
- return $crumbs;
- }
-
-}
diff --git a/src/applications/phortune/controller/merchant/PhortuneMerchantManagersController.php b/src/applications/phortune/controller/merchant/PhortuneMerchantManagersController.php
deleted file mode 100644
--- a/src/applications/phortune/controller/merchant/PhortuneMerchantManagersController.php
+++ /dev/null
@@ -1,90 +0,0 @@
-getViewer();
- $merchant = $this->getMerchant();
-
- $crumbs = $this->buildApplicationCrumbs()
- ->addTextCrumb(pht('Managers'))
- ->setBorder(true);
-
- $header = $this->buildHeaderView();
- $members = $this->buildMembersSection($merchant);
-
- $view = id(new PHUITwoColumnView())
- ->setHeader($header)
- ->setFooter(
- array(
- $members,
- ));
-
- $navigation = $this->buildSideNavView('managers');
-
- return $this->newPage()
- ->setTitle(pht('Managers'))
- ->setCrumbs($crumbs)
- ->setNavigation($navigation)
- ->appendChild($view);
- }
-
- private function buildMembersSection(PhortuneMerchant $merchant) {
- $viewer = $this->getViewer();
-
- $can_edit = PhabricatorPolicyFilter::hasCapability(
- $viewer,
- $merchant,
- PhabricatorPolicyCapability::CAN_EDIT);
-
- $id = $merchant->getID();
-
- $add_uri = urisprintf(
- 'merchant/%d/managers/new/',
- $merchant->getID());
- $add_uri = $this->getApplicationURI($add_uri);
-
- $add = id(new PHUIButtonView())
- ->setTag('a')
- ->setText(pht('New Manager'))
- ->setIcon('fa-plus')
- ->setWorkflow(true)
- ->setDisabled(!$can_edit)
- ->setHref($add_uri);
-
- $header = id(new PHUIHeaderView())
- ->setHeader(pht('Merchant Account Managers'))
- ->addActionLink($add);
-
- $list = id(new PHUIObjectItemListView())
- ->setUser($viewer);
-
- $member_phids = $merchant->getMemberPHIDs();
- $handles = $viewer->loadHandles($member_phids);
-
- foreach ($member_phids as $member_phid) {
- $image_uri = $handles[$member_phid]->getImageURI();
- $image_href = $handles[$member_phid]->getURI();
- $person = $handles[$member_phid];
-
- $member = id(new PHUIObjectItemView())
- ->setImageURI($image_uri)
- ->setHref($image_href)
- ->setHeader($person->getFullName())
- ->addAttribute(pht('Merchant Manager'));
-
- $list->addItem($member);
- }
-
- return id(new PHUIObjectBoxView())
- ->setHeader($header)
- ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)
- ->setObjectList($list);
- }
-
-}
diff --git a/src/applications/phortune/controller/merchant/PhortuneMerchantOrderListController.php b/src/applications/phortune/controller/merchant/PhortuneMerchantOrderListController.php
deleted file mode 100644
--- a/src/applications/phortune/controller/merchant/PhortuneMerchantOrderListController.php
+++ /dev/null
@@ -1,55 +0,0 @@
-getViewer();
- $merchant = $this->getMerchant();
-
- $engine = id(new PhortuneCartSearchEngine())
- ->setController($this)
- ->setMerchant($merchant);
-
- $subscription_id = $request->getURIData('subscriptionID');
- if ($subscription_id) {
- $subscription = id(new PhortuneSubscriptionQuery())
- ->setViewer($viewer)
- ->withIDs(array($subscription_id))
- ->executeOne();
- if (!$subscription) {
- return new Aphront404Response();
- }
-
- $engine->setSubscription($subscription);
- $this->subscription = $subscription;
- }
-
- return $engine->buildResponse();
- }
-
- protected function buildApplicationCrumbs() {
- $crumbs = parent::buildApplicationCrumbs();
-
- $subscription = $this->subscription;
- if ($subscription) {
- $crumbs->addTextCrumb(
- $subscription->getObjectName(),
- $subscription->getURI());
- } else if ($this->hasMerchant()) {
- $merchant = $this->getMerchant();
-
- $crumbs->addTextCrumb(pht('Orders'), $merchant->getOrdersURI());
- }
-
- return $crumbs;
- }
-
-
-}
diff --git a/src/applications/phortune/controller/merchant/PhortuneMerchantOrdersController.php b/src/applications/phortune/controller/merchant/PhortuneMerchantOrdersController.php
deleted file mode 100644
--- a/src/applications/phortune/controller/merchant/PhortuneMerchantOrdersController.php
+++ /dev/null
@@ -1,78 +0,0 @@
-getMerchant();
- $title = $merchant->getName();
-
- $crumbs = $this->buildApplicationCrumbs()
- ->addTextCrumb(pht('Orders'))
- ->setBorder(true);
-
- $header = $this->buildHeaderView();
- $order_history = $this->newRecentOrdersView($merchant, 100);
-
- $view = id(new PHUITwoColumnView())
- ->setHeader($header)
- ->setFooter(
- array(
- $order_history,
- ));
-
- $navigation = $this->buildSideNavView('orders');
-
- return $this->newPage()
- ->setTitle($title)
- ->setCrumbs($crumbs)
- ->setNavigation($navigation)
- ->appendChild($view);
- }
-
- private function newRecentOrdersView(
- PhortuneMerchant $merchant,
- $limit) {
-
- $viewer = $this->getViewer();
-
- $carts = id(new PhortuneCartQuery())
- ->setViewer($viewer)
- ->withMerchantPHIDs(array($merchant->getPHID()))
- ->needPurchases(true)
- ->withStatuses(
- array(
- PhortuneCart::STATUS_PURCHASING,
- PhortuneCart::STATUS_CHARGED,
- PhortuneCart::STATUS_HOLD,
- PhortuneCart::STATUS_REVIEW,
- PhortuneCart::STATUS_PURCHASED,
- ))
- ->setLimit($limit)
- ->execute();
-
- $orders_uri = $merchant->getOrderListURI();
-
- $table = id(new PhortuneOrderTableView())
- ->setUser($viewer)
- ->setCarts($carts);
-
- $header = id(new PHUIHeaderView())
- ->setHeader(pht('Recent Orders'))
- ->addActionLink(
- id(new PHUIButtonView())
- ->setTag('a')
- ->setIcon('fa-list')
- ->setHref($orders_uri)
- ->setText(pht('View All Orders')));
-
- return id(new PHUIObjectBoxView())
- ->setHeader($header)
- ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)
- ->setTable($table);
- }
-}
diff --git a/src/applications/phortune/controller/merchant/PhortuneMerchantOverviewController.php b/src/applications/phortune/controller/merchant/PhortuneMerchantOverviewController.php
deleted file mode 100644
--- a/src/applications/phortune/controller/merchant/PhortuneMerchantOverviewController.php
+++ /dev/null
@@ -1,136 +0,0 @@
-getViewer();
- $merchant = $this->getMerchant();
-
- $crumbs = $this->buildApplicationCrumbs()
- ->setBorder(true);
-
- $header = $this->buildHeaderView();
-
- $title = pht(
- '%s %s',
- $merchant->getObjectName(),
- $merchant->getName());
-
- $providers = id(new PhortunePaymentProviderConfigQuery())
- ->setViewer($viewer)
- ->withMerchantPHIDs(array($merchant->getPHID()))
- ->execute();
-
- $details = $this->buildDetailsView($merchant, $providers);
- $navigation = $this->buildSideNavView('overview');
-
- $view = id(new PHUITwoColumnView())
- ->setHeader($header)
- ->setFooter(
- array(
- $details,
- ));
-
- return $this->newPage()
- ->setTitle($title)
- ->setCrumbs($crumbs)
- ->setNavigation($navigation)
- ->appendChild($view);
- }
-
- private function buildDetailsView(
- PhortuneMerchant $merchant,
- array $providers) {
-
- $viewer = $this->getRequest()->getUser();
-
- $view = id(new PHUIPropertyListView())
- ->setUser($viewer)
- ->setObject($merchant);
-
- $status_view = new PHUIStatusListView();
-
- $have_any = false;
- $any_test = false;
- foreach ($providers as $provider_config) {
- $provider = $provider_config->buildProvider();
- if ($provider->isEnabled()) {
- $have_any = true;
- }
- if (!$provider->isAcceptingLivePayments()) {
- $any_test = true;
- }
- }
-
- if ($have_any) {
- $status_view->addItem(
- id(new PHUIStatusItemView())
- ->setIcon(PHUIStatusItemView::ICON_ACCEPT, 'green')
- ->setTarget(pht('Accepts Payments'))
- ->setNote(pht('This merchant can accept payments.')));
-
- if ($any_test) {
- $status_view->addItem(
- id(new PHUIStatusItemView())
- ->setIcon(PHUIStatusItemView::ICON_WARNING, 'yellow')
- ->setTarget(pht('Test Mode'))
- ->setNote(pht('This merchant is accepting test payments.')));
- } else {
- $status_view->addItem(
- id(new PHUIStatusItemView())
- ->setIcon(PHUIStatusItemView::ICON_ACCEPT, 'green')
- ->setTarget(pht('Live Mode'))
- ->setNote(pht('This merchant is accepting live payments.')));
- }
- } else if ($providers) {
- $status_view->addItem(
- id(new PHUIStatusItemView())
- ->setIcon(PHUIStatusItemView::ICON_REJECT, 'red')
- ->setTarget(pht('No Enabled Providers'))
- ->setNote(
- pht(
- 'All of the payment providers for this merchant are '.
- 'disabled.')));
- } else {
- $status_view->addItem(
- id(new PHUIStatusItemView())
- ->setIcon(PHUIStatusItemView::ICON_WARNING, 'yellow')
- ->setTarget(pht('No Providers'))
- ->setNote(
- pht(
- 'This merchant does not have any payment providers configured '.
- 'yet, so it can not accept payments. Add a provider.')));
- }
-
- $view->addProperty(pht('Status'), $status_view);
-
- $description = $merchant->getDescription();
- if (strlen($description)) {
- $description = new PHUIRemarkupView($viewer, $description);
- $view->addSectionHeader(
- pht('Description'),
- PHUIPropertyListView::ICON_SUMMARY);
- $view->addTextContent($description);
- }
-
- $contact_info = $merchant->getContactInfo();
- if (strlen($contact_info)) {
- $contact_info = new PHUIRemarkupView($viewer, $contact_info);
- $view->addSectionHeader(
- pht('Contact Information'),
- PHUIPropertyListView::ICON_SUMMARY);
- $view->addTextContent($contact_info);
- }
-
- return id(new PHUIObjectBoxView())
- ->setHeaderText(pht('Details'))
- ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)
- ->appendChild($view);
- }
-
-}
diff --git a/src/applications/phortune/controller/merchant/PhortuneMerchantPictureController.php b/src/applications/phortune/controller/merchant/PhortuneMerchantPictureController.php
deleted file mode 100644
--- a/src/applications/phortune/controller/merchant/PhortuneMerchantPictureController.php
+++ /dev/null
@@ -1,223 +0,0 @@
-getViewer();
- $merchant = $this->getMerchant();
-
- $uri = $merchant->getDetailsURI();
-
- $supported_formats = PhabricatorFile::getTransformableImageFormats();
- $e_file = true;
- $errors = array();
-
- if ($request->isFormPost()) {
- $phid = $request->getStr('phid');
- $is_default = false;
- if ($phid == PhabricatorPHIDConstants::PHID_VOID) {
- $phid = null;
- $is_default = true;
- } else if ($phid) {
- $file = id(new PhabricatorFileQuery())
- ->setViewer($viewer)
- ->withPHIDs(array($phid))
- ->executeOne();
- } else {
- if ($request->getFileExists('picture')) {
- $file = PhabricatorFile::newFromPHPUpload(
- $_FILES['picture'],
- array(
- 'authorPHID' => $viewer->getPHID(),
- 'canCDN' => true,
- ));
- } else {
- $e_file = pht('Required');
- $errors[] = pht(
- 'You must choose a file when uploading a merchant logo.');
- }
- }
-
- if (!$errors && !$is_default) {
- if (!$file->isTransformableImage()) {
- $e_file = pht('Not Supported');
- $errors[] = pht(
- 'This server only supports these image formats: %s.',
- implode(', ', $supported_formats));
- } else {
- $xform = PhabricatorFileTransform::getTransformByKey(
- PhabricatorFileThumbnailTransform::TRANSFORM_PROFILE);
- $xformed = $xform->executeTransform($file);
- }
- }
-
- if (!$errors) {
- if ($is_default) {
- $new_value = null;
- } else {
- $xformed->attachToObject($merchant->getPHID());
- $new_value = $xformed->getPHID();
- }
-
- $xactions = array();
- $xactions[] = id(new PhortuneMerchantTransaction())
- ->setTransactionType(
- PhortuneMerchantPictureTransaction::TRANSACTIONTYPE)
- ->setNewValue($new_value);
-
- $editor = id(new PhortuneMerchantEditor())
- ->setActor($viewer)
- ->setContentSourceFromRequest($request)
- ->setContinueOnMissingFields(true)
- ->setContinueOnNoEffect(true);
-
- $editor->applyTransactions($merchant, $xactions);
-
- return id(new AphrontRedirectResponse())->setURI($uri);
- }
- }
-
- $title = pht('Edit Logo');
-
- $form = id(new PHUIFormLayoutView())
- ->setUser($viewer);
-
- $default_image = PhabricatorFile::loadBuiltin($viewer, 'merchant.png');
-
- $images = array();
-
- $current = $merchant->getProfileImagePHID();
- $has_current = false;
- if ($current) {
- $file = id(new PhabricatorFileQuery())
- ->setViewer($viewer)
- ->withPHIDs(array($current))
- ->executeOne();
- if ($file) {
- if ($file->isTransformableImage()) {
- $has_current = true;
- $images[$current] = array(
- 'uri' => $file->getBestURI(),
- 'tip' => pht('Current Picture'),
- );
- }
- }
- }
-
- $images[PhabricatorPHIDConstants::PHID_VOID] = array(
- 'uri' => $default_image->getBestURI(),
- 'tip' => pht('Default Picture'),
- );
-
- require_celerity_resource('people-profile-css');
- Javelin::initBehavior('phabricator-tooltips', array());
-
- $buttons = array();
- foreach ($images as $phid => $spec) {
- $button = javelin_tag(
- 'button',
- array(
- 'class' => 'button-grey profile-image-button',
- 'sigil' => 'has-tooltip',
- 'meta' => array(
- 'tip' => $spec['tip'],
- 'size' => 300,
- ),
- ),
- phutil_tag(
- 'img',
- array(
- 'height' => 50,
- 'width' => 50,
- 'src' => $spec['uri'],
- )));
-
- $button = array(
- phutil_tag(
- 'input',
- array(
- 'type' => 'hidden',
- 'name' => 'phid',
- 'value' => $phid,
- )),
- $button,
- );
-
- $button = phabricator_form(
- $viewer,
- array(
- 'class' => 'profile-image-form',
- 'method' => 'POST',
- ),
- $button);
-
- $buttons[] = $button;
- }
-
- if ($has_current) {
- $form->appendChild(
- id(new AphrontFormMarkupControl())
- ->setLabel(pht('Current Logo'))
- ->setValue(array_shift($buttons)));
- }
-
- $form->appendChild(
- id(new AphrontFormMarkupControl())
- ->setLabel(pht('Use Logo'))
- ->setValue($buttons));
-
- $form_box = id(new PHUIObjectBoxView())
- ->setHeaderText($title)
- ->setFormErrors($errors)
- ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)
- ->setForm($form);
-
- $upload_form = id(new AphrontFormView())
- ->setUser($viewer)
- ->setEncType('multipart/form-data')
- ->appendChild(
- id(new AphrontFormFileControl())
- ->setName('picture')
- ->setLabel(pht('Upload Logo'))
- ->setError($e_file)
- ->setCaption(
- pht('Supported formats: %s', implode(', ', $supported_formats))))
- ->appendChild(
- id(new AphrontFormSubmitControl())
- ->addCancelButton($uri)
- ->setValue(pht('Upload Logo')));
-
- $upload_box = id(new PHUIObjectBoxView())
- ->setHeaderText(pht('Upload New Logo'))
- ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)
- ->setForm($upload_form);
-
- $crumbs = $this->buildApplicationCrumbs();
- $crumbs->addTextCrumb(pht('Edit Logo'));
-
- $header = id(new PHUIHeaderView())
- ->setHeader(pht('Edit Logo'))
- ->setHeaderIcon('fa-camera');
-
- $view = id(new PHUITwoColumnView())
- ->setHeader($header)
- ->setFooter(array(
- $form_box,
- $upload_box,
- ));
-
- return $this->newPage()
- ->setTitle($title)
- ->setCrumbs($crumbs)
- ->appendChild(
- array(
- $view,
- ));
-
- }
-}
diff --git a/src/applications/phortune/controller/merchant/PhortuneMerchantProfileController.php b/src/applications/phortune/controller/merchant/PhortuneMerchantProfileController.php
deleted file mode 100644
--- a/src/applications/phortune/controller/merchant/PhortuneMerchantProfileController.php
+++ /dev/null
@@ -1,93 +0,0 @@
-getViewer();
- $merchant = $this->getMerchant();
- $title = $merchant->getName();
-
- $header = id(new PHUIHeaderView())
- ->setHeader($title)
- ->setUser($viewer)
- ->setImage($merchant->getProfileImageURI());
-
- return $header;
- }
-
- protected function buildApplicationCrumbs() {
- $crumbs = parent::buildApplicationCrumbs();
-
- if ($this->hasMerchant()) {
- $merchant = $this->getMerchant();
- $merchant_uri = $merchant->getURI();
- $crumbs->addTextCrumb($merchant->getName(), $merchant_uri);
- }
-
- return $crumbs;
- }
-
- protected function buildSideNavView($filter = null) {
- $viewer = $this->getViewer();
- $merchant = $this->getMerchant();
- $id = $merchant->getID();
-
- $can_edit = PhabricatorPolicyFilter::hasCapability(
- $viewer,
- $merchant,
- PhabricatorPolicyCapability::CAN_EDIT);
-
- $nav = id(new AphrontSideNavFilterView())
- ->setBaseURI(new PhutilURI($this->getApplicationURI()));
-
- $nav->addLabel(pht('Merchant'));
-
- $nav->newLink('overview')
- ->setName(pht('Overview'))
- ->setHref($merchant->getURI())
- ->setIcon('fa-building-o');
-
- $nav->newLink('details')
- ->setName(pht('Account Details'))
- ->setHref($merchant->getDetailsURI())
- ->setIcon('fa-address-card-o')
- ->setDisabled(!$can_edit)
- ->setWorkflow(!$can_edit);
-
- $nav->addLabel(pht('Payments'));
-
- $nav->newLink('providers')
- ->setName(pht('Payment Providers'))
- ->setHref($merchant->getPaymentProvidersURI())
- ->setIcon('fa-credit-card')
- ->setDisabled(!$can_edit)
- ->setWorkflow(!$can_edit);
-
- $nav->newLink('orders')
- ->setName(pht('Orders'))
- ->setHref($merchant->getOrdersURI())
- ->setIcon('fa-shopping-bag')
- ->setDisabled(!$can_edit)
- ->setWorkflow(!$can_edit);
-
- $nav->newLink('subscriptions')
- ->setName(pht('Subscriptions'))
- ->setHref($merchant->getSubscriptionsURI())
- ->setIcon('fa-retweet')
- ->setDisabled(!$can_edit)
- ->setWorkflow(!$can_edit);
-
- $nav->addLabel(pht('Personnel'));
-
- $nav->newLink('managers')
- ->setName(pht('Managers'))
- ->setHref($merchant->getManagersURI())
- ->setIcon('fa-group');
-
- $nav->selectFilter($filter);
-
- return $nav;
- }
-
-}
diff --git a/src/applications/phortune/controller/merchant/PhortuneMerchantProviderDisableController.php b/src/applications/phortune/controller/merchant/PhortuneMerchantProviderDisableController.php
deleted file mode 100644
--- a/src/applications/phortune/controller/merchant/PhortuneMerchantProviderDisableController.php
+++ /dev/null
@@ -1,75 +0,0 @@
-getViewer();
- $merchant = $this->getMerchant();
-
- $id = $request->getURIData('providerID');
-
- $provider_config = id(new PhortunePaymentProviderConfigQuery())
- ->setViewer($viewer)
- ->withIDs(array($id))
- ->requireCapabilities(
- array(
- PhabricatorPolicyCapability::CAN_VIEW,
- PhabricatorPolicyCapability::CAN_EDIT,
- ))
- ->executeOne();
- if (!$provider_config) {
- return new Aphront404Response();
- }
-
- $merchant_id = $merchant->getID();
- $cancel_uri = $provider_config->getURI();
-
- $provider = $provider_config->buildProvider();
-
- if ($request->isFormPost()) {
- $new_status = !$provider_config->getIsEnabled();
-
- $xactions = array();
- $xactions[] = id(new PhortunePaymentProviderConfigTransaction())
- ->setTransactionType(
- PhortunePaymentProviderConfigTransaction::TYPE_ENABLE)
- ->setNewValue($new_status);
-
- $editor = id(new PhortunePaymentProviderConfigEditor())
- ->setActor($viewer)
- ->setContentSourceFromRequest($request)
- ->setContinueOnNoEffect(true)
- ->setContinueOnMissingFields(true);
-
- $editor->applyTransactions($provider_config, $xactions);
-
- return id(new AphrontRedirectResponse())->setURI($cancel_uri);
- }
-
- if ($provider_config->getIsEnabled()) {
- $title = pht('Disable Provider?');
- $body = pht(
- 'If you disable this payment provider, users will no longer be able '.
- 'to use it to make new payments.');
- $button = pht('Disable Provider');
- } else {
- $title = pht('Enable Provider?');
- $body = pht(
- 'If you enable this payment provider, users will be able to use it to '.
- 'make new payments.');
- $button = pht('Enable Provider');
- }
-
- return $this->newDialog()
- ->setTitle($title)
- ->appendParagraph($body)
- ->addSubmitButton($button)
- ->addCancelButton($cancel_uri);
- }
-
-}
diff --git a/src/applications/phortune/controller/merchant/PhortuneMerchantProviderEditController.php b/src/applications/phortune/controller/merchant/PhortuneMerchantProviderEditController.php
deleted file mode 100644
--- a/src/applications/phortune/controller/merchant/PhortuneMerchantProviderEditController.php
+++ /dev/null
@@ -1,295 +0,0 @@
-getViewer();
- $merchant = $this->getMerchant();
-
- $id = $request->getURIData('id');
-
- if ($id) {
- $provider_config = id(new PhortunePaymentProviderConfigQuery())
- ->setViewer($viewer)
- ->withIDs(array($id))
- ->withMerchantPHIDs(array($merchant->getPHID()))
- ->requireCapabilities(
- array(
- PhabricatorPolicyCapability::CAN_VIEW,
- PhabricatorPolicyCapability::CAN_EDIT,
- ))
- ->executeOne();
- if (!$provider_config) {
- return new Aphront404Response();
- }
- $is_new = false;
- $is_choose_type = false;
-
- $merchant = $provider_config->getMerchant();
- $merchant_id = $merchant->getID();
- $cancel_uri = $provider_config->getURI();
- } else {
- $merchant_id = $merchant->getID();
-
- $current_providers = id(new PhortunePaymentProviderConfigQuery())
- ->setViewer($viewer)
- ->withMerchantPHIDs(array($merchant->getPHID()))
- ->execute();
- $current_map = mgroup($current_providers, 'getProviderClass');
-
- $provider_config = PhortunePaymentProviderConfig::initializeNewProvider(
- $merchant);
-
- $is_new = true;
-
- $classes = PhortunePaymentProvider::getAllProviders();
- $class = $request->getStr('class');
- if (empty($classes[$class]) || isset($current_map[$class])) {
- return $this->processChooseClassRequest(
- $request,
- $merchant,
- $current_map);
- }
-
- $provider_config->setProviderClass($class);
- $cancel_uri = $merchant->getPaymentProvidersURI();
- }
-
- $provider = $provider_config->buildProvider();
-
- if ($is_new) {
- $title = pht('Create Payment Provider');
- $button_text = pht('Create Provider');
- } else {
- $title = pht(
- 'Edit Payment Provider %d %s',
- $provider_config->getID(),
- $provider->getName());
- $button_text = pht('Save Changes');
- }
-
- $errors = array();
- if ($request->isFormPost() && $request->getStr('edit')) {
- $form_values = $provider->readEditFormValuesFromRequest($request);
-
- list($errors, $issues, $xaction_values) = $provider->processEditForm(
- $request,
- $form_values);
-
- if (!$errors) {
- // Find any secret fields which we're about to set to "*******"
- // (indicating that the user did not edit the value) and remove them
- // from the list of properties to update (so we don't write "******"
- // to permanent configuration.
- $secrets = $provider->getAllConfigurableSecretProperties();
- $secrets = array_fuse($secrets);
- foreach ($xaction_values as $key => $value) {
- if ($provider->isConfigurationSecret($value)) {
- unset($xaction_values[$key]);
- }
- }
-
- if ($provider->canRunConfigurationTest()) {
- $proxy = clone $provider;
- $proxy_config = clone $provider_config;
- $proxy_config->setMetadata(
- $xaction_values + $provider_config->getMetadata());
- $proxy->setProviderConfig($proxy_config);
-
- try {
- $proxy->runConfigurationTest();
- } catch (Exception $ex) {
- $errors[] = pht('Unable to connect to payment provider:');
- $errors[] = $ex->getMessage();
- }
- }
-
- if (!$errors) {
- $template = id(new PhortunePaymentProviderConfigTransaction())
- ->setTransactionType(
- PhortunePaymentProviderConfigTransaction::TYPE_PROPERTY);
-
- $xactions = array();
-
- if (!$provider_config->getID()) {
- $xactions[] = id(new PhortunePaymentProviderConfigTransaction())
- ->setTransactionType(
- PhortunePaymentProviderConfigTransaction::TYPE_CREATE)
- ->setNewValue(true);
- }
-
- foreach ($xaction_values as $key => $value) {
- $xactions[] = id(clone $template)
- ->setMetadataValue(
- PhortunePaymentProviderConfigTransaction::PROPERTY_KEY,
- $key)
- ->setNewValue($value);
- }
-
- $editor = id(new PhortunePaymentProviderConfigEditor())
- ->setActor($viewer)
- ->setContentSourceFromRequest($request)
- ->setContinueOnNoEffect(true);
-
- $editor->applyTransactions($provider_config, $xactions);
-
- $next_uri = $provider_config->getURI();
-
- return id(new AphrontRedirectResponse())->setURI($next_uri);
- }
- }
- } else {
- $form_values = $provider->readEditFormValuesFromProviderConfig();
- $issues = array();
- }
-
- $form = id(new AphrontFormView())
- ->setUser($viewer)
- ->addHiddenInput('class', $provider_config->getProviderClass())
- ->addHiddenInput('edit', true)
- ->appendChild(
- id(new AphrontFormMarkupControl())
- ->setLabel(pht('Provider Type'))
- ->setValue($provider->getName()));
-
- $provider->extendEditForm($request, $form, $form_values, $issues);
-
- $form
- ->appendChild(
- id(new AphrontFormSubmitControl())
- ->setValue($button_text)
- ->addCancelButton($cancel_uri))
- ->appendChild(
- id(new AphrontFormDividerControl()))
- ->appendRemarkupInstructions(
- $provider->getConfigureInstructions());
-
- $crumbs = $this->buildApplicationCrumbs();
- $crumbs->addTextCrumb($merchant->getName(), $cancel_uri);
- $crumbs->setBorder(true);
-
- if ($is_new) {
- $crumbs->addTextCrumb(pht('Add Provider'));
- } else {
- $crumbs->addTextCrumb(
- pht('Edit Provider %d', $provider_config->getID()));
- }
-
- $header = id(new PHUIHeaderView())
- ->setHeader($title)
- ->setHeaderIcon('fa-pencil');
-
- $box = id(new PHUIObjectBoxView())
- ->setFormErrors($errors)
- ->setHeaderText(pht('Properties'))
- ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)
- ->appendChild($form);
-
- $view = id(new PHUITwoColumnView())
- ->setHeader($header)
- ->setFooter(array(
- $box,
- ));
-
- return $this->newPage()
- ->setTitle($title)
- ->setCrumbs($crumbs)
- ->appendChild($view);
-
- }
-
- private function processChooseClassRequest(
- AphrontRequest $request,
- PhortuneMerchant $merchant,
- array $current_map) {
-
- $viewer = $request->getUser();
-
- $providers = PhortunePaymentProvider::getAllProviders();
- $v_class = null;
- $errors = array();
- if ($request->isFormPost()) {
- $v_class = $request->getStr('class');
- if (!isset($providers[$v_class])) {
- $errors[] = pht('You must select a valid provider type.');
- }
- }
-
- $merchant_id = $merchant->getID();
- $cancel_uri = $this->getApplicationURI("merchant/{$merchant_id}/");
-
- if (!$v_class) {
- $v_class = key($providers);
- }
-
- $panel_classes = id(new AphrontFormRadioButtonControl())
- ->setName('class')
- ->setValue($v_class);
-
- $providers = msort($providers, 'getConfigureName');
- foreach ($providers as $class => $provider) {
- $disabled = isset($current_map[$class]);
- if ($disabled) {
- $description = phutil_tag(
- 'em',
- array(),
- pht(
- 'This merchant already has a payment account configured '.
- 'with this provider.'));
- } else {
- $description = $provider->getConfigureDescription();
- }
-
- $panel_classes->addButton(
- $class,
- $provider->getConfigureName(),
- $description,
- null,
- $disabled);
- }
-
- $form = id(new AphrontFormView())
- ->setUser($viewer)
- ->appendRemarkupInstructions(
- pht('Choose the type of payment provider to add:'))
- ->appendChild($panel_classes)
- ->appendChild(
- id(new AphrontFormSubmitControl())
- ->setValue(pht('Continue'))
- ->addCancelButton($cancel_uri));
-
- $title = pht('Add Payment Provider');
-
- $crumbs = $this->buildApplicationCrumbs();
- $crumbs->addTextCrumb($merchant->getName(), $cancel_uri);
- $crumbs->addTextCrumb($title);
- $crumbs->setBorder(true);
-
- $box = id(new PHUIObjectBoxView())
- ->setHeaderText(pht('Provider'))
- ->setFormErrors($errors)
- ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)
- ->setForm($form);
-
- $header = id(new PHUIHeaderView())
- ->setHeader($title)
- ->setHeaderIcon('fa-plus-square');
-
- $view = id(new PHUITwoColumnView())
- ->setHeader($header)
- ->setFooter(array(
- $box,
- ));
-
- return $this->newPage()
- ->setTitle($title)
- ->setCrumbs($crumbs)
- ->appendChild($view);
- }
-
-}
diff --git a/src/applications/phortune/controller/merchant/PhortuneMerchantProviderViewController.php b/src/applications/phortune/controller/merchant/PhortuneMerchantProviderViewController.php
deleted file mode 100644
--- a/src/applications/phortune/controller/merchant/PhortuneMerchantProviderViewController.php
+++ /dev/null
@@ -1,127 +0,0 @@
-getViewer();
- $merchant = $this->getMerchant();
-
- $provider = id(new PhortunePaymentProviderConfigQuery())
- ->setViewer($viewer)
- ->withIDs(array($request->getURIData('providerID')))
- ->executeOne();
- if (!$provider) {
- return new Aphront404Response();
- }
-
- $provider_type = $provider->buildProvider();
-
- $crumbs = $this->buildApplicationCrumbs()
- ->addTextCrumb($merchant->getName(), $merchant->getURI())
- ->addTextCrumb(
- pht('Payment Providers'),
- $merchant->getPaymentProvidersURI())
- ->addTextCrumb($provider->getObjectName())
- ->setBorder(true);
-
- $header = id(new PHUIHeaderView())
- ->setHeader(pht('Payment Provider: %s', $provider_type->getName()));
-
- $details = $this->newDetailsView($provider);
-
- $timeline = $this->buildTransactionTimeline(
- $provider,
- new PhortunePaymentProviderConfigTransactionQuery());
- $timeline->setShouldTerminate(true);
-
- $curtain = $this->buildCurtainView($provider);
-
- $view = id(new PHUITwoColumnView())
- ->setHeader($header)
- ->setCurtain($curtain)
- ->setMainColumn(
- array(
- $details,
- $timeline,
- ));
-
- return $this->newPage()
- ->setTitle($provider->getObjectName())
- ->setCrumbs($crumbs)
- ->appendChild($view);
- }
-
- private function buildCurtainView(PhortunePaymentProviderConfig $provider) {
- $viewer = $this->getViewer();
- $merchant = $this->getMerchant();
-
- $can_edit = PhabricatorPolicyFilter::hasCapability(
- $viewer,
- $provider,
- PhabricatorPolicyCapability::CAN_EDIT);
-
- $edit_uri = $this->getApplicationURI(
- urisprintf(
- 'merchant/%d/providers/edit/%d/',
- $merchant->getID(),
- $provider->getID()));
-
- $disable_uri = $this->getApplicationURI(
- urisprintf(
- 'merchant/%d/providers/%d/disable/',
- $merchant->getID(),
- $provider->getID()));
-
- $curtain = $this->newCurtainView($provider);
-
- $curtain->addAction(
- id(new PhabricatorActionView())
- ->setName(pht('Edit Provider'))
- ->setIcon('fa-pencil')
- ->setHref($edit_uri)
- ->setDisabled(!$can_edit)
- ->setWorkflow(!$can_edit));
-
- $provider_type = $provider->buildProvider();
-
- if ($provider_type->isEnabled()) {
- $disable_icon = 'fa-times';
- $disable_name = pht('Disable Provider');
- } else {
- $disable_icon = 'fa-check';
- $disable_name = pht('Enable Provider');
- }
-
- $curtain->addAction(
- id(new PhabricatorActionView())
- ->setName($disable_name)
- ->setIcon($disable_icon)
- ->setHref($disable_uri)
- ->setDisabled(!$can_edit)
- ->setWorkflow(true));
-
- return $curtain;
- }
-
- private function newDetailsView(PhortunePaymentProviderConfig $provider) {
- $viewer = $this->getViewer();
-
- $view = id(new PHUIPropertyListView())
- ->setUser($viewer);
-
- $provider_type = $provider->buildProvider();
-
- $view->addProperty(pht('Provider Type'), $provider_type->getName());
-
- return id(new PHUIObjectBoxView())
- ->setHeaderText(pht('Payment Provider Details'))
- ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)
- ->addPropertyList($view);
- }
-
-}
diff --git a/src/applications/phortune/controller/merchant/PhortuneMerchantProvidersController.php b/src/applications/phortune/controller/merchant/PhortuneMerchantProvidersController.php
deleted file mode 100644
--- a/src/applications/phortune/controller/merchant/PhortuneMerchantProvidersController.php
+++ /dev/null
@@ -1,116 +0,0 @@
-getViewer();
- $merchant = $this->getMerchant();
-
- $crumbs = $this->buildApplicationCrumbs()
- ->addTextCrumb(pht('Payment Providers'))
- ->setBorder(true);
-
- $header = $this->buildHeaderView();
-
- $title = pht(
- '%s %s',
- $merchant->getObjectName(),
- $merchant->getName());
-
- $providers = id(new PhortunePaymentProviderConfigQuery())
- ->setViewer($viewer)
- ->withMerchantPHIDs(array($merchant->getPHID()))
- ->execute();
-
- $provider_list = $this->buildProviderList(
- $merchant,
- $providers);
-
- $navigation = $this->buildSideNavView('providers');
-
- $view = id(new PHUITwoColumnView())
- ->setHeader($header)
- ->setFooter(
- array(
- $provider_list,
- ));
-
- return $this->newPage()
- ->setTitle($title)
- ->setCrumbs($crumbs)
- ->setNavigation($navigation)
- ->appendChild($view);
- }
-
- private function buildProviderList(
- PhortuneMerchant $merchant,
- array $providers) {
-
- $viewer = $this->getRequest()->getUser();
- $id = $merchant->getID();
-
- $can_edit = PhabricatorPolicyFilter::hasCapability(
- $viewer,
- $merchant,
- PhabricatorPolicyCapability::CAN_EDIT);
-
- $provider_list = id(new PHUIObjectItemListView())
- ->setNoDataString(pht('This merchant has no payment providers.'));
-
- foreach ($providers as $provider_config) {
- $provider = $provider_config->buildProvider();
- $provider_id = $provider_config->getID();
-
- $item = id(new PHUIObjectItemView())
- ->setObjectName($provider_config->getObjectName())
- ->setHeader($provider->getName())
- ->setHref($provider_config->getURI());
-
- if ($provider->isEnabled()) {
- if ($provider->isAcceptingLivePayments()) {
- $item->setStatusIcon('fa-check green');
- } else {
- $item->setStatusIcon('fa-warning yellow');
- $item->addIcon('fa-exclamation-triangle', pht('Test Mode'));
- }
-
- $item->addAttribute($provider->getConfigureProvidesDescription());
- } else {
- $item->setDisabled(true);
- $item->addAttribute(
- phutil_tag('em', array(), pht('This payment provider is disabled.')));
- }
-
- $provider_list->addItem($item);
- }
-
- $add_uri = urisprintf(
- 'merchant/%d/providers/edit/',
- $merchant->getID());
- $add_uri = $this->getApplicationURI($add_uri);
-
- $add_action = id(new PHUIButtonView())
- ->setTag('a')
- ->setHref($add_uri)
- ->setText(pht('Add Payment Provider'))
- ->setDisabled(!$can_edit)
- ->setWorkflow(!$can_edit)
- ->setIcon('fa-plus');
-
- $header = id(new PHUIHeaderView())
- ->setHeader(pht('Payment Providers'))
- ->addActionLink($add_action);
-
- return id(new PHUIObjectBoxView())
- ->setHeader($header)
- ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)
- ->setObjectList($provider_list);
- }
-
-
-}
diff --git a/src/applications/phortune/controller/merchant/PhortuneMerchantSubscriptionListController.php b/src/applications/phortune/controller/merchant/PhortuneMerchantSubscriptionListController.php
deleted file mode 100644
--- a/src/applications/phortune/controller/merchant/PhortuneMerchantSubscriptionListController.php
+++ /dev/null
@@ -1,50 +0,0 @@
-getViewer();
- $merchant = $this->getMerchant();
-
- $engine = id(new PhortuneCartSearchEngine())
- ->setController($this)
- ->setMerchant($merchant);
-
- $subscription_id = $request->getURIData('subscriptionID');
- if ($subscription_id) {
- $subscription = id(new PhortuneSubscriptionQuery())
- ->setViewer($viewer)
- ->withIDs(array($subscription_id))
- ->executeOne();
- if (!$subscription) {
- return new Aphront404Response();
- }
-
- $engine->setSubscription($subscription);
- $this->subscription = $subscription;
- }
-
- return $engine->buildResponse();
- }
-
- protected function buildApplicationCrumbs() {
- $crumbs = parent::buildApplicationCrumbs();
-
- if ($this->hasMerchant()) {
- $merchant = $this->getMerchant();
-
- $crumbs->addTextCrumb(
- pht('Subscriptions'),
- $merchant->getSubscriptionsURI());
- }
-
- return $crumbs;
- }
-
-
-}
diff --git a/src/applications/phortune/controller/merchant/PhortuneMerchantSubscriptionsController.php b/src/applications/phortune/controller/merchant/PhortuneMerchantSubscriptionsController.php
deleted file mode 100644
--- a/src/applications/phortune/controller/merchant/PhortuneMerchantSubscriptionsController.php
+++ /dev/null
@@ -1,68 +0,0 @@
-getMerchant();
- $title = $merchant->getName();
-
- $crumbs = $this->buildApplicationCrumbs()
- ->addTextCrumb(pht('Subscriptions'))
- ->setBorder(true);
-
- $header = $this->buildHeaderView();
-
- $subscriptions = $this->buildSubscriptionsSection($merchant);
-
- $view = id(new PHUITwoColumnView())
- ->setHeader($header)
- ->setFooter(
- array(
- $subscriptions,
- ));
-
- $navigation = $this->buildSideNavView('subscriptions');
-
- return $this->newPage()
- ->setTitle($title)
- ->setCrumbs($crumbs)
- ->setNavigation($navigation)
- ->appendChild($view);
- }
-
- private function buildSubscriptionsSection(PhortuneMerchant $merchant) {
- $viewer = $this->getViewer();
-
- $subscriptions = id(new PhortuneSubscriptionQuery())
- ->setViewer($viewer)
- ->withMerchantPHIDs(array($merchant->getPHID()))
- ->setLimit(25)
- ->execute();
-
- $subscriptions_uri = $merchant->getSubscriptionListURI();
-
- $table = id(new PhortuneSubscriptionTableView())
- ->setUser($viewer)
- ->setSubscriptions($subscriptions);
-
- $header = id(new PHUIHeaderView())
- ->setHeader(pht('Subscriptions'))
- ->addActionLink(
- id(new PHUIButtonView())
- ->setTag('a')
- ->setIcon('fa-list')
- ->setHref($subscriptions_uri)
- ->setText(pht('View All Subscriptions')));
-
- return id(new PHUIObjectBoxView())
- ->setHeader($header)
- ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)
- ->setTable($table);
- }
-
-}
diff --git a/src/applications/phortune/controller/paymentmethod/PhortunePaymentMethodCreateController.php b/src/applications/phortune/controller/paymentmethod/PhortunePaymentMethodCreateController.php
deleted file mode 100644
--- a/src/applications/phortune/controller/paymentmethod/PhortunePaymentMethodCreateController.php
+++ /dev/null
@@ -1,462 +0,0 @@
-getViewer();
-
- $account_id = $request->getURIData('accountID');
- $account = id(new PhortuneAccountQuery())
- ->setViewer($viewer)
- ->withIDs(array($account_id))
- ->requireCapabilities(
- array(
- PhabricatorPolicyCapability::CAN_VIEW,
- PhabricatorPolicyCapability::CAN_EDIT,
- ))
- ->executeOne();
- if (!$account) {
- return new Aphront404Response();
- }
-
- $cart_id = $request->getInt('cartID');
- $subscription_id = $request->getInt('subscriptionID');
- $merchant_id = $request->getInt('merchantID');
-
- if ($cart_id) {
- $cart = id(new PhortuneCartQuery())
- ->setViewer($viewer)
- ->withAccountPHIDs(array($account->getPHID()))
- ->withIDs(array($cart_id))
- ->executeOne();
- if (!$cart) {
- return new Aphront404Response();
- }
-
- $subscription_phid = $cart->getSubscriptionPHID();
- if ($subscription_phid) {
- $subscription = id(new PhortuneSubscriptionQuery())
- ->setViewer($viewer)
- ->withAccountPHIDs(array($account->getPHID()))
- ->withPHIDs(array($subscription_phid))
- ->executeOne();
- if (!$subscription) {
- return new Aphront404Response();
- }
- } else {
- $subscription = null;
- }
-
- $merchant = $cart->getMerchant();
-
- $cart_id = $cart->getID();
- $subscription_id = null;
- $merchant_id = null;
-
- $next_uri = $cart->getCheckoutURI();
- } else if ($subscription_id) {
- $subscription = id(new PhortuneSubscriptionQuery())
- ->setViewer($viewer)
- ->withAccountPHIDs(array($account->getPHID()))
- ->withIDs(array($subscription_id))
- ->executeOne();
- if (!$subscription) {
- return new Aphront404Response();
- }
-
- $cart = null;
- $merchant = $subscription->getMerchant();
-
- $cart_id = null;
- $subscription_id = $subscription->getID();
- $merchant_id = null;
-
- $next_uri = $subscription->getURI();
- } else if ($merchant_id) {
- $merchant_phids = $account->getMerchantPHIDs();
- if ($merchant_phids) {
- $merchant = id(new PhortuneMerchantQuery())
- ->setViewer($viewer)
- ->withIDs(array($merchant_id))
- ->withPHIDs($merchant_phids)
- ->executeOne();
- } else {
- $merchant = null;
- }
-
- if (!$merchant) {
- return new Aphront404Response();
- }
-
- $cart = null;
- $subscription = null;
-
- $cart_id = null;
- $subscription_id = null;
- $merchant_id = $merchant->getID();
-
- $next_uri = $account->getPaymentMethodsURI();
- } else {
- $next_uri = $account->getPaymentMethodsURI();
-
- $merchant_phids = $account->getMerchantPHIDs();
- if ($merchant_phids) {
- $merchants = id(new PhortuneMerchantQuery())
- ->setViewer($viewer)
- ->withPHIDs($merchant_phids)
- ->needProfileImage(true)
- ->execute();
- } else {
- $merchants = array();
- }
-
- if (!$merchants) {
- return $this->newDialog()
- ->setTitle(pht('No Merchants'))
- ->appendParagraph(
- pht(
- 'You have not established a relationship with any merchants '.
- 'yet. Create an order or subscription before adding payment '.
- 'methods.'))
- ->addCancelButton($next_uri);
- }
-
- // If there's more than one merchant, ask the user to pick which one they
- // want to pay. If there's only one, just pick it for them.
- if (count($merchants) > 1) {
- $menu = $this->newMerchantMenu($merchants);
-
- $form = id(new AphrontFormView())
- ->appendInstructions(
- pht(
- 'Choose the merchant you want to pay.'));
-
- return $this->newDialog()
- ->setTitle(pht('Choose a Merchant'))
- ->appendForm($form)
- ->appendChild($menu)
- ->addCancelButton($next_uri);
- }
-
- $cart = null;
- $subscription = null;
- $merchant = head($merchants);
-
- $cart_id = null;
- $subscription_id = null;
- $merchant_id = $merchant->getID();
- }
-
- $providers = $this->loadCreatePaymentMethodProvidersForMerchant($merchant);
- if (!$providers) {
- throw new Exception(
- pht(
- 'There are no payment providers enabled that can add payment '.
- 'methods.'));
- }
-
- $state_params = array(
- 'cartID' => $cart_id,
- 'subscriptionID' => $subscription_id,
- 'merchantID' => $merchant_id,
- );
- $state_params = array_filter($state_params);
-
- $state_uri = new PhutilURI($request->getRequestURI());
- foreach ($state_params as $key => $value) {
- $state_uri->replaceQueryParam($key, $value);
- }
-
- $provider_id = $request->getInt('providerID');
- if (isset($providers[$provider_id])) {
- $provider = $providers[$provider_id];
- } else {
- // If there's more than one provider, ask the user to pick how they
- // want to pay. If there's only one, just pick it.
- if (count($providers) > 1) {
- $menu = $this->newProviderMenu($providers, $state_uri);
-
- return $this->newDialog()
- ->setTitle(pht('Choose a Payment Method'))
- ->appendChild($menu)
- ->addCancelButton($next_uri);
- }
-
- $provider = head($providers);
- }
-
- $provider_id = $provider->getProviderConfig()->getID();
-
- $state_params['providerID'] = $provider_id;
-
- $errors = array();
- $display_exception = null;
- if ($request->isFormPost() && $request->getBool('isProviderForm')) {
- $method = id(new PhortunePaymentMethod())
- ->setAccountPHID($account->getPHID())
- ->setAuthorPHID($viewer->getPHID())
- ->setMerchantPHID($merchant->getPHID())
- ->setProviderPHID($provider->getProviderConfig()->getPHID())
- ->setStatus(PhortunePaymentMethod::STATUS_ACTIVE);
-
- // Limit the rate at which you can attempt to add payment methods. This
- // is intended as a line of defense against using Phortune to validate a
- // large list of stolen credit card numbers.
-
- PhabricatorSystemActionEngine::willTakeAction(
- array($viewer->getPHID()),
- new PhortuneAddPaymentMethodAction(),
- 1);
-
- if (!$errors) {
- $errors = $this->processClientErrors(
- $provider,
- $request->getStr('errors'));
- }
-
- if (!$errors) {
- $client_token_raw = $request->getStr('token');
- $client_token = null;
- try {
- $client_token = phutil_json_decode($client_token_raw);
- } catch (PhutilJSONParserException $ex) {
- $errors[] = pht(
- 'There was an error decoding token information submitted by the '.
- 'client. Expected a JSON-encoded token dictionary, received: %s.',
- nonempty($client_token_raw, pht('nothing')));
- }
-
- if (!$provider->validateCreatePaymentMethodToken($client_token)) {
- $errors[] = pht(
- 'There was an error with the payment token submitted by the '.
- 'client. Expected a valid dictionary, received: %s.',
- $client_token_raw);
- }
-
- if (!$errors) {
- try {
- $provider->createPaymentMethodFromRequest(
- $request,
- $method,
- $client_token);
- } catch (PhortuneDisplayException $exception) {
- $display_exception = $exception;
- } catch (Exception $ex) {
- $errors = array(
- pht('There was an error adding this payment method:'),
- $ex->getMessage(),
- );
- }
- }
- }
-
- if (!$errors && !$display_exception) {
- $xactions = array();
-
- $xactions[] = $method->getApplicationTransactionTemplate()
- ->setTransactionType(PhabricatorTransactions::TYPE_CREATE)
- ->setNewValue(true);
-
- $editor = id(new PhortunePaymentMethodEditor())
- ->setActor($viewer)
- ->setContentSourceFromRequest($request)
- ->setContinueOnNoEffect(true)
- ->setContinueOnMissingFields(true);
-
- $editor->applyTransactions($method, $xactions);
-
- $next_uri = new PhutilURI($next_uri);
-
- // If we added this method on a cart flow, return to the cart to
- // checkout with this payment method selected.
- if ($cart_id) {
- $next_uri->replaceQueryParam('paymentMethodID', $method->getID());
- }
-
- return id(new AphrontRedirectResponse())->setURI($next_uri);
- } else {
- if ($display_exception) {
- $dialog_body = $display_exception->getView();
- } else {
- $dialog_body = id(new PHUIInfoView())
- ->setErrors($errors);
- }
-
- return $this->newDialog()
- ->setTitle(pht('Error Adding Payment Method'))
- ->appendChild($dialog_body)
- ->addCancelButton($request->getRequestURI());
- }
- }
-
- $form = $provider->renderCreatePaymentMethodForm($request, $errors);
-
- $form
- ->setViewer($viewer)
- ->setAction($request->getPath())
- ->setWorkflow(true)
- ->addHiddenInput('isProviderForm', true)
- ->appendChild(
- id(new AphrontFormSubmitControl())
- ->setValue(pht('Add Payment Method'))
- ->addCancelButton($next_uri));
-
- foreach ($state_params as $key => $value) {
- $form->addHiddenInput($key, $value);
- }
-
- $box = id(new PHUIObjectBoxView())
- ->setHeaderText(pht('Method'))
- ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)
- ->setForm($form);
-
- $crumbs = $this->buildApplicationCrumbs()
- ->addTextCrumb(pht('Add Payment Method'))
- ->setBorder(true);
-
- $header = id(new PHUIHeaderView())
- ->setHeader(pht('Add Payment Method'))
- ->setHeaderIcon('fa-plus-square');
-
- $view = id(new PHUITwoColumnView())
- ->setHeader($header)
- ->setFooter(
- array(
- $box,
- ));
-
- return $this->newPage()
- ->setTitle($provider->getPaymentMethodDescription())
- ->setCrumbs($crumbs)
- ->appendChild($view);
-
- }
-
- private function processClientErrors(
- PhortunePaymentProvider $provider,
- $client_errors_raw) {
-
- $errors = array();
-
- $client_errors = null;
- try {
- $client_errors = phutil_json_decode($client_errors_raw);
- } catch (PhutilJSONParserException $ex) {
- $errors[] = pht(
- 'There was an error decoding error information submitted by the '.
- 'client. Expected a JSON-encoded list of error codes, received: %s.',
- nonempty($client_errors_raw, pht('nothing')));
- }
-
- foreach (array_unique($client_errors) as $key => $client_error) {
- $client_errors[$key] = $provider->translateCreatePaymentMethodErrorCode(
- $client_error);
- }
-
- foreach (array_unique($client_errors) as $client_error) {
- switch ($client_error) {
- case PhortuneErrCode::ERR_CC_INVALID_NUMBER:
- $message = pht(
- 'The card number you entered is not a valid card number. Check '.
- 'that you entered it correctly.');
- break;
- case PhortuneErrCode::ERR_CC_INVALID_CVC:
- $message = pht(
- 'The CVC code you entered is not a valid CVC code. Check that '.
- 'you entered it correctly. The CVC code is a 3-digit or 4-digit '.
- 'numeric code which usually appears on the back of the card.');
- break;
- case PhortuneErrCode::ERR_CC_INVALID_EXPIRY:
- $message = pht(
- 'The card expiration date is not a valid expiration date. Check '.
- 'that you entered it correctly. You can not add an expired card '.
- 'as a payment method.');
- break;
- default:
- $message = $provider->getCreatePaymentMethodErrorMessage(
- $client_error);
- if (!$message) {
- $message = pht(
- "There was an unexpected error ('%s') processing payment ".
- "information.",
- $client_error);
-
- phlog($message);
- }
- break;
- }
-
- $errors[$client_error] = $message;
- }
-
- return $errors;
- }
-
- private function newMerchantMenu(array $merchants) {
- assert_instances_of($merchants, 'PhortuneMerchant');
-
- $request = $this->getRequest();
- $viewer = $this->getViewer();
-
- $menu = id(new PHUIObjectItemListView())
- ->setUser($viewer)
- ->setBig(true)
- ->setFlush(true);
-
- foreach ($merchants as $merchant) {
- $merchant_uri = id(new PhutilURI($request->getRequestURI()))
- ->replaceQueryParam('merchantID', $merchant->getID());
-
- $item = id(new PHUIObjectItemView())
- ->setObjectName($merchant->getObjectName())
- ->setHeader($merchant->getName())
- ->setHref($merchant_uri)
- ->setClickable(true)
- ->setImageURI($merchant->getProfileImageURI());
-
- $menu->addItem($item);
- }
-
- return $menu;
- }
-
- private function newProviderMenu(array $providers, PhutilURI $state_uri) {
- assert_instances_of($providers, 'PhortunePaymentProvider');
-
- $request = $this->getRequest();
- $viewer = $this->getViewer();
-
- $menu = id(new PHUIObjectItemListView())
- ->setUser($viewer)
- ->setBig(true)
- ->setFlush(true);
-
- foreach ($providers as $provider) {
- $provider_id = $provider->getProviderConfig()->getID();
-
- $provider_uri = id(clone $state_uri)
- ->replaceQueryParam('providerID', $provider_id);
-
- $description = $provider->getPaymentMethodDescription();
- $icon_uri = $provider->getPaymentMethodIcon();
- $details = $provider->getPaymentMethodProviderDescription();
-
- $icon = id(new PHUIIconView())
- ->setSpriteSheet(PHUIIconView::SPRITE_LOGIN)
- ->setSpriteIcon($icon_uri);
-
- $item = id(new PHUIObjectItemView())
- ->setHeader($description)
- ->setHref($provider_uri)
- ->setClickable(true)
- ->addAttribute($details)
- ->setImageIcon($icon);
-
- $menu->addItem($item);
- }
-
- return $menu;
- }
-
-}
diff --git a/src/applications/phortune/controller/paymentmethod/PhortunePaymentMethodDisableController.php b/src/applications/phortune/controller/paymentmethod/PhortunePaymentMethodDisableController.php
deleted file mode 100644
--- a/src/applications/phortune/controller/paymentmethod/PhortunePaymentMethodDisableController.php
+++ /dev/null
@@ -1,96 +0,0 @@
-getViewer();
- $method_id = $request->getURIData('id');
-
- $method = id(new PhortunePaymentMethodQuery())
- ->setViewer($viewer)
- ->withIDs(array($method_id))
- ->requireCapabilities(
- array(
- PhabricatorPolicyCapability::CAN_VIEW,
- PhabricatorPolicyCapability::CAN_EDIT,
- ))
- ->executeOne();
- if (!$method) {
- return new Aphront404Response();
- }
-
- if ($method->getStatus() == PhortunePaymentMethod::STATUS_DISABLED) {
- return new Aphront400Response();
- }
-
- $subscription_id = $request->getInt('subscriptionID');
- if ($subscription_id) {
- $subscription = id(new PhortuneSubscriptionQuery())
- ->setViewer($viewer)
- ->withIDs(array($subscription_id))
- ->withAccountPHIDs(array($method->getAccountPHID()))
- ->withMerchantPHIDs(array($method->getMerchantPHID()))
- ->executeOne();
- if (!$subscription) {
- return new Aphront404Response();
- }
- } else {
- $subscription = null;
- }
-
- $account = $method->getAccount();
- $account_id = $account->getID();
- $account_uri = $account->getPaymentMethodsURI();
-
- if ($request->isFormPost()) {
- $xactions = array();
-
- $xactions[] = $method->getApplicationTransactionTemplate()
- ->setTransactionType(
- PhortunePaymentMethodStatusTransaction::TRANSACTIONTYPE)
- ->setNewValue(PhortunePaymentMethod::STATUS_DISABLED);
-
- $editor = id(new PhortunePaymentMethodEditor())
- ->setActor($viewer)
- ->setContentSourceFromRequest($request)
- ->setContinueOnNoEffect(true)
- ->setContinueOnMissingFields(true);
-
- $editor->applyTransactions($method, $xactions);
-
- if ($subscription) {
- $next_uri = $subscription->getURI();
- } else {
- $next_uri = $account_uri;
- }
-
- return id(new AphrontRedirectResponse())->setURI($next_uri);
- }
-
- $method_phid = $method->getPHID();
- $handles = $viewer->loadHandles(
- array(
- $method_phid,
- ));
-
- $method_handle = $handles[$method_phid];
- $method_display = $method_handle->renderLink();
- $method_display = phutil_tag('strong', array(), $method_display);
-
- return $this->newDialog()
- ->setTitle(pht('Remove Payment Method'))
- ->addHiddenInput('subscriptionID', $subscription_id)
- ->appendParagraph(
- pht(
- 'Remove the payment method %s from your account?',
- $method_display))
- ->appendParagraph(
- pht(
- 'You will no longer be able to make payments using this payment '.
- 'method.'))
- ->addCancelButton($account_uri)
- ->addSubmitButton(pht('Remove Payment Method'));
- }
-
-}
diff --git a/src/applications/phortune/controller/paymentmethod/PhortunePaymentMethodEditController.php b/src/applications/phortune/controller/paymentmethod/PhortunePaymentMethodEditController.php
deleted file mode 100644
--- a/src/applications/phortune/controller/paymentmethod/PhortunePaymentMethodEditController.php
+++ /dev/null
@@ -1,100 +0,0 @@
-getViewer();
- $method_id = $request->getURIData('id');
-
- $method = id(new PhortunePaymentMethodQuery())
- ->setViewer($viewer)
- ->withIDs(array($method_id))
- ->requireCapabilities(
- array(
- PhabricatorPolicyCapability::CAN_VIEW,
- PhabricatorPolicyCapability::CAN_EDIT,
- ))
- ->executeOne();
- if (!$method) {
- return new Aphront404Response();
- }
-
- $next_uri = $method->getURI();
-
- $account = $method->getAccount();
- $v_name = $method->getName();
-
- if ($request->isFormPost()) {
- $v_name = $request->getStr('name');
-
- $xactions = array();
-
- $xactions[] = $method->getApplicationTransactionTemplate()
- ->setTransactionType(
- PhortunePaymentMethodNameTransaction::TRANSACTIONTYPE)
- ->setNewValue($v_name);
-
- $editor = id(new PhortunePaymentMethodEditor())
- ->setActor($viewer)
- ->setContentSourceFromRequest($request)
- ->setContinueOnNoEffect(true)
- ->setContinueOnMissingFields(true);
-
- $editor->applyTransactions($method, $xactions);
-
- return id(new AphrontRedirectResponse())->setURI($next_uri);
- }
-
- $provider = $method->buildPaymentProvider();
-
- $form = id(new AphrontFormView())
- ->setViewer($viewer)
- ->appendChild(
- id(new AphrontFormTextControl())
- ->setLabel(pht('Name'))
- ->setName('name')
- ->setValue($method->getName()))
- ->appendChild(
- id(new AphrontFormStaticControl())
- ->setLabel(pht('Details'))
- ->setValue($method->getSummary()))
- ->appendChild(
- id(new AphrontFormStaticControl())
- ->setLabel(pht('Expires'))
- ->setValue($method->getDisplayExpires()))
- ->appendChild(
- id(new AphrontFormSubmitControl())
- ->addCancelButton($next_uri)
- ->setValue(pht('Save Changes')));
-
- $box = id(new PHUIObjectBoxView())
- ->setHeaderText(pht('Payment Method'))
- ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)
- ->setForm($form);
-
- $crumbs = $this->buildApplicationCrumbs()
- ->addTextCrumb($account->getName(), $account->getURI())
- ->addTextCrumb(pht('Payment Methods'), $account->getPaymentMethodsURI())
- ->addTextCrumb($method->getObjectName(), $method->getURI())
- ->addTextCrumb(pht('Edit'))
- ->setBorder(true);
-
- $header = id(new PHUIHeaderView())
- ->setHeader(pht('Edit Payment Method'))
- ->setHeaderIcon('fa-pencil');
-
- $view = id(new PHUITwoColumnView())
- ->setHeader($header)
- ->setFooter(
- array(
- $box,
- ));
-
- return $this->newPage()
- ->setTitle(pht('Edit Payment Method'))
- ->setCrumbs($crumbs)
- ->appendChild($view);
- }
-
-}
diff --git a/src/applications/phortune/controller/product/PhortuneProductListController.php b/src/applications/phortune/controller/product/PhortuneProductListController.php
deleted file mode 100644
--- a/src/applications/phortune/controller/product/PhortuneProductListController.php
+++ /dev/null
@@ -1,72 +0,0 @@
-getViewer();
-
- $pager = new AphrontCursorPagerView();
- $pager->readFromRequest($request);
-
- $query = id(new PhortuneProductQuery())
- ->setViewer($viewer);
-
- $products = $query->executeWithCursorPager($pager);
-
- $title = pht('Product List');
-
- $crumbs = $this->buildApplicationCrumbs();
- $crumbs->addTextCrumb(
- pht('Products'),
- $this->getApplicationURI('product/'));
- $crumbs->addAction(
- id(new PHUIListItemView())
- ->setName(pht('Create Product'))
- ->setHref($this->getApplicationURI('product/edit/'))
- ->setIcon('fa-plus-square'));
- $crumbs->setBorder(true);
-
- $product_list = id(new PHUIObjectItemListView())
- ->setUser($viewer)
- ->setNoDataString(pht('No products.'));
-
- foreach ($products as $product) {
- $view_uri = $this->getApplicationURI(
- 'product/view/'.$product->getID().'/');
-
- $price = $product->getPriceAsCurrency();
-
- $item = id(new PHUIObjectItemView())
- ->setObjectName($product->getID())
- ->setHeader($product->getProductName())
- ->setHref($view_uri)
- ->addAttribute($price->formatForDisplay())
- ->setImageIcon('fa-gift');
-
- $product_list->addItem($item);
- }
-
- $box = id(new PHUIObjectBoxView())
- ->setHeaderText(pht('Products'))
- ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)
- ->setObjectList($product_list);
-
- $header = id(new PHUIHeaderView())
- ->setHeader(pht('Products'))
- ->setHeaderIcon('fa-gift');
-
- $view = id(new PHUITwoColumnView())
- ->setHeader($header)
- ->setFooter(array(
- $box,
- $pager,
- ));
-
- return $this->newPage()
- ->setTitle($title)
- ->setCrumbs($crumbs)
- ->appendChild($view);
-
- }
-
-}
diff --git a/src/applications/phortune/controller/product/PhortuneProductViewController.php b/src/applications/phortune/controller/product/PhortuneProductViewController.php
deleted file mode 100644
--- a/src/applications/phortune/controller/product/PhortuneProductViewController.php
+++ /dev/null
@@ -1,58 +0,0 @@
-getViewer();
- $id = $request->getURIData('id');
-
- $product = id(new PhortuneProductQuery())
- ->setViewer($viewer)
- ->withIDs(array($id))
- ->executeOne();
- if (!$product) {
- return new Aphront404Response();
- }
-
- $title = pht('Product: %s', $product->getProductName());
-
- $header = id(new PHUIHeaderView())
- ->setHeader($product->getProductName())
- ->setHeaderIcon('fa-gift');
-
- $edit_uri = $this->getApplicationURI('product/edit/'.$product->getID().'/');
-
- $crumbs = $this->buildApplicationCrumbs();
- $crumbs->addTextCrumb(
- pht('Products'),
- $this->getApplicationURI('product/'));
- $crumbs->addTextCrumb(
- pht('#%d', $product->getID()),
- $request->getRequestURI());
- $crumbs->setBorder(true);
-
- $properties = id(new PHUIPropertyListView())
- ->setUser($viewer)
- ->addProperty(
- pht('Price'),
- $product->getPriceAsCurrency()->formatForDisplay());
-
- $object_box = id(new PHUIObjectBoxView())
- ->setHeaderText(pht('Details'))
- ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)
- ->addPropertyList($properties);
-
- $view = id(new PHUITwoColumnView())
- ->setHeader($header)
- ->setFooter(array(
- $object_box,
- ));
-
- return $this->newPage()
- ->setTitle($title)
- ->setCrumbs($crumbs)
- ->appendChild($view);
-
- }
-
-}
diff --git a/src/applications/phortune/controller/provider/PhortuneProviderActionController.php b/src/applications/phortune/controller/provider/PhortuneProviderActionController.php
deleted file mode 100644
--- a/src/applications/phortune/controller/provider/PhortuneProviderActionController.php
+++ /dev/null
@@ -1,81 +0,0 @@
-action = $action;
- return $this;
- }
-
- public function getAction() {
- return $this->action;
- }
-
- public function handleRequest(AphrontRequest $request) {
- $viewer = $request->getViewer();
- $id = $request->getURIData('id');
- $this->setAction($request->getURIData('action'));
-
- $provider_config = id(new PhortunePaymentProviderConfigQuery())
- ->setViewer($viewer)
- ->withIDs(array($id))
- ->executeOne();
- if (!$provider_config) {
- return new Aphront404Response();
- }
-
- $provider = $provider_config->buildProvider();
-
- if (!$provider->canRespondToControllerAction($this->getAction())) {
- return new Aphront404Response();
- }
-
- $response = $provider->processControllerRequest($this, $request);
-
- if ($response instanceof AphrontResponse) {
- return $response;
- }
-
- $title = pht('Phortune');
-
- return $this->newPage()
- ->setTitle($title)
- ->appendChild($response);
-
- }
-
-
- public function loadCart($id) {
- $request = $this->getRequest();
- $viewer = $request->getUser();
-
- return id(new PhortuneCartQuery())
- ->setViewer($viewer)
- ->needPurchases(true)
- ->withIDs(array($id))
- ->requireCapabilities(
- array(
- PhabricatorPolicyCapability::CAN_VIEW,
- PhabricatorPolicyCapability::CAN_EDIT,
- ))
- ->executeOne();
- }
-
- public function loadActiveCharge(PhortuneCart $cart) {
- $request = $this->getRequest();
- $viewer = $request->getUser();
-
- return id(new PhortuneChargeQuery())
- ->setViewer($viewer)
- ->withCartPHIDs(array($cart->getPHID()))
- ->withStatuses(
- array(
- PhortuneCharge::STATUS_CHARGING,
- ))
- ->executeOne();
- }
-
-}
diff --git a/src/applications/phortune/currency/PhortuneCurrency.php b/src/applications/phortune/currency/PhortuneCurrency.php
deleted file mode 100644
--- a/src/applications/phortune/currency/PhortuneCurrency.php
+++ /dev/null
@@ -1,239 +0,0 @@
- 1) {
- self::throwFormatException($string);
- }
-
- if (substr_count($value, '$') > 1) {
- self::throwFormatException($string);
- }
-
- $value = str_replace('$', '', $value);
- $value = (float)$value;
- $value = (int)round(100 * $value);
-
- $currency = idx($matches, 2, $default);
- switch ($currency) {
- case 'USD':
- break;
- default:
- throw new Exception(pht("Unsupported currency '%s'!", $currency));
- }
-
- return self::newFromValueAndCurrency($value, $currency);
- }
-
- public static function newFromValueAndCurrency($value, $currency) {
- $obj = new PhortuneCurrency();
-
- $obj->value = $value;
- $obj->currency = $currency;
-
- return $obj;
- }
-
- public static function newFromList(array $list) {
- assert_instances_of($list, __CLASS__);
-
- if (!$list) {
- return self::newEmptyCurrency();
- }
-
- $total = null;
- foreach ($list as $item) {
- if ($total === null) {
- $total = $item;
- } else {
- $total = $total->add($item);
- }
- }
-
- return $total;
- }
-
- public function formatForDisplay() {
- $bare = $this->formatBareValue();
- return '$'.$bare.' '.$this->currency;
- }
-
- public function serializeForStorage() {
- return $this->formatBareValue().' '.$this->currency;
- }
-
- public function formatBareValue() {
- switch ($this->currency) {
- case 'USD':
- return sprintf('%.02f', $this->value / 100);
- default:
- throw new Exception(
- pht('Unsupported currency ("%s")!', $this->currency));
- }
- }
-
- public function getValue() {
- return $this->value;
- }
-
- public function getCurrency() {
- return $this->currency;
- }
-
- public function getValueInUSDCents() {
- if ($this->currency !== 'USD') {
- throw new Exception(pht('Unexpected currency!'));
- }
- return $this->value;
- }
-
- private static function throwFormatException($string) {
- throw new Exception(pht("Invalid currency format ('%s').", $string));
- }
-
- private function throwUnlikeCurrenciesException(PhortuneCurrency $other) {
- throw new Exception(
- pht(
- 'Trying to operate on unlike currencies ("%s" and "%s")!',
- $this->currency,
- $other->currency));
- }
-
- public function add(PhortuneCurrency $other) {
- if ($this->currency !== $other->currency) {
- $this->throwUnlikeCurrenciesException($other);
- }
-
- $currency = new PhortuneCurrency();
-
- // TODO: This should check for integer overflows, etc.
- $currency->value = $this->value + $other->value;
- $currency->currency = $this->currency;
-
- return $currency;
- }
-
- public function subtract(PhortuneCurrency $other) {
- if ($this->currency !== $other->currency) {
- $this->throwUnlikeCurrenciesException($other);
- }
-
- $currency = new PhortuneCurrency();
-
- // TODO: This should check for integer overflows, etc.
- $currency->value = $this->value - $other->value;
- $currency->currency = $this->currency;
-
- return $currency;
- }
-
- public function isEqualTo(PhortuneCurrency $other) {
- if ($this->currency !== $other->currency) {
- $this->throwUnlikeCurrenciesException($other);
- }
-
- return ($this->value === $other->value);
- }
-
- public function negate() {
- $currency = new PhortuneCurrency();
- $currency->value = -$this->value;
- $currency->currency = $this->currency;
- return $currency;
- }
-
- public function isPositive() {
- return ($this->value > 0);
- }
-
- public function isGreaterThan(PhortuneCurrency $other) {
- if ($this->currency !== $other->currency) {
- $this->throwUnlikeCurrenciesException($other);
- }
- return $this->value > $other->value;
- }
-
- /**
- * Assert that a currency value lies within a range.
- *
- * Throws if the value is not between the minimum and maximum, inclusive.
- *
- * In particular, currency values can be negative (to represent a debt or
- * credit), so checking against zero may be useful to make sure a value
- * has the expected sign.
- *
- * @param string|null Currency string, or null to skip check.
- * @param string|null Currency string, or null to skip check.
- * @return this
- */
- public function assertInRange($minimum, $maximum) {
- if ($minimum !== null && $maximum !== null) {
- $min = self::newFromString($minimum);
- $max = self::newFromString($maximum);
- if ($min->value > $max->value) {
- throw new Exception(
- pht(
- 'Range (%s - %s) is not valid!',
- $min->formatForDisplay(),
- $max->formatForDisplay()));
- }
- }
-
- if ($minimum !== null) {
- $min = self::newFromString($minimum);
- if ($min->value > $this->value) {
- throw new Exception(
- pht(
- 'Minimum allowed amount is %s.',
- $min->formatForDisplay()));
- }
- }
-
- if ($maximum !== null) {
- $max = self::newFromString($maximum);
- if ($max->value < $this->value) {
- throw new Exception(
- pht(
- 'Maximum allowed amount is %s.',
- $max->formatForDisplay()));
- }
- }
-
- return $this;
- }
-
-
-}
diff --git a/src/applications/phortune/currency/PhortuneCurrencySerializer.php b/src/applications/phortune/currency/PhortuneCurrencySerializer.php
deleted file mode 100644
--- a/src/applications/phortune/currency/PhortuneCurrencySerializer.php
+++ /dev/null
@@ -1,21 +0,0 @@
-serializeForStorage();
- }
-
-}
diff --git a/src/applications/phortune/currency/__tests__/PhortuneCurrencyTestCase.php b/src/applications/phortune/currency/__tests__/PhortuneCurrencyTestCase.php
deleted file mode 100644
--- a/src/applications/phortune/currency/__tests__/PhortuneCurrencyTestCase.php
+++ /dev/null
@@ -1,162 +0,0 @@
- '$0.00 USD',
- '.01' => '$0.01 USD',
- '1.00' => '$1.00 USD',
- '-1.23' => '$-1.23 USD',
- '50000.00' => '$50000.00 USD',
- );
-
- foreach ($map as $input => $expect) {
- $this->assertEqual(
- $expect,
- PhortuneCurrency::newFromString($input, 'USD')->formatForDisplay(),
- "newFromString({$input})->formatForDisplay()");
- }
- }
-
- public function testCurrencyFormatBareValue() {
-
- // NOTE: The PayPal API depends on the behavior of the bare value format!
-
- $map = array(
- '0' => '0.00',
- '.01' => '0.01',
- '1.00' => '1.00',
- '-1.23' => '-1.23',
- '50000.00' => '50000.00',
- );
-
- foreach ($map as $input => $expect) {
- $this->assertEqual(
- $expect,
- PhortuneCurrency::newFromString($input, 'USD')->formatBareValue(),
- "newFromString({$input})->formatBareValue()");
- }
- }
-
- public function testCurrencyFromString() {
-
- $map = array(
- '1.00' => 100,
- '1.00 USD' => 100,
- '$1.00' => 100,
- '$1.00 USD' => 100,
- '-$1.00 USD' => -100,
- '$-1.00 USD' => -100,
- '1' => 100,
- '.99' => 99,
- '$.99' => 99,
- '-$.99' => -99,
- '$-.99' => -99,
- '$.99 USD' => 99,
- );
-
- foreach ($map as $input => $expect) {
- $this->assertEqual(
- $expect,
- PhortuneCurrency::newFromString($input, 'USD')->getValue(),
- "newFromString({$input})->getValue()");
- }
- }
-
- public function testInvalidCurrencyFromString() {
- $map = array(
- '--1',
- '$$1',
- '1 JPY',
- 'buck fiddy',
- '1.2.3',
- '1 dollar',
- );
-
- foreach ($map as $input) {
- $caught = null;
- try {
- PhortuneCurrency::newFromString($input, 'USD');
- } catch (Exception $ex) {
- $caught = $ex;
- }
- $this->assertTrue($caught instanceof Exception, "{$input}");
- }
- }
-
- public function testCurrencyRanges() {
- $value = PhortuneCurrency::newFromString('3.00 USD');
-
- $value->assertInRange('2.00 USD', '4.00 USD');
- $value->assertInRange('2.00 USD', null);
- $value->assertInRange(null, '4.00 USD');
- $value->assertInRange(null, null);
-
- $caught = null;
- try {
- $value->assertInRange('4.00 USD', null);
- } catch (Exception $ex) {
- $caught = $ex;
- }
- $this->assertTrue($caught instanceof Exception);
-
- $caught = null;
- try {
- $value->assertInRange(null, '2.00 USD');
- } catch (Exception $ex) {
- $caught = $ex;
- }
- $this->assertTrue($caught instanceof Exception);
-
- $caught = null;
- try {
- // Minimum and maximum are reversed here.
- $value->assertInRange('4.00 USD', '2.00 USD');
- } catch (Exception $ex) {
- $caught = $ex;
- }
- $this->assertTrue($caught instanceof Exception);
-
- $credit = PhortuneCurrency::newFromString('-3.00 USD');
- $credit->assertInRange('-4.00 USD', '-2.00 USD');
- $credit->assertInRange('-4.00 USD', null);
- $credit->assertInRange(null, '-2.00 USD');
- $credit->assertInRange(null, null);
-
- $caught = null;
- try {
- $credit->assertInRange('-2.00 USD', null);
- } catch (Exception $ex) {
- $caught = $ex;
- }
- $this->assertTrue($caught instanceof Exception);
-
- $caught = null;
- try {
- $credit->assertInRange(null, '-4.00 USD');
- } catch (Exception $ex) {
- $caught = $ex;
- }
- $this->assertTrue($caught instanceof Exception);
- }
-
- public function testAddCurrency() {
- $cases = array(
- array('0.00 USD', '0.00 USD', '$0.00 USD'),
- array('1.00 USD', '1.00 USD', '$2.00 USD'),
- array('1.23 USD', '9.77 USD', '$11.00 USD'),
- );
-
- foreach ($cases as $case) {
- list($l, $r, $expect) = $case;
-
- $l = PhortuneCurrency::newFromString($l);
- $r = PhortuneCurrency::newFromString($r);
- $sum = $l->add($r);
-
- $this->assertEqual($expect, $sum->formatForDisplay());
- }
- }
-
-}
diff --git a/src/applications/phortune/edge/PhortuneAccountHasMemberEdgeType.php b/src/applications/phortune/edge/PhortuneAccountHasMemberEdgeType.php
deleted file mode 100644
--- a/src/applications/phortune/edge/PhortuneAccountHasMemberEdgeType.php
+++ /dev/null
@@ -1,101 +0,0 @@
-getViewer());
- }
-
- protected function newObjectQuery() {
- return new PhortuneAccountQuery();
- }
-
- protected function getObjectCreateTitleText($object) {
- return pht('Create Payment Account');
- }
-
- protected function getObjectEditTitleText($object) {
- return pht('Edit Account: %s', $object->getName());
- }
-
- protected function getObjectEditShortText($object) {
- return $object->getName();
- }
-
- protected function getObjectCreateShortText() {
- return pht('Create Account');
- }
-
- protected function getObjectName() {
- return pht('Account');
- }
-
- protected function getObjectCreateCancelURI($object) {
- return $this->getApplication()->getApplicationURI('/');
- }
-
- protected function getEditorURI() {
- return $this->getApplication()->getApplicationURI('edit/');
- }
-
- protected function getObjectViewURI($object) {
- if ($this->getIsCreate()) {
- return $object->getURI();
- } else {
- return $object->getDetailsURI();
- }
- }
-
- protected function buildCustomEditFields($object) {
- $viewer = $this->getViewer();
-
- if ($this->getIsCreate()) {
- $member_phids = array($viewer->getPHID());
- } else {
- $member_phids = $object->getMemberPHIDs();
- }
-
- $fields = array(
- id(new PhabricatorTextEditField())
- ->setKey('name')
- ->setLabel(pht('Name'))
- ->setDescription(pht('Account name.'))
- ->setConduitTypeDescription(pht('New account name.'))
- ->setTransactionType(
- PhortuneAccountNameTransaction::TRANSACTIONTYPE)
- ->setValue($object->getName())
- ->setIsRequired(true),
-
- id(new PhabricatorUsersEditField())
- ->setKey('managers')
- ->setAliases(array('memberPHIDs', 'managerPHIDs'))
- ->setLabel(pht('Managers'))
- ->setUseEdgeTransactions(true)
- ->setTransactionType(PhabricatorTransactions::TYPE_EDGE)
- ->setMetadataValue(
- 'edge:type',
- PhortuneAccountHasMemberEdgeType::EDGECONST)
- ->setDescription(pht('Initial account managers.'))
- ->setConduitDescription(pht('Set account managers.'))
- ->setConduitTypeDescription(pht('New list of managers.'))
- ->setInitialValue($object->getMemberPHIDs())
- ->setValue($member_phids),
-
- id(new PhabricatorTextEditField())
- ->setKey('billingName')
- ->setLabel(pht('Billing Name'))
- ->setDescription(pht('Account name for billing purposes.'))
- ->setConduitTypeDescription(pht('New account billing name.'))
- ->setTransactionType(
- PhortuneAccountBillingNameTransaction::TRANSACTIONTYPE)
- ->setValue($object->getBillingName()),
-
- id(new PhabricatorTextAreaEditField())
- ->setKey('billingAddress')
- ->setLabel(pht('Billing Address'))
- ->setDescription(pht('Account billing address.'))
- ->setConduitTypeDescription(pht('New account billing address.'))
- ->setTransactionType(
- PhortuneAccountBillingAddressTransaction::TRANSACTIONTYPE)
- ->setValue($object->getBillingAddress()),
-
- );
-
- return $fields;
-
- }
-
-}
diff --git a/src/applications/phortune/editor/PhortuneAccountEditor.php b/src/applications/phortune/editor/PhortuneAccountEditor.php
deleted file mode 100644
--- a/src/applications/phortune/editor/PhortuneAccountEditor.php
+++ /dev/null
@@ -1,82 +0,0 @@
-requireActor();
-
- switch ($type) {
- case PhabricatorTransactions::TYPE_EDGE:
- foreach ($xactions as $xaction) {
- switch ($xaction->getMetadataValue('edge:type')) {
- case PhortuneAccountHasMemberEdgeType::EDGECONST:
- $old = $object->getMemberPHIDs();
- $new = $this->getPHIDTransactionNewValue($xaction, $old);
-
- $old = array_fuse($old);
- $new = array_fuse($new);
-
- foreach ($new as $new_phid) {
- if (isset($old[$new_phid])) {
- continue;
- }
-
- $user = id(new PhabricatorPeopleQuery())
- ->setViewer($viewer)
- ->withPHIDs(array($new_phid))
- ->executeOne();
- if (!$user) {
- $error = new PhabricatorApplicationTransactionValidationError(
- $type,
- pht('Invalid'),
- pht(
- 'Account managers must be valid users, "%s" is not.',
- $new_phid));
- $errors[] = $error;
- continue;
- }
- }
-
- $actor_phid = $this->getActingAsPHID();
- if (isset($old[$actor_phid]) && !isset($new[$actor_phid])) {
- $error = new PhabricatorApplicationTransactionValidationError(
- $type,
- pht('Invalid'),
- pht('You can not remove yourself as an account manager.'),
- $xaction);
- $errors[] = $error;
- }
- break;
- }
- }
- break;
- }
- return $errors;
- }
-
-}
diff --git a/src/applications/phortune/editor/PhortuneAccountEmailEditEngine.php b/src/applications/phortune/editor/PhortuneAccountEmailEditEngine.php
deleted file mode 100644
--- a/src/applications/phortune/editor/PhortuneAccountEmailEditEngine.php
+++ /dev/null
@@ -1,114 +0,0 @@
-account = $account;
- return $this;
- }
-
- public function getAccount() {
- return $this->account;
- }
-
- public function getEngineName() {
- return pht('Phortune Account Emails');
- }
-
- public function getEngineApplicationClass() {
- return 'PhabricatorPhortuneApplication';
- }
-
- public function getSummaryHeader() {
- return pht('Configure Phortune Account Email Forms');
- }
-
- public function getSummaryText() {
- return pht(
- 'Configure creation and editing forms for Phortune Account '.
- 'Email Addresses.');
- }
-
- public function isEngineConfigurable() {
- return false;
- }
-
- protected function newEditableObject() {
- $viewer = $this->getViewer();
-
- $account = $this->getAccount();
- if (!$account) {
- $account = new PhortuneAccount();
- }
-
- return PhortuneAccountEmail::initializeNewAddress(
- $account,
- $viewer->getPHID());
- }
-
- protected function newObjectQuery() {
- return new PhortuneAccountEmailQuery();
- }
-
- protected function getObjectCreateTitleText($object) {
- return pht('Add Email Address');
- }
-
- protected function getObjectEditTitleText($object) {
- return pht('Edit Account Email: %s', $object->getAddress());
- }
-
- protected function getObjectEditShortText($object) {
- return pht('%s', $object->getAddress());
- }
-
- protected function getObjectCreateShortText() {
- return pht('Add Email Address');
- }
-
- protected function getObjectName() {
- return pht('Account Email');
- }
-
- protected function getObjectCreateCancelURI($object) {
- return $this->getAccount()->getEmailAddressesURI();
- }
-
- protected function getEditorURI() {
- return $this->getApplication()->getApplicationURI('address/edit/');
- }
-
- protected function getObjectViewURI($object) {
- return $object->getURI();
- }
-
- protected function buildCustomEditFields($object) {
- $viewer = $this->getViewer();
-
- if ($this->getIsCreate()) {
- $address_field = id(new PhabricatorTextEditField())
- ->setTransactionType(
- PhortuneAccountEmailAddressTransaction::TRANSACTIONTYPE)
- ->setIsRequired(true);
- } else {
- $address_field = new PhabricatorStaticEditField();
- }
-
- $address_field
- ->setKey('address')
- ->setLabel(pht('Email Address'))
- ->setDescription(pht('Email address.'))
- ->setConduitTypeDescription(pht('New email address.'))
- ->setValue($object->getAddress());
-
- return array(
- $address_field,
- );
- }
-
-}
diff --git a/src/applications/phortune/editor/PhortuneAccountEmailEditor.php b/src/applications/phortune/editor/PhortuneAccountEmailEditor.php
deleted file mode 100644
--- a/src/applications/phortune/editor/PhortuneAccountEmailEditor.php
+++ /dev/null
@@ -1,36 +0,0 @@
-getAddress()),
- null);
-
- throw new PhabricatorApplicationTransactionValidationException($errors);
- }
-
-}
diff --git a/src/applications/phortune/editor/PhortuneCartEditor.php b/src/applications/phortune/editor/PhortuneCartEditor.php
deleted file mode 100644
--- a/src/applications/phortune/editor/PhortuneCartEditor.php
+++ /dev/null
@@ -1,347 +0,0 @@
-invoiceIssues = $invoice_issues;
- return $this;
- }
-
- public function getInvoiceIssues() {
- return $this->invoiceIssues;
- }
-
- public function isInvoice() {
- return (bool)$this->invoiceIssues;
- }
-
- public function getEditorApplicationClass() {
- return 'PhabricatorPhortuneApplication';
- }
-
- public function getEditorObjectsDescription() {
- return pht('Phortune Carts');
- }
-
- public function getTransactionTypes() {
- $types = parent::getTransactionTypes();
-
- $types[] = PhortuneCartTransaction::TYPE_CREATED;
- $types[] = PhortuneCartTransaction::TYPE_PURCHASED;
- $types[] = PhortuneCartTransaction::TYPE_HOLD;
- $types[] = PhortuneCartTransaction::TYPE_REVIEW;
- $types[] = PhortuneCartTransaction::TYPE_CANCEL;
- $types[] = PhortuneCartTransaction::TYPE_REFUND;
- $types[] = PhortuneCartTransaction::TYPE_INVOICED;
-
- return $types;
- }
-
- protected function getCustomTransactionOldValue(
- PhabricatorLiskDAO $object,
- PhabricatorApplicationTransaction $xaction) {
-
- switch ($xaction->getTransactionType()) {
- case PhortuneCartTransaction::TYPE_CREATED:
- case PhortuneCartTransaction::TYPE_PURCHASED:
- case PhortuneCartTransaction::TYPE_HOLD:
- case PhortuneCartTransaction::TYPE_REVIEW:
- case PhortuneCartTransaction::TYPE_CANCEL:
- case PhortuneCartTransaction::TYPE_REFUND:
- case PhortuneCartTransaction::TYPE_INVOICED:
- return null;
- }
-
- return parent::getCustomTransactionOldValue($object, $xaction);
- }
-
- protected function getCustomTransactionNewValue(
- PhabricatorLiskDAO $object,
- PhabricatorApplicationTransaction $xaction) {
-
- switch ($xaction->getTransactionType()) {
- case PhortuneCartTransaction::TYPE_CREATED:
- case PhortuneCartTransaction::TYPE_PURCHASED:
- case PhortuneCartTransaction::TYPE_HOLD:
- case PhortuneCartTransaction::TYPE_REVIEW:
- case PhortuneCartTransaction::TYPE_CANCEL:
- case PhortuneCartTransaction::TYPE_REFUND:
- case PhortuneCartTransaction::TYPE_INVOICED:
- return $xaction->getNewValue();
- }
-
- return parent::getCustomTransactionNewValue($object, $xaction);
- }
-
- protected function applyCustomInternalTransaction(
- PhabricatorLiskDAO $object,
- PhabricatorApplicationTransaction $xaction) {
-
- switch ($xaction->getTransactionType()) {
- case PhortuneCartTransaction::TYPE_CREATED:
- case PhortuneCartTransaction::TYPE_PURCHASED:
- case PhortuneCartTransaction::TYPE_HOLD:
- case PhortuneCartTransaction::TYPE_REVIEW:
- case PhortuneCartTransaction::TYPE_CANCEL:
- case PhortuneCartTransaction::TYPE_REFUND:
- case PhortuneCartTransaction::TYPE_INVOICED:
- return;
- }
-
- return parent::applyCustomInternalTransaction($object, $xaction);
- }
-
- protected function applyCustomExternalTransaction(
- PhabricatorLiskDAO $object,
- PhabricatorApplicationTransaction $xaction) {
-
- switch ($xaction->getTransactionType()) {
- case PhortuneCartTransaction::TYPE_CREATED:
- case PhortuneCartTransaction::TYPE_PURCHASED:
- case PhortuneCartTransaction::TYPE_HOLD:
- case PhortuneCartTransaction::TYPE_REVIEW:
- case PhortuneCartTransaction::TYPE_CANCEL:
- case PhortuneCartTransaction::TYPE_REFUND:
- case PhortuneCartTransaction::TYPE_INVOICED:
- return;
- }
-
- return parent::applyCustomExternalTransaction($object, $xaction);
- }
-
- protected function shouldSendMail(
- PhabricatorLiskDAO $object,
- array $xactions) {
- return true;
- }
-
- protected function buildMailTemplate(PhabricatorLiskDAO $object) {
- $id = $object->getID();
- $name = $object->getName();
-
- return id(new PhabricatorMetaMTAMail())
- ->setSubject(pht('Order %d: %s', $id, $name));
- }
-
- protected function buildMailBody(
- PhabricatorLiskDAO $object,
- array $xactions) {
-
- $body = parent::buildMailBody($object, $xactions);
-
- if ($this->isInvoice()) {
- $issues = $this->getInvoiceIssues();
- foreach ($issues as $key => $issue) {
- $issues[$key] = ' - '.$issue;
- }
- $issues = implode("\n", $issues);
-
- $overview = pht(
- "Payment for this invoice could not be processed automatically:\n\n".
- "%s",
- $issues);
-
- $body->addRemarkupSection(null, $overview);
-
- $body->addLinkSection(
- pht('PAY NOW'),
- PhabricatorEnv::getProductionURI($object->getCheckoutURI()));
- }
-
- $items = array();
- foreach ($object->getPurchases() as $purchase) {
- $name = $purchase->getFullDisplayName();
- $price = $purchase->getTotalPriceAsCurrency()->formatForDisplay();
-
- $items[] = "{$name} {$price}";
- }
-
- $body->addTextSection(pht('ORDER CONTENTS'), implode("\n", $items));
-
- if ($this->isInvoice()) {
- $subscription = id(new PhortuneSubscriptionQuery())
- ->setViewer($this->requireActor())
- ->withPHIDs(array($object->getSubscriptionPHID()))
- ->executeOne();
- if ($subscription) {
- $body->addLinkSection(
- pht('SUBSCRIPTION'),
- PhabricatorEnv::getProductionURI($subscription->getURI()));
- }
- } else {
- $body->addLinkSection(
- pht('ORDER DETAIL'),
- PhabricatorEnv::getProductionURI($object->getDetailURI()));
- }
-
- $account_uri = '/phortune/'.$object->getAccount()->getID().'/';
- $body->addLinkSection(
- pht('ACCOUNT OVERVIEW'),
- PhabricatorEnv::getProductionURI($account_uri));
-
- return $body;
- }
-
- protected function getMailTo(PhabricatorLiskDAO $object) {
- $phids = array();
-
- // Reload the cart to pull account information, in case we just created the
- // object.
- $cart = id(new PhortuneCartQuery())
- ->setViewer($this->requireActor())
- ->withPHIDs(array($object->getPHID()))
- ->executeOne();
-
- foreach ($cart->getAccount()->getMemberPHIDs() as $account_member) {
- $phids[] = $account_member;
- }
-
- return $phids;
- }
-
- protected function getMailCC(PhabricatorLiskDAO $object) {
- return array();
- }
-
- protected function getMailSubjectPrefix() {
- return '[Phortune]';
- }
-
- protected function buildReplyHandler(PhabricatorLiskDAO $object) {
- return id(new PhortuneCartReplyHandler())
- ->setMailReceiver($object);
- }
-
- protected function willPublish(PhabricatorLiskDAO $object, array $xactions) {
- // We need the purchases in order to build mail.
- return id(new PhortuneCartQuery())
- ->setViewer($this->getActor())
- ->withIDs(array($object->getID()))
- ->needPurchases(true)
- ->executeOne();
- }
-
- protected function getCustomWorkerState() {
- return array(
- 'invoiceIssues' => $this->invoiceIssues,
- );
- }
-
- protected function loadCustomWorkerState(array $state) {
- $this->invoiceIssues = idx($state, 'invoiceIssues');
- return $this;
- }
-
- protected function applyFinalEffects(
- PhabricatorLiskDAO $object,
- array $xactions) {
-
- $account = $object->getAccount();
- $merchant = $object->getMerchant();
- $account->writeMerchantEdge($merchant);
-
- return $xactions;
- }
-
- protected function newAuxiliaryMail($object, array $xactions) {
- $xviewer = PhabricatorUser::getOmnipotentUser();
- $account = $object->getAccount();
-
- $addresses = id(new PhortuneAccountEmailQuery())
- ->setViewer($xviewer)
- ->withAccountPHIDs(array($account->getPHID()))
- ->withStatuses(
- array(
- PhortuneAccountEmailStatus::STATUS_ACTIVE,
- ))
- ->execute();
-
- $messages = array();
- foreach ($addresses as $address) {
- $message = $this->newExternalMail($address, $object, $xactions);
- if ($message) {
- $messages[] = $message;
- }
- }
-
- return $messages;
- }
-
- private function newExternalMail(
- PhortuneAccountEmail $email,
- PhortuneCart $cart,
- array $xactions) {
- $xviewer = PhabricatorUser::getOmnipotentUser();
- $account = $cart->getAccount();
-
- $id = $cart->getID();
- $name = $cart->getName();
-
- $origin_user = id(new PhabricatorPeopleQuery())
- ->setViewer($xviewer)
- ->withPHIDs(array($email->getAuthorPHID()))
- ->executeOne();
- if (!$origin_user) {
- return null;
- }
-
- if ($this->isInvoice()) {
- $subject = pht('[Invoice #%d] %s', $id, $name);
- $order_header = pht('INVOICE DETAIL');
- } else {
- $subject = pht('[Order #%d] %s', $id, $name);
- $order_header = pht('ORDER DETAIL');
- }
-
- $body = id(new PhabricatorMetaMTAMailBody())
- ->setViewer($xviewer)
- ->setContextObject($cart);
-
- $origin_username = $origin_user->getUsername();
- $origin_realname = $origin_user->getRealName();
- if (strlen($origin_realname)) {
- $origin_display = pht('%s (%s)', $origin_username, $origin_realname);
- } else {
- $origin_display = pht('%s', $origin_username);
- }
-
- $body->addRawSection(
- pht(
- 'This email address (%s) was added to a payment account (%s) '.
- 'by %s.',
- $email->getAddress(),
- $account->getName(),
- $origin_display));
-
- $body->addLinkSection(
- $order_header,
- PhabricatorEnv::getProductionURI($email->getExternalOrderURI($cart)));
-
- $body->addLinkSection(
- pht('FULL ORDER HISTORY'),
- PhabricatorEnv::getProductionURI($email->getExternalURI()));
-
- $body->addLinkSection(
- pht('UNSUBSCRIBE'),
- PhabricatorEnv::getProductionURI($email->getUnsubscribeURI()));
-
- return id(new PhabricatorMetaMTAMail())
- ->setFrom($this->getActingAsPHID())
- ->setSubject($subject)
- ->addRawTos(
- array(
- $email->getAddress(),
- ))
- ->setForceDelivery(true)
- ->setIsBulk(true)
- ->setSensitiveContent(true)
- ->setBody($body->render())
- ->setHTMLBody($body->renderHTML());
-
- }
-
-
-}
diff --git a/src/applications/phortune/editor/PhortuneMerchantEditEngine.php b/src/applications/phortune/editor/PhortuneMerchantEditEngine.php
deleted file mode 100644
--- a/src/applications/phortune/editor/PhortuneMerchantEditEngine.php
+++ /dev/null
@@ -1,148 +0,0 @@
-getViewer());
- }
-
- protected function newObjectQuery() {
- return new PhortuneMerchantQuery();
- }
-
- protected function getObjectCreateTitleText($object) {
- return pht('Create New Merchant');
- }
-
- protected function getObjectEditTitleText($object) {
- return pht('Edit Merchant: %s', $object->getName());
- }
-
- protected function getObjectEditShortText($object) {
- return $object->getName();
- }
-
- protected function getObjectCreateShortText() {
- return pht('Create Merchant');
- }
-
- protected function getObjectName() {
- return pht('Merchant');
- }
-
- protected function getObjectCreateCancelURI($object) {
- return $this->getApplication()->getApplicationURI('/');
- }
-
- protected function getEditorURI() {
- return $this->getApplication()->getApplicationURI('edit/');
- }
-
- protected function getObjectViewURI($object) {
- return $object->getDetailsURI();
- }
-
- public function isEngineConfigurable() {
- return false;
- }
-
- protected function getCreateNewObjectPolicy() {
- return $this->getApplication()->getPolicy(
- PhortuneMerchantCapability::CAPABILITY);
- }
-
- protected function buildCustomEditFields($object) {
- $viewer = $this->getViewer();
-
- if ($this->getIsCreate()) {
- $member_phids = array($viewer->getPHID());
- } else {
- $member_phids = $object->getMemberPHIDs();
- }
-
- return array(
- id(new PhabricatorTextEditField())
- ->setKey('name')
- ->setLabel(pht('Name'))
- ->setDescription(pht('Merchant name.'))
- ->setConduitTypeDescription(pht('New Merchant name.'))
- ->setIsRequired(true)
- ->setTransactionType(
- PhortuneMerchantNameTransaction::TRANSACTIONTYPE)
- ->setValue($object->getName()),
-
- id(new PhabricatorUsersEditField())
- ->setKey('members')
- ->setAliases(array('memberPHIDs', 'managerPHIDs'))
- ->setLabel(pht('Managers'))
- ->setUseEdgeTransactions(true)
- ->setTransactionType(PhabricatorTransactions::TYPE_EDGE)
- ->setMetadataValue(
- 'edge:type',
- PhortuneMerchantHasMemberEdgeType::EDGECONST)
- ->setDescription(pht('Initial merchant managers.'))
- ->setConduitDescription(pht('Set merchant managers.'))
- ->setConduitTypeDescription(pht('New list of managers.'))
- ->setInitialValue($object->getMemberPHIDs())
- ->setValue($member_phids),
-
- id(new PhabricatorRemarkupEditField())
- ->setKey('description')
- ->setLabel(pht('Description'))
- ->setDescription(pht('Merchant description.'))
- ->setConduitTypeDescription(pht('New merchant description.'))
- ->setTransactionType(
- PhortuneMerchantDescriptionTransaction::TRANSACTIONTYPE)
- ->setValue($object->getDescription()),
-
- id(new PhabricatorRemarkupEditField())
- ->setKey('contactInfo')
- ->setLabel(pht('Contact Info'))
- ->setDescription(pht('Merchant contact information.'))
- ->setConduitTypeDescription(pht('Merchant contact information.'))
- ->setTransactionType(
- PhortuneMerchantContactInfoTransaction::TRANSACTIONTYPE)
- ->setValue($object->getContactInfo()),
-
- id(new PhabricatorTextEditField())
- ->setKey('invoiceEmail')
- ->setLabel(pht('Invoice From Email'))
- ->setDescription(pht('Email address invoices are sent from.'))
- ->setConduitTypeDescription(
- pht('Email address invoices are sent from.'))
- ->setTransactionType(
- PhortuneMerchantInvoiceEmailTransaction::TRANSACTIONTYPE)
- ->setValue($object->getInvoiceEmail()),
-
- id(new PhabricatorRemarkupEditField())
- ->setKey('invoiceFooter')
- ->setLabel(pht('Invoice Footer'))
- ->setDescription(pht('Footer on invoice forms.'))
- ->setConduitTypeDescription(pht('Footer on invoice forms.'))
- ->setTransactionType(
- PhortuneMerchantInvoiceFooterTransaction::TRANSACTIONTYPE)
- ->setValue($object->getInvoiceFooter()),
-
- );
- }
-
-}
diff --git a/src/applications/phortune/editor/PhortuneMerchantEditor.php b/src/applications/phortune/editor/PhortuneMerchantEditor.php
deleted file mode 100644
--- a/src/applications/phortune/editor/PhortuneMerchantEditor.php
+++ /dev/null
@@ -1,59 +0,0 @@
-getMetadataValue('edge:type')) {
- case PhortuneMerchantHasMemberEdgeType::EDGECONST:
- $new = $xaction->getNewValue();
- $set = idx($new, '-', array());
- $actor_phid = $this->requireActor()->getPHID();
- foreach ($set as $phid) {
- if ($actor_phid == $phid) {
- $error = new PhabricatorApplicationTransactionValidationError(
- $type,
- pht('Invalid'),
- pht('You can not remove yourself as an merchant manager.'),
- $xaction);
- $errors[] = $error;
- }
- }
- break;
- }
- }
- break;
- }
- return $errors;
- }
-
-}
diff --git a/src/applications/phortune/editor/PhortunePaymentMethodEditor.php b/src/applications/phortune/editor/PhortunePaymentMethodEditor.php
deleted file mode 100644
--- a/src/applications/phortune/editor/PhortunePaymentMethodEditor.php
+++ /dev/null
@@ -1,18 +0,0 @@
-getTransactionType()) {
- case PhortunePaymentProviderConfigTransaction::TYPE_CREATE:
- return null;
- case PhortunePaymentProviderConfigTransaction::TYPE_ENABLE:
- return (int)$object->getIsEnabled();
- case PhortunePaymentProviderConfigTransaction::TYPE_PROPERTY:
- $property_key = $xaction->getMetadataValue(
- PhortunePaymentProviderConfigTransaction::PROPERTY_KEY);
- return $object->getMetadataValue($property_key);
- }
-
- return parent::getCustomTransactionOldValue($object, $xaction);
- }
-
- protected function getCustomTransactionNewValue(
- PhabricatorLiskDAO $object,
- PhabricatorApplicationTransaction $xaction) {
-
- switch ($xaction->getTransactionType()) {
- case PhortunePaymentProviderConfigTransaction::TYPE_CREATE:
- case PhortunePaymentProviderConfigTransaction::TYPE_PROPERTY:
- return $xaction->getNewValue();
- case PhortunePaymentProviderConfigTransaction::TYPE_ENABLE:
- return (int)$xaction->getNewValue();
- }
-
- return parent::getCustomTransactionNewValue($object, $xaction);
- }
-
- protected function applyCustomInternalTransaction(
- PhabricatorLiskDAO $object,
- PhabricatorApplicationTransaction $xaction) {
-
- switch ($xaction->getTransactionType()) {
- case PhortunePaymentProviderConfigTransaction::TYPE_CREATE:
- return;
- case PhortunePaymentProviderConfigTransaction::TYPE_PROPERTY:
- $property_key = $xaction->getMetadataValue(
- PhortunePaymentProviderConfigTransaction::PROPERTY_KEY);
- $object->setMetadataValue($property_key, $xaction->getNewValue());
- return;
- case PhortunePaymentProviderConfigTransaction::TYPE_ENABLE:
- return $object->setIsEnabled((int)$xaction->getNewValue());
- }
-
- return parent::applyCustomInternalTransaction($object, $xaction);
- }
-
- protected function applyCustomExternalTransaction(
- PhabricatorLiskDAO $object,
- PhabricatorApplicationTransaction $xaction) {
-
- switch ($xaction->getTransactionType()) {
- case PhortunePaymentProviderConfigTransaction::TYPE_CREATE:
- case PhortunePaymentProviderConfigTransaction::TYPE_PROPERTY:
- case PhortunePaymentProviderConfigTransaction::TYPE_ENABLE:
- return;
- }
-
- return parent::applyCustomExternalTransaction($object, $xaction);
- }
-
-}
diff --git a/src/applications/phortune/editor/PhortuneSubscriptionEditor.php b/src/applications/phortune/editor/PhortuneSubscriptionEditor.php
deleted file mode 100644
--- a/src/applications/phortune/editor/PhortuneSubscriptionEditor.php
+++ /dev/null
@@ -1,18 +0,0 @@
-view = $view;
- return $this;
- }
-
- public function getView() {
- return $this->view;
- }
-
-}
diff --git a/src/applications/phortune/mail/PhortuneCartReplyHandler.php b/src/applications/phortune/mail/PhortuneCartReplyHandler.php
deleted file mode 100644
--- a/src/applications/phortune/mail/PhortuneCartReplyHandler.php
+++ /dev/null
@@ -1,16 +0,0 @@
-setName('invoice')
- ->setSynopsis(
- pht(
- 'Invoices a subscription for a given billing period. This can '.
- 'charge payment accounts twice.'))
- ->setArguments(
- array(
- array(
- 'name' => 'subscription',
- 'param' => 'phid',
- 'help' => pht('Subscription to invoice.'),
- ),
- array(
- 'name' => 'now',
- 'param' => 'time',
- 'help' => pht(
- 'Bill as though the current time is a specific time.'),
- ),
- array(
- 'name' => 'last',
- 'param' => 'time',
- 'help' => pht('Set the start of the billing period.'),
- ),
- array(
- 'name' => 'next',
- 'param' => 'time',
- 'help' => pht('Set the end of the billing period.'),
- ),
- array(
- 'name' => 'auto-range',
- 'help' => pht('Automatically use the current billing period.'),
- ),
- array(
- 'name' => 'force',
- 'help' => pht(
- 'Skip the prompt warning you that this operation is '.
- 'potentially dangerous.'),
- ),
- ));
- }
-
- public function execute(PhutilArgumentParser $args) {
- $console = PhutilConsole::getConsole();
- $viewer = $this->getViewer();
-
- $subscription_phid = $args->getArg('subscription');
- if (!$subscription_phid) {
- throw new PhutilArgumentUsageException(
- pht(
- 'Specify which subscription to invoice with %s.',
- '--subscription'));
- }
-
- $subscription = id(new PhortuneSubscriptionQuery())
- ->setViewer($viewer)
- ->withPHIDs(array($subscription_phid))
- ->needTriggers(true)
- ->executeOne();
- if (!$subscription) {
- throw new PhutilArgumentUsageException(
- pht(
- 'Unable to load subscription with PHID "%s".',
- $subscription_phid));
- }
-
- $now = $args->getArg('now');
- $now = $this->parseTimeArgument($now);
- if (!$now) {
- $now = PhabricatorTime::getNow();
- }
-
- $time_guard = PhabricatorTime::pushTime($now, date_default_timezone_get());
-
- $console->writeOut(
- "%s\n",
- pht(
- 'Set current time to %s.',
- phabricator_datetime(PhabricatorTime::getNow(), $viewer)));
-
- $auto_range = $args->getArg('auto-range');
- $last_arg = $args->getArg('last');
- $next_arg = $args->getArg('next');
-
- if (!$auto_range && !$last_arg && !$next_arg) {
- throw new PhutilArgumentUsageException(
- pht(
- 'Specify a billing range with %s and %s, or use %s.',
- '--last',
- '--next',
- '--auto-range'));
- } else if (!$auto_range & (!$last_arg || !$next_arg)) {
- throw new PhutilArgumentUsageException(
- pht(
- 'When specifying %s or %s, you must specify both arguments '.
- 'to define the beginning and end of the billing range.',
- '--last',
- '--next'));
- } else if (!$auto_range && ($last_arg && $next_arg)) {
- $last_time = $this->parseTimeArgument($args->getArg('last'));
- $next_time = $this->parseTimeArgument($args->getArg('next'));
- } else if ($auto_range && ($last_arg || $next_arg)) {
- throw new PhutilArgumentUsageException(
- pht(
- 'Use either %s or %s and %s to specify the '.
- 'billing range, but not both.',
- '--auto-range',
- '--last',
- '--next'));
- } else {
- $trigger = $subscription->getTrigger();
- $event = $trigger->getEvent();
- if (!$event) {
- throw new PhutilArgumentUsageException(
- pht(
- 'Unable to calculate %s, this subscription has not been '.
- 'scheduled for billing yet. Wait for the trigger daemon to '.
- 'schedule the subscription.',
- '--auto-range'));
- }
- $last_time = $event->getLastEventEpoch();
- $next_time = $event->getNextEventEpoch();
- }
-
- $console->writeOut(
- "%s\n",
- pht(
- 'Preparing to invoice subscription "%s" from %s to %s.',
- $subscription->getSubscriptionName(),
- ($last_time
- ? phabricator_datetime($last_time, $viewer)
- : pht('subscription creation')),
- phabricator_datetime($next_time, $viewer)));
-
- PhabricatorWorker::setRunAllTasksInProcess(true);
-
- if (!$args->getArg('force')) {
- $console->writeOut(
- "** %s **\n%s\n",
- pht('WARNING'),
- phutil_console_wrap(
- pht(
- 'Manually invoicing will double bill payment accounts if the '.
- 'range overlaps an existing or future invoice. This script is '.
- 'intended for testing and development, and should not be part '.
- 'of routine billing operations. If you continue, you may '.
- 'incorrectly overcharge customers.')));
-
- if (!phutil_console_confirm(pht('Really invoice this subscription?'))) {
- throw new Exception(pht('Declining to invoice.'));
- }
- }
-
- PhabricatorWorker::scheduleTask(
- 'PhortuneSubscriptionWorker',
- array(
- 'subscriptionPHID' => $subscription->getPHID(),
- 'trigger.last-epoch' => $last_time,
- 'trigger.this-epoch' => $next_time,
- 'manual' => true,
- ),
- array(
- 'objectPHID' => $subscription->getPHID(),
- ));
-
- return 0;
- }
-
-}
diff --git a/src/applications/phortune/management/PhabricatorPhortuneManagementWorkflow.php b/src/applications/phortune/management/PhabricatorPhortuneManagementWorkflow.php
deleted file mode 100644
--- a/src/applications/phortune/management/PhabricatorPhortuneManagementWorkflow.php
+++ /dev/null
@@ -1,4 +0,0 @@
-pagesObject = $this->newChildObject($pages_object);
- return $this;
- }
-
- public function getPagesObject() {
- return $this->pagesObject;
- }
-
- protected function writeObject() {
- $this->writeLine('/Type /Catalog');
-
- $pages_object = $this->getPagesObject();
- if ($pages_object) {
- $this->writeLine('/Pages %d 0 R', $pages_object->getObjectIndex());
- }
- }
-
-}
diff --git a/src/applications/phortune/pdf/PhabricatorPDFContentsObject.php b/src/applications/phortune/pdf/PhabricatorPDFContentsObject.php
deleted file mode 100644
--- a/src/applications/phortune/pdf/PhabricatorPDFContentsObject.php
+++ /dev/null
@@ -1,25 +0,0 @@
-rawContent = $raw_content;
- return $this;
- }
-
- public function getRawContent() {
- return $this->rawContent;
- }
-
- protected function writeObject() {
- $data = $this->getRawContent();
-
- $stream_length = $this->newStream($data);
-
- $this->writeLine('/Filter /FlateDecode /Length %d', $stream_length);
- }
-
-}
diff --git a/src/applications/phortune/pdf/PhabricatorPDFFontObject.php b/src/applications/phortune/pdf/PhabricatorPDFFontObject.php
deleted file mode 100644
--- a/src/applications/phortune/pdf/PhabricatorPDFFontObject.php
+++ /dev/null
@@ -1,14 +0,0 @@
-writeLine('/Type /Font');
-
- $this->writeLine('/BaseFont /Helvetica-Bold');
- $this->writeLine('/Subtype /Type1');
- $this->writeLine('/Encoding /WinAnsiEncoding');
- }
-
-}
diff --git a/src/applications/phortune/pdf/PhabricatorPDFFragment.php b/src/applications/phortune/pdf/PhabricatorPDFFragment.php
deleted file mode 100644
--- a/src/applications/phortune/pdf/PhabricatorPDFFragment.php
+++ /dev/null
@@ -1,38 +0,0 @@
-rope = new PhutilRope();
-
- $this->writeFragment();
-
- $rope = $this->rope;
- $this->rope = null;
-
- return $rope->getAsString();
- }
-
- public function hasRefTableEntry() {
- return false;
- }
-
- abstract protected function writeFragment();
-
- final protected function writeLine($pattern) {
- $pattern = $pattern."\n";
-
- $argv = func_get_args();
- $argv[0] = $pattern;
-
- $line = call_user_func_array('sprintf', $argv);
-
- $this->rope->append($line);
-
- return $this;
- }
-
-}
diff --git a/src/applications/phortune/pdf/PhabricatorPDFFragmentOffset.php b/src/applications/phortune/pdf/PhabricatorPDFFragmentOffset.php
deleted file mode 100644
--- a/src/applications/phortune/pdf/PhabricatorPDFFragmentOffset.php
+++ /dev/null
@@ -1,27 +0,0 @@
-fragment = $fragment;
- return $this;
- }
-
- public function getFragment() {
- return $this->fragment;
- }
-
- public function setOffset($offset) {
- $this->offset = $offset;
- return $this;
- }
-
- public function getOffset() {
- return $this->offset;
- }
-
-}
diff --git a/src/applications/phortune/pdf/PhabricatorPDFGenerator.php b/src/applications/phortune/pdf/PhabricatorPDFGenerator.php
deleted file mode 100644
--- a/src/applications/phortune/pdf/PhabricatorPDFGenerator.php
+++ /dev/null
@@ -1,59 +0,0 @@
-hasIterator) {
- throw new Exception(
- pht(
- 'This generator has already emitted an iterator. You can not '.
- 'modify the PDF document after you begin writing it.'));
- }
-
- $this->objects[] = $object;
- $index = count($this->objects);
-
- $object->setGenerator($this, $index);
-
- return $this;
- }
-
- public function getObjects() {
- return $this->objects;
- }
-
- public function newIterator() {
- $this->hasIterator = true;
- return id(new PhabricatorPDFIterator())
- ->setGenerator($this);
- }
-
- public function setInfoObject(PhabricatorPDFInfoObject $info_object) {
- $this->addObject($info_object);
- $this->infoObject = $info_object;
- return $this;
- }
-
- public function getInfoObject() {
- return $this->infoObject;
- }
-
- public function setCatalogObject(
- PhabricatorPDFCatalogObject $catalog_object) {
- $this->addObject($catalog_object);
- $this->catalogObject = $catalog_object;
- return $this;
- }
-
- public function getCatalogObject() {
- return $this->catalogObject;
- }
-
-}
diff --git a/src/applications/phortune/pdf/PhabricatorPDFHeadFragment.php b/src/applications/phortune/pdf/PhabricatorPDFHeadFragment.php
deleted file mode 100644
--- a/src/applications/phortune/pdf/PhabricatorPDFHeadFragment.php
+++ /dev/null
@@ -1,10 +0,0 @@
-writeLine('%s', '%PDF-1.3');
- }
-
-}
diff --git a/src/applications/phortune/pdf/PhabricatorPDFInfoObject.php b/src/applications/phortune/pdf/PhabricatorPDFInfoObject.php
deleted file mode 100644
--- a/src/applications/phortune/pdf/PhabricatorPDFInfoObject.php
+++ /dev/null
@@ -1,11 +0,0 @@
-writeLine('/Producer (Phabricator 20190801)');
- $this->writeLine('/CreationDate (D:%s)', date('YmdHis'));
- }
-
-}
diff --git a/src/applications/phortune/pdf/PhabricatorPDFIterator.php b/src/applications/phortune/pdf/PhabricatorPDFIterator.php
deleted file mode 100644
--- a/src/applications/phortune/pdf/PhabricatorPDFIterator.php
+++ /dev/null
@@ -1,103 +0,0 @@
-generator) {
- throw new Exception(
- pht(
- 'This iterator already has a generator. You can not modify the '.
- 'generator for a given iterator.'));
- }
-
- $this->generator = $generator;
-
- return $this;
- }
-
- public function getGenerator() {
- if (!$this->generator) {
- throw new Exception(
- pht(
- 'This PDF iterator has no associated PDF generator.'));
- }
-
- return $this->generator;
- }
-
- public function getFragmentOffsets() {
- return $this->fragmentOffsets;
- }
-
- public function current() {
- return $this->fragmentBytes;
- }
-
- public function key() {
- return $this->framgentKey;
- }
-
- public function next() {
- $this->fragmentKey++;
-
- if (!$this->valid()) {
- return;
- }
-
- $fragment = $this->fragments[$this->fragmentKey];
-
- $this->fragmentOffsets[] = id(new PhabricatorPDFFragmentOffset())
- ->setFragment($fragment)
- ->setOffset($this->byteLength);
-
- $bytes = $fragment->getAsBytes();
-
- $this->fragmentBytes = $bytes;
- $this->byteLength += strlen($bytes);
- }
-
- public function rewind() {
- if ($this->hasRewound) {
- throw new Exception(
- pht(
- 'PDF iterators may not be rewound. Create a new iterator to emit '.
- 'another PDF.'));
- }
-
- $generator = $this->getGenerator();
- $objects = $generator->getObjects();
-
- $this->fragments = array();
- $this->fragments[] = new PhabricatorPDFHeadFragment();
-
- foreach ($objects as $object) {
- $this->fragments[] = $object;
- }
-
- $this->fragments[] = id(new PhabricatorPDFTailFragment())
- ->setIterator($this);
-
- $this->hasRewound = true;
-
- $this->fragmentKey = -1;
- $this->byteLength = 0;
-
- $this->next();
- }
-
- public function valid() {
- return isset($this->fragments[$this->fragmentKey]);
- }
-
-}
diff --git a/src/applications/phortune/pdf/PhabricatorPDFObject.php b/src/applications/phortune/pdf/PhabricatorPDFObject.php
deleted file mode 100644
--- a/src/applications/phortune/pdf/PhabricatorPDFObject.php
+++ /dev/null
@@ -1,95 +0,0 @@
-writeLine('%d 0 obj', $this->getObjectIndex());
- $this->writeLine('<<');
- $this->writeObject();
- $this->writeLine('>>');
-
- $streams = $this->streams;
- $this->streams = array();
- foreach ($streams as $stream) {
- $this->writeLine('stream');
- $this->writeLine('%s', $stream);
- $this->writeLine('endstream');
- }
-
- $this->writeLine('endobj');
- }
-
- final public function setGenerator(
- PhabricatorPDFGenerator $generator,
- $index) {
-
- if ($this->getGenerator()) {
- throw new Exception(
- pht(
- 'This PDF object is already registered with a PDF generator. You '.
- 'can not register an object with more than one generator.'));
- }
-
- $this->generator = $generator;
- $this->objectIndex = $index;
-
- foreach ($this->getChildren() as $child) {
- $generator->addObject($child);
- }
-
- return $this;
- }
-
- final public function getGenerator() {
- return $this->generator;
- }
-
- final public function getObjectIndex() {
- if (!$this->objectIndex) {
- throw new Exception(
- pht(
- 'Trying to get index for object ("%s") which has not been '.
- 'registered with a generator.',
- get_class($this)));
- }
-
- return $this->objectIndex;
- }
-
- final protected function newChildObject(PhabricatorPDFObject $object) {
- if ($this->generator) {
- throw new Exception(
- pht(
- 'Trying to add a new PDF Object child after already registering '.
- 'the object with a generator.'));
- }
-
- $this->children[] = $object;
- return $object;
- }
-
- private function getChildren() {
- return $this->children;
- }
-
- abstract protected function writeObject();
-
- final protected function newStream($raw_data) {
- $stream_data = gzcompress($raw_data);
-
- $this->streams[] = $stream_data;
-
- return strlen($stream_data);
- }
-
-}
diff --git a/src/applications/phortune/pdf/PhabricatorPDFPageObject.php b/src/applications/phortune/pdf/PhabricatorPDFPageObject.php
deleted file mode 100644
--- a/src/applications/phortune/pdf/PhabricatorPDFPageObject.php
+++ /dev/null
@@ -1,48 +0,0 @@
-pagesObject = $pages;
- return $this;
- }
-
- public function setContentsObject(PhabricatorPDFContentsObject $contents) {
- $this->contentsObject = $this->newChildObject($contents);
- return $this;
- }
-
- public function setResourcesObject(PhabricatorPDFResourcesObject $resources) {
- $this->resourcesObject = $this->newChildObject($resources);
- return $this;
- }
-
- protected function writeObject() {
- $this->writeLine('/Type /Page');
-
- $pages_object = $this->pagesObject;
- $contents_object = $this->contentsObject;
- $resources_object = $this->resourcesObject;
-
- if ($pages_object) {
- $pages_index = $pages_object->getObjectIndex();
- $this->writeLine('/Parent %d 0 R', $pages_index);
- }
-
- if ($contents_object) {
- $contents_index = $contents_object->getObjectIndex();
- $this->writeLine('/Contents %d 0 R', $contents_index);
- }
-
- if ($resources_object) {
- $resources_index = $resources_object->getObjectIndex();
- $this->writeLine('/Resources %d 0 R', $resources_index);
- }
- }
-
-}
diff --git a/src/applications/phortune/pdf/PhabricatorPDFPagesObject.php b/src/applications/phortune/pdf/PhabricatorPDFPagesObject.php
deleted file mode 100644
--- a/src/applications/phortune/pdf/PhabricatorPDFPagesObject.php
+++ /dev/null
@@ -1,38 +0,0 @@
-setPagesObject($this);
- $this->pageObjects[] = $this->newChildObject($page);
- return $this;
- }
-
- public function getPageObjects() {
- return $this->pageObjects;
- }
-
- protected function writeObject() {
- $this->writeLine('/Type /Pages');
-
- $page_objects = $this->getPageObjects();
-
- $this->writeLine('/Count %d', count($page_objects));
- $this->writeLine('/MediaBox [%d %d %0.2f %0.2f]', 0, 0, 595.28, 841.89);
-
- if ($page_objects) {
- $kids = array();
- foreach ($page_objects as $page_object) {
- $kids[] = sprintf(
- '%d 0 R',
- $page_object->getObjectIndex());
- }
-
- $this->writeLine('/Kids [%s]', implode(' ', $kids));
- }
- }
-
-}
diff --git a/src/applications/phortune/pdf/PhabricatorPDFResourcesObject.php b/src/applications/phortune/pdf/PhabricatorPDFResourcesObject.php
deleted file mode 100644
--- a/src/applications/phortune/pdf/PhabricatorPDFResourcesObject.php
+++ /dev/null
@@ -1,28 +0,0 @@
-fontObjects[] = $this->newChildObject($font);
- return $this;
- }
-
- public function getFontObjects() {
- return $this->fontObjects;
- }
-
- protected function writeObject() {
- $this->writeLine('/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]');
-
- $fonts = $this->getFontObjects();
- foreach ($fonts as $font) {
- $this->writeLine('/Font <<');
- $this->writeLine('/F%d %d 0 R', 1, $font->getObjectIndex());
- $this->writeLine('>>');
- }
- }
-
-}
diff --git a/src/applications/phortune/pdf/PhabricatorPDFTailFragment.php b/src/applications/phortune/pdf/PhabricatorPDFTailFragment.php
deleted file mode 100644
--- a/src/applications/phortune/pdf/PhabricatorPDFTailFragment.php
+++ /dev/null
@@ -1,72 +0,0 @@
-iterator = $iterator;
- return $this;
- }
-
- public function getIterator() {
- return $this->iterator;
- }
-
- protected function writeFragment() {
- $iterator = $this->getIterator();
- $generator = $iterator->getGenerator();
- $objects = $generator->getObjects();
-
- $xref_offset = null;
-
- $this->writeLine('xref');
- $this->writeLine('0 %d', count($objects) + 1);
- $this->writeLine('%010d %05d f ', 0, 0xFFFF);
-
- $offset_map = array();
-
- $fragment_offsets = $iterator->getFragmentOffsets();
- foreach ($fragment_offsets as $fragment_offset) {
- $fragment = $fragment_offset->getFragment();
- $offset = $fragment_offset->getOffset();
-
- if ($fragment === $this) {
- $xref_offset = $offset;
- }
-
- if (!$fragment->hasRefTableEntry()) {
- continue;
- }
-
- $offset_map[$fragment->getObjectIndex()] = $offset;
- }
-
- ksort($offset_map);
-
- foreach ($offset_map as $offset) {
- $this->writeLine('%010d %05d n ', $offset, 0);
- }
-
- $this->writeLine('trailer');
- $this->writeLine('<<');
- $this->writeLine('/Size %d', count($objects) + 1);
-
- $info_object = $generator->getInfoObject();
- if ($info_object) {
- $this->writeLine('/Info %d 0 R', $info_object->getObjectIndex());
- }
-
- $catalog_object = $generator->getCatalogObject();
- if ($catalog_object) {
- $this->writeLine('/Root %d 0 R', $catalog_object->getObjectIndex());
- }
-
- $this->writeLine('>>');
- $this->writeLine('startxref');
- $this->writeLine('%d', $xref_offset);
- $this->writeLine('%s', '%%EOF');
- }
-
-}
diff --git a/src/applications/phortune/phid/PhortuneAccountEmailPHIDType.php b/src/applications/phortune/phid/PhortuneAccountEmailPHIDType.php
deleted file mode 100644
--- a/src/applications/phortune/phid/PhortuneAccountEmailPHIDType.php
+++ /dev/null
@@ -1,41 +0,0 @@
-withPHIDs($phids);
- }
-
- public function loadHandles(
- PhabricatorHandleQuery $query,
- array $handles,
- array $objects) {
-
- foreach ($handles as $phid => $handle) {
- $email = $objects[$phid];
-
- $id = $email->getID();
-
- $handle->setName($email->getObjectName());
- }
- }
-
-}
diff --git a/src/applications/phortune/phid/PhortuneAccountPHIDType.php b/src/applications/phortune/phid/PhortuneAccountPHIDType.php
deleted file mode 100644
--- a/src/applications/phortune/phid/PhortuneAccountPHIDType.php
+++ /dev/null
@@ -1,41 +0,0 @@
-withPHIDs($phids);
- }
-
- public function loadHandles(
- PhabricatorHandleQuery $query,
- array $handles,
- array $objects) {
-
- foreach ($handles as $phid => $handle) {
- $account = $objects[$phid];
-
- $handle
- ->setName($account->getName())
- ->setURI($account->getURI());
- }
- }
-
-}
diff --git a/src/applications/phortune/phid/PhortuneCartPHIDType.php b/src/applications/phortune/phid/PhortuneCartPHIDType.php
deleted file mode 100644
--- a/src/applications/phortune/phid/PhortuneCartPHIDType.php
+++ /dev/null
@@ -1,43 +0,0 @@
-withPHIDs($phids);
- }
-
- public function loadHandles(
- PhabricatorHandleQuery $query,
- array $handles,
- array $objects) {
-
- foreach ($handles as $phid => $handle) {
- $cart = $objects[$phid];
-
- $id = $cart->getID();
- $name = $cart->getName();
-
- $handle->setName($name);
- $handle->setURI("/phortune/cart/{$id}/");
- }
- }
-
-}
diff --git a/src/applications/phortune/phid/PhortuneChargePHIDType.php b/src/applications/phortune/phid/PhortuneChargePHIDType.php
deleted file mode 100644
--- a/src/applications/phortune/phid/PhortuneChargePHIDType.php
+++ /dev/null
@@ -1,42 +0,0 @@
-withPHIDs($phids);
- }
-
- public function loadHandles(
- PhabricatorHandleQuery $query,
- array $handles,
- array $objects) {
-
- foreach ($handles as $phid => $handle) {
- $charge = $objects[$phid];
-
- $id = $charge->getID();
-
- $handle->setName(pht('Charge %d', $id));
- $handle->setURI("/phortune/charge/{$id}/");
- }
- }
-
-}
diff --git a/src/applications/phortune/phid/PhortuneMerchantPHIDType.php b/src/applications/phortune/phid/PhortuneMerchantPHIDType.php
deleted file mode 100644
--- a/src/applications/phortune/phid/PhortuneMerchantPHIDType.php
+++ /dev/null
@@ -1,43 +0,0 @@
-withPHIDs($phids)
- ->needProfileImage(true);
- }
-
- public function loadHandles(
- PhabricatorHandleQuery $query,
- array $handles,
- array $objects) {
-
- foreach ($handles as $phid => $handle) {
- $merchant = $objects[$phid];
-
- $handle
- ->setName($merchant->getName())
- ->setURI($merchant->getURI())
- ->setImageURI($merchant->getProfileImageURI());
- }
- }
-
-}
diff --git a/src/applications/phortune/phid/PhortunePaymentMethodPHIDType.php b/src/applications/phortune/phid/PhortunePaymentMethodPHIDType.php
deleted file mode 100644
--- a/src/applications/phortune/phid/PhortunePaymentMethodPHIDType.php
+++ /dev/null
@@ -1,41 +0,0 @@
-withPHIDs($phids);
- }
-
- public function loadHandles(
- PhabricatorHandleQuery $query,
- array $handles,
- array $objects) {
-
- foreach ($handles as $phid => $handle) {
- $method = $objects[$phid];
-
- $handle
- ->setName($method->getFullDisplayName())
- ->setURI($method->getURI());
- }
- }
-
-}
diff --git a/src/applications/phortune/phid/PhortunePaymentProviderPHIDType.php b/src/applications/phortune/phid/PhortunePaymentProviderPHIDType.php
deleted file mode 100644
--- a/src/applications/phortune/phid/PhortunePaymentProviderPHIDType.php
+++ /dev/null
@@ -1,41 +0,0 @@
-withPHIDs($phids);
- }
-
- public function loadHandles(
- PhabricatorHandleQuery $query,
- array $handles,
- array $objects) {
-
- foreach ($handles as $phid => $handle) {
- $provider_config = $objects[$phid];
-
- $id = $provider_config->getID();
-
- $handle->setName($provider_config->buildProvider()->getName());
- }
- }
-
-}
diff --git a/src/applications/phortune/phid/PhortuneProductPHIDType.php b/src/applications/phortune/phid/PhortuneProductPHIDType.php
deleted file mode 100644
--- a/src/applications/phortune/phid/PhortuneProductPHIDType.php
+++ /dev/null
@@ -1,42 +0,0 @@
-withPHIDs($phids);
- }
-
- public function loadHandles(
- PhabricatorHandleQuery $query,
- array $handles,
- array $objects) {
-
- foreach ($handles as $phid => $handle) {
- $product = $objects[$phid];
-
- $id = $product->getID();
-
- $handle->setName(pht('Product %d', $id));
- $handle->setURI("/phortune/product/{$id}/");
- }
- }
-
-}
diff --git a/src/applications/phortune/phid/PhortunePurchasePHIDType.php b/src/applications/phortune/phid/PhortunePurchasePHIDType.php
deleted file mode 100644
--- a/src/applications/phortune/phid/PhortunePurchasePHIDType.php
+++ /dev/null
@@ -1,42 +0,0 @@
-withPHIDs($phids);
- }
-
- public function loadHandles(
- PhabricatorHandleQuery $query,
- array $handles,
- array $objects) {
-
- foreach ($handles as $phid => $handle) {
- $purchase = $objects[$phid];
-
- $id = $purchase->getID();
-
- $handle->setName($purchase->getFullDisplayName());
- $handle->setURI($purchase->getURI());
- }
- }
-
-}
diff --git a/src/applications/phortune/phid/PhortuneSubscriptionPHIDType.php b/src/applications/phortune/phid/PhortuneSubscriptionPHIDType.php
deleted file mode 100644
--- a/src/applications/phortune/phid/PhortuneSubscriptionPHIDType.php
+++ /dev/null
@@ -1,41 +0,0 @@
-withPHIDs($phids);
- }
-
- public function loadHandles(
- PhabricatorHandleQuery $query,
- array $handles,
- array $objects) {
-
- foreach ($handles as $phid => $handle) {
- $subscription = $objects[$phid];
-
- $handle
- ->setName($subscription->getSubscriptionName())
- ->setURI($subscription->getURI());
- }
- }
-
-}
diff --git a/src/applications/phortune/product/PhortuneAdHocProduct.php b/src/applications/phortune/product/PhortuneAdHocProduct.php
deleted file mode 100644
--- a/src/applications/phortune/product/PhortuneAdHocProduct.php
+++ /dev/null
@@ -1,42 +0,0 @@
- $ref) {
- $product = new PhortuneAdHocProduct();
- $product->ref = $ref;
- $results[$key] = $product;
- }
-
- return $results;
- }
-
- public function getRef() {
- return $this->ref;
- }
-
- public function getName(PhortuneProduct $product) {
- return pht('Ad-Hoc Product');
- }
-
- public function getPurchaseName(
- PhortuneProduct $product,
- PhortunePurchase $purchase) {
-
- return coalesce(
- $purchase->getMetadataValue('adhoc.name'),
- $this->getName($product));
- }
-
- public function getPriceAsCurrency(PhortuneProduct $product) {
- return PhortuneCurrency::newEmptyCurrency();
- }
-
-}
diff --git a/src/applications/phortune/product/PhortuneProductImplementation.php b/src/applications/phortune/product/PhortuneProductImplementation.php
deleted file mode 100644
--- a/src/applications/phortune/product/PhortuneProductImplementation.php
+++ /dev/null
@@ -1,43 +0,0 @@
-getName($product);
- }
-
- public function didPurchaseProduct(
- PhortuneProduct $product,
- PhortunePurchase $purchase) {
- return;
- }
-
- public function didRefundProduct(
- PhortuneProduct $product,
- PhortunePurchase $purchase,
- PhortuneCurrency $amount) {
- return;
- }
-
- public function getPurchaseURI(
- PhortuneProduct $product,
- PhortunePurchase $purchase) {
- return null;
- }
-
-}
diff --git a/src/applications/phortune/product/PhortuneSubscriptionProduct.php b/src/applications/phortune/product/PhortuneSubscriptionProduct.php
deleted file mode 100644
--- a/src/applications/phortune/product/PhortuneSubscriptionProduct.php
+++ /dev/null
@@ -1,108 +0,0 @@
-subscriptionPHID = $subscription_phid;
- return $this;
- }
-
- public function getSubscriptionPHID() {
- return $this->subscriptionPHID;
- }
-
- public function setSubscription(PhortuneSubscription $subscription) {
- $this->subscription = $subscription;
- return $this;
- }
-
- public function getSubscription() {
- return $this->subscription;
- }
-
- public function setViewer(PhabricatorUser $viewer) {
- $this->viewer = $viewer;
- return $this;
- }
-
- public function getViewer() {
- return $this->viewer;
- }
-
- public function getRef() {
- return $this->getSubscriptionPHID();
- }
-
- public function getName(PhortuneProduct $product) {
- return $this->getSubscription()->getSubscriptionName();
- }
-
- public function getPriceAsCurrency(PhortuneProduct $product) {
- // Prices are calculated by the SubscriptionImplementation.
- return PhortuneCurrency::newEmptyCurrency();
- }
-
- public function didPurchaseProduct(
- PhortuneProduct $product,
- PhortunePurchase $purchase) {
- return $this->getSubscription()->didPurchaseProduct(
- $product,
- $purchase);
- }
-
- public function didRefundProduct(
- PhortuneProduct $product,
- PhortunePurchase $purchase,
- PhortuneCurrency $amount) {
- // TODO: Callback the subscription.
- return;
- }
-
- public function getPurchaseName(
- PhortuneProduct $product,
- PhortunePurchase $purchase) {
- return $this->getSubscription()->getPurchaseName(
- $product,
- $purchase);
- }
-
- public function getPurchaseURI(
- PhortuneProduct $product,
- PhortunePurchase $purchase) {
- return $this->getSubscription()->getPurchaseURI(
- $product,
- $purchase);
- }
-
- public function loadImplementationsForRefs(
- PhabricatorUser $viewer,
- array $refs) {
-
- $subscriptions = id(new PhortuneSubscriptionQuery())
- ->setViewer($viewer)
- ->withPHIDs($refs)
- ->execute();
- $subscriptions = mpull($subscriptions, null, 'getPHID');
-
- $objects = array();
- foreach ($refs as $ref) {
- $subscription = idx($subscriptions, $ref);
- if (!$subscription) {
- continue;
- }
-
- $objects[] = id(new PhortuneSubscriptionProduct())
- ->setViewer($viewer)
- ->setSubscriptionPHID($ref)
- ->setSubscription($subscription);
- }
-
- return $objects;
- }
-
-}
diff --git a/src/applications/phortune/provider/PhortunePayPalPaymentProvider.php b/src/applications/phortune/provider/PhortunePayPalPaymentProvider.php
deleted file mode 100644
--- a/src/applications/phortune/provider/PhortunePayPalPaymentProvider.php
+++ /dev/null
@@ -1,507 +0,0 @@
-getProviderConfig()->getMetadataValue(self::PAYPAL_MODE);
- return ($mode === 'live');
- }
-
- public function getName() {
- return pht('PayPal');
- }
-
- public function getConfigureName() {
- return pht('Add PayPal Payments Account');
- }
-
- public function getConfigureDescription() {
- return pht(
- 'Allows you to accept various payment instruments with a paypal.com '.
- 'account.');
- }
-
- public function getConfigureProvidesDescription() {
- return pht('This merchant accepts payments via PayPal.');
- }
-
- public function getConfigureInstructions() {
- return pht(
- "To configure PayPal, register or log into an existing account on ".
- "[[https://paypal.com | paypal.com]] (for live payments) or ".
- "[[https://sandbox.paypal.com | sandbox.paypal.com]] (for test ".
- "payments). Once logged in:\n\n".
- " - Navigate to {nav Tools > API Access}.\n".
- " - Choose **View API Signature**.\n".
- " - Copy the **API Username**, **API Password** and **Signature** ".
- " into the fields above.\n\n".
- "You can select whether the provider operates in test mode or ".
- "accepts live payments using the **Mode** dropdown above.\n\n".
- "You can either use `sandbox.paypal.com` to retrieve live credentials, ".
- "or `paypal.com` to retrieve live credentials.");
- }
-
- public function getAllConfigurableProperties() {
- return array(
- self::PAYPAL_API_USERNAME,
- self::PAYPAL_API_PASSWORD,
- self::PAYPAL_API_SIGNATURE,
- self::PAYPAL_MODE,
- );
- }
-
- public function getAllConfigurableSecretProperties() {
- return array(
- self::PAYPAL_API_PASSWORD,
- self::PAYPAL_API_SIGNATURE,
- );
- }
-
- public function processEditForm(
- AphrontRequest $request,
- array $values) {
-
- $errors = array();
- $issues = array();
-
- if (!strlen($values[self::PAYPAL_API_USERNAME])) {
- $errors[] = pht('PayPal API Username is required.');
- $issues[self::PAYPAL_API_USERNAME] = pht('Required');
- }
-
- if (!strlen($values[self::PAYPAL_API_PASSWORD])) {
- $errors[] = pht('PayPal API Password is required.');
- $issues[self::PAYPAL_API_PASSWORD] = pht('Required');
- }
-
- if (!strlen($values[self::PAYPAL_API_SIGNATURE])) {
- $errors[] = pht('PayPal API Signature is required.');
- $issues[self::PAYPAL_API_SIGNATURE] = pht('Required');
- }
-
- if (!strlen($values[self::PAYPAL_MODE])) {
- $errors[] = pht('Mode is required.');
- $issues[self::PAYPAL_MODE] = pht('Required');
- }
-
- return array($errors, $issues, $values);
- }
-
- public function extendEditForm(
- AphrontRequest $request,
- AphrontFormView $form,
- array $values,
- array $issues) {
-
- $form
- ->appendChild(
- id(new AphrontFormTextControl())
- ->setName(self::PAYPAL_API_USERNAME)
- ->setValue($values[self::PAYPAL_API_USERNAME])
- ->setError(idx($issues, self::PAYPAL_API_USERNAME, true))
- ->setLabel(pht('Paypal API Username')))
- ->appendChild(
- id(new AphrontFormTextControl())
- ->setName(self::PAYPAL_API_PASSWORD)
- ->setValue($values[self::PAYPAL_API_PASSWORD])
- ->setError(idx($issues, self::PAYPAL_API_PASSWORD, true))
- ->setLabel(pht('Paypal API Password')))
- ->appendChild(
- id(new AphrontFormTextControl())
- ->setName(self::PAYPAL_API_SIGNATURE)
- ->setValue($values[self::PAYPAL_API_SIGNATURE])
- ->setError(idx($issues, self::PAYPAL_API_SIGNATURE, true))
- ->setLabel(pht('Paypal API Signature')))
- ->appendChild(
- id(new AphrontFormSelectControl())
- ->setName(self::PAYPAL_MODE)
- ->setValue($values[self::PAYPAL_MODE])
- ->setError(idx($issues, self::PAYPAL_MODE))
- ->setLabel(pht('Mode'))
- ->setOptions(
- array(
- 'test' => pht('Test Mode'),
- 'live' => pht('Live Mode'),
- )));
-
- return;
- }
-
- public function canRunConfigurationTest() {
- return true;
- }
-
- public function runConfigurationTest() {
- $result = $this
- ->newPaypalAPICall()
- ->setRawPayPalQuery('GetBalance', array())
- ->resolve();
- }
-
- public function getPaymentMethodDescription() {
- return pht('Credit Card or PayPal Account');
- }
-
- public function getPaymentMethodIcon() {
- return 'PayPal';
- }
-
- public function getPaymentMethodProviderDescription() {
- return 'PayPal';
- }
-
- protected function executeCharge(
- PhortunePaymentMethod $payment_method,
- PhortuneCharge $charge) {
- throw new Exception('!');
- }
-
- protected function executeRefund(
- PhortuneCharge $charge,
- PhortuneCharge $refund) {
-
- $transaction_id = $charge->getMetadataValue('paypal.transactionID');
- if (!$transaction_id) {
- throw new Exception(pht('Charge has no transaction ID!'));
- }
-
- $refund_amount = $refund->getAmountAsCurrency()->negate();
- $refund_currency = $refund_amount->getCurrency();
- $refund_value = $refund_amount->formatBareValue();
-
- $params = array(
- 'TRANSACTIONID' => $transaction_id,
- 'REFUNDTYPE' => 'Partial',
- 'AMT' => $refund_value,
- 'CURRENCYCODE' => $refund_currency,
- );
-
- $result = $this
- ->newPaypalAPICall()
- ->setRawPayPalQuery('RefundTransaction', $params)
- ->resolve();
-
- $charge->setMetadataValue(
- 'paypal.refundID',
- $result['REFUNDTRANSACTIONID']);
- }
-
- public function updateCharge(PhortuneCharge $charge) {
- $transaction_id = $charge->getMetadataValue('paypal.transactionID');
- if (!$transaction_id) {
- throw new Exception(pht('Charge has no transaction ID!'));
- }
-
- $params = array(
- 'TRANSACTIONID' => $transaction_id,
- );
-
- $result = $this
- ->newPaypalAPICall()
- ->setRawPayPalQuery('GetTransactionDetails', $params)
- ->resolve();
-
- $is_charge = false;
- $is_fail = false;
- switch ($result['PAYMENTSTATUS']) {
- case 'Processed':
- case 'Completed':
- case 'Completed-Funds-Held':
- $is_charge = true;
- break;
- case 'Partially-Refunded':
- case 'Refunded':
- case 'Reversed':
- case 'Canceled-Reversal':
- // TODO: Handle these.
- return;
- case 'In-Progress':
- case 'Pending':
- // TODO: Also handle these better?
- return;
- case 'Denied':
- case 'Expired':
- case 'Failed':
- case 'None':
- case 'Voided':
- default:
- $is_fail = true;
- break;
- }
-
- if ($charge->getStatus() == PhortuneCharge::STATUS_HOLD) {
- $cart = $charge->getCart();
-
- $unguarded = AphrontWriteGuard::beginScopedUnguardedWrites();
- if ($is_charge) {
- $cart->didApplyCharge($charge);
- } else if ($is_fail) {
- $cart->didFailCharge($charge);
- }
- unset($unguarded);
- }
- }
-
- private function getPaypalAPIUsername() {
- return $this
- ->getProviderConfig()
- ->getMetadataValue(self::PAYPAL_API_USERNAME);
- }
-
- private function getPaypalAPIPassword() {
- return $this
- ->getProviderConfig()
- ->getMetadataValue(self::PAYPAL_API_PASSWORD);
- }
-
- private function getPaypalAPISignature() {
- return $this
- ->getProviderConfig()
- ->getMetadataValue(self::PAYPAL_API_SIGNATURE);
- }
-
-/* -( One-Time Payments )-------------------------------------------------- */
-
- public function canProcessOneTimePayments() {
- return true;
- }
-
-/* -( Controllers )-------------------------------------------------------- */
-
-
- public function canRespondToControllerAction($action) {
- switch ($action) {
- case 'checkout':
- case 'charge':
- case 'cancel':
- return true;
- }
- return parent::canRespondToControllerAction();
- }
-
- public function processControllerRequest(
- PhortuneProviderActionController $controller,
- AphrontRequest $request) {
-
- $viewer = $request->getUser();
-
- $cart = $controller->loadCart($request->getInt('cartID'));
- if (!$cart) {
- return new Aphront404Response();
- }
-
- $charge = $controller->loadActiveCharge($cart);
- switch ($controller->getAction()) {
- case 'checkout':
- if ($charge) {
- throw new Exception(pht('Cart is already charging!'));
- }
- break;
- case 'charge':
- case 'cancel':
- if (!$charge) {
- throw new Exception(pht('Cart is not charging yet!'));
- }
- break;
- }
-
- switch ($controller->getAction()) {
- case 'checkout':
- $return_uri = $this->getControllerURI(
- 'charge',
- array(
- 'cartID' => $cart->getID(),
- ));
-
- $cancel_uri = $this->getControllerURI(
- 'cancel',
- array(
- 'cartID' => $cart->getID(),
- ));
-
- $price = $cart->getTotalPriceAsCurrency();
-
- $charge = $cart->willApplyCharge($viewer, $this);
-
- $params = array(
- 'PAYMENTREQUEST_0_AMT' => $price->formatBareValue(),
- 'PAYMENTREQUEST_0_CURRENCYCODE' => $price->getCurrency(),
- 'PAYMENTREQUEST_0_PAYMENTACTION' => 'Sale',
- 'PAYMENTREQUEST_0_CUSTOM' => $charge->getPHID(),
- 'PAYMENTREQUEST_0_DESC' => $cart->getName(),
-
- 'RETURNURL' => $return_uri,
- 'CANCELURL' => $cancel_uri,
-
- // TODO: This should be cart-dependent if we eventually support
- // physical goods.
- 'NOSHIPPING' => '1',
- );
-
- $result = $this
- ->newPaypalAPICall()
- ->setRawPayPalQuery('SetExpressCheckout', $params)
- ->resolve();
-
- $params = array(
- 'cmd' => '_express-checkout',
- 'token' => $result['TOKEN'],
- );
-
- $uri = new PhutilURI(
- 'https://www.sandbox.paypal.com/cgi-bin/webscr',
- $params);
-
- $cart->setMetadataValue('provider.checkoutURI', (string)$uri);
- $cart->save();
-
- $charge->setMetadataValue('paypal.token', $result['TOKEN']);
- $charge->save();
-
- return id(new AphrontRedirectResponse())
- ->setIsExternal(true)
- ->setURI($uri);
- case 'charge':
- if ($cart->getStatus() !== PhortuneCart::STATUS_PURCHASING) {
- return id(new AphrontRedirectResponse())
- ->setURI($cart->getCheckoutURI());
- }
-
- $token = $request->getStr('token');
-
- $params = array(
- 'TOKEN' => $token,
- );
-
- $result = $this
- ->newPaypalAPICall()
- ->setRawPayPalQuery('GetExpressCheckoutDetails', $params)
- ->resolve();
-
- if ($result['CUSTOM'] !== $charge->getPHID()) {
- throw new Exception(
- pht('Paypal checkout does not match Phortune charge!'));
- }
-
- if ($result['CHECKOUTSTATUS'] !== 'PaymentActionNotInitiated') {
- return $controller->newDialog()
- ->setTitle(pht('Payment Already Processed'))
- ->appendParagraph(
- pht(
- 'The payment response for this charge attempt has already '.
- 'been processed.'))
- ->addCancelButton($cart->getCheckoutURI(), pht('Continue'));
- }
-
- $price = $cart->getTotalPriceAsCurrency();
-
- $params = array(
- 'TOKEN' => $token,
- 'PAYERID' => $result['PAYERID'],
-
- 'PAYMENTREQUEST_0_AMT' => $price->formatBareValue(),
- 'PAYMENTREQUEST_0_CURRENCYCODE' => $price->getCurrency(),
- 'PAYMENTREQUEST_0_PAYMENTACTION' => 'Sale',
- );
-
- $result = $this
- ->newPaypalAPICall()
- ->setRawPayPalQuery('DoExpressCheckoutPayment', $params)
- ->resolve();
-
- $transaction_id = $result['PAYMENTINFO_0_TRANSACTIONID'];
-
- $success = false;
- $hold = false;
- switch ($result['PAYMENTINFO_0_PAYMENTSTATUS']) {
- case 'Processed':
- case 'Completed':
- case 'Completed-Funds-Held':
- $success = true;
- break;
- case 'In-Progress':
- case 'Pending':
- // TODO: We can capture more information about this stuff.
- $hold = true;
- break;
- case 'Denied':
- case 'Expired':
- case 'Failed':
- case 'Partially-Refunded':
- case 'Canceled-Reversal':
- case 'None':
- case 'Refunded':
- case 'Reversed':
- case 'Voided':
- default:
- // These are all failure states.
- break;
- }
-
- $unguarded = AphrontWriteGuard::beginScopedUnguardedWrites();
-
- $charge->setMetadataValue('paypal.transactionID', $transaction_id);
- $charge->save();
-
- if ($success) {
- $cart->didApplyCharge($charge);
- $response = id(new AphrontRedirectResponse())->setURI(
- $cart->getCheckoutURI());
- } else if ($hold) {
- $cart->didHoldCharge($charge);
-
- $response = $controller
- ->newDialog()
- ->setTitle(pht('Charge On Hold'))
- ->appendParagraph(
- pht('Your charge is on hold, for reasons?'))
- ->addCancelButton($cart->getCheckoutURI(), pht('Continue'));
- } else {
- $cart->didFailCharge($charge);
-
- $response = $controller
- ->newDialog()
- ->setTitle(pht('Charge Failed'))
- ->addCancelButton($cart->getCheckoutURI(), pht('Continue'));
- }
- unset($unguarded);
-
- return $response;
- case 'cancel':
- if ($cart->getStatus() === PhortuneCart::STATUS_PURCHASING) {
- $unguarded = AphrontWriteGuard::beginScopedUnguardedWrites();
- // TODO: Since the user cancelled this, we could conceivably just
- // throw it away or make it more clear that it's a user cancel.
- $cart->didFailCharge($charge);
- unset($unguarded);
- }
-
- return id(new AphrontRedirectResponse())
- ->setURI($cart->getCheckoutURI());
- }
-
- throw new Exception(
- pht('Unsupported action "%s".', $controller->getAction()));
- }
-
- private function newPaypalAPICall() {
- if ($this->isAcceptingLivePayments()) {
- $host = 'https://api-3t.paypal.com/nvp';
- } else {
- $host = 'https://api-3t.sandbox.paypal.com/nvp';
- }
-
- return id(new PhutilPayPalAPIFuture())
- ->setHost($host)
- ->setAPIUsername($this->getPaypalAPIUsername())
- ->setAPIPassword($this->getPaypalAPIPassword())
- ->setAPISignature($this->getPaypalAPISignature());
- }
-
-
-}
diff --git a/src/applications/phortune/provider/PhortunePaymentProvider.php b/src/applications/phortune/provider/PhortunePaymentProvider.php
deleted file mode 100644
--- a/src/applications/phortune/provider/PhortunePaymentProvider.php
+++ /dev/null
@@ -1,295 +0,0 @@
-providerConfig = $provider_config;
- return $this;
- }
-
- public function getProviderConfig() {
- return $this->providerConfig;
- }
-
- /**
- * Return a short name which identifies this provider.
- */
- abstract public function getName();
-
-
-/* -( Configuring Providers )---------------------------------------------- */
-
-
- /**
- * Return a human-readable provider name for use on the merchant workflow
- * where a merchant owner adds providers.
- */
- abstract public function getConfigureName();
-
-
- /**
- * Return a human-readable provider description for use on the merchant
- * workflow where a merchant owner adds providers.
- */
- abstract public function getConfigureDescription();
-
- abstract public function getConfigureInstructions();
-
- abstract public function getConfigureProvidesDescription();
-
- abstract public function getAllConfigurableProperties();
-
- abstract public function getAllConfigurableSecretProperties();
- /**
- * Read a dictionary of properties from the provider's configuration for
- * use when editing the provider.
- */
- public function readEditFormValuesFromProviderConfig() {
- $properties = $this->getAllConfigurableProperties();
- $config = $this->getProviderConfig();
-
- $secrets = $this->getAllConfigurableSecretProperties();
- $secrets = array_fuse($secrets);
-
- $map = array();
- foreach ($properties as $property) {
- $map[$property] = $config->getMetadataValue($property);
- if (isset($secrets[$property])) {
- $map[$property] = $this->renderConfigurationSecret($map[$property]);
- }
- }
-
- return $map;
- }
-
-
- /**
- * Read a dictionary of properties from a request for use when editing the
- * provider.
- */
- public function readEditFormValuesFromRequest(AphrontRequest $request) {
- $properties = $this->getAllConfigurableProperties();
-
- $map = array();
- foreach ($properties as $property) {
- $map[$property] = $request->getStr($property);
- }
-
- return $map;
- }
-
-
- abstract public function processEditForm(
- AphrontRequest $request,
- array $values);
-
- abstract public function extendEditForm(
- AphrontRequest $request,
- AphrontFormView $form,
- array $values,
- array $issues);
-
- protected function renderConfigurationSecret($value) {
- if (phutil_nonempty_string($value)) {
- return str_repeat('*', strlen($value));
- }
- return '';
- }
-
- public function isConfigurationSecret($value) {
- return preg_match('/^\*+\z/', trim($value));
- }
-
- abstract public function canRunConfigurationTest();
-
- public function runConfigurationTest() {
- throw new PhutilMethodNotImplementedException();
- }
-
-
-/* -( Selecting Providers )------------------------------------------------ */
-
-
- public static function getAllProviders() {
- return id(new PhutilClassMapQuery())
- ->setAncestorClass(__CLASS__)
- ->execute();
- }
-
- public function isEnabled() {
- return $this->getProviderConfig()->getIsEnabled();
- }
-
- abstract public function isAcceptingLivePayments();
- abstract public function getPaymentMethodDescription();
- abstract public function getPaymentMethodIcon();
- abstract public function getPaymentMethodProviderDescription();
-
- final public function applyCharge(
- PhortunePaymentMethod $payment_method,
- PhortuneCharge $charge) {
- $this->executeCharge($payment_method, $charge);
- }
-
- final public function refundCharge(
- PhortuneCharge $charge,
- PhortuneCharge $refund) {
- $this->executeRefund($charge, $refund);
- }
-
- abstract protected function executeCharge(
- PhortunePaymentMethod $payment_method,
- PhortuneCharge $charge);
-
- abstract protected function executeRefund(
- PhortuneCharge $charge,
- PhortuneCharge $refund);
-
- abstract public function updateCharge(PhortuneCharge $charge);
-
-
-/* -( Adding Payment Methods )--------------------------------------------- */
-
-
- /**
- * @task addmethod
- */
- public function canCreatePaymentMethods() {
- return false;
- }
-
-
- /**
- * @task addmethod
- */
- public function translateCreatePaymentMethodErrorCode($error_code) {
- throw new PhutilMethodNotImplementedException();
- }
-
-
- /**
- * @task addmethod
- */
- public function getCreatePaymentMethodErrorMessage($error_code) {
- throw new PhutilMethodNotImplementedException();
- }
-
-
- /**
- * @task addmethod
- */
- public function validateCreatePaymentMethodToken(array $token) {
- throw new PhutilMethodNotImplementedException();
- }
-
-
- /**
- * @task addmethod
- */
- public function createPaymentMethodFromRequest(
- AphrontRequest $request,
- PhortunePaymentMethod $method,
- array $token) {
- throw new PhutilMethodNotImplementedException();
- }
-
-
- /**
- * @task addmethod
- */
- public function renderCreatePaymentMethodForm(
- AphrontRequest $request,
- array $errors) {
- throw new PhutilMethodNotImplementedException();
- }
-
- public function getDefaultPaymentMethodDisplayName(
- PhortunePaymentMethod $method) {
- throw new PhutilMethodNotImplementedException();
- }
-
-
-/* -( One-Time Payments )-------------------------------------------------- */
-
-
- public function canProcessOneTimePayments() {
- return false;
- }
-
- public function renderOneTimePaymentButton(
- PhortuneAccount $account,
- PhortuneCart $cart,
- PhabricatorUser $user) {
-
- require_celerity_resource('phortune-css');
-
- $description = $this->getPaymentMethodProviderDescription();
- $details = $this->getPaymentMethodDescription();
-
- $icon = id(new PHUIIconView())
- ->setSpriteSheet(PHUIIconView::SPRITE_LOGIN)
- ->setSpriteIcon($this->getPaymentMethodIcon());
-
- $button = id(new PHUIButtonView())
- ->setSize(PHUIButtonView::BIG)
- ->setColor(PHUIButtonView::GREY)
- ->setIcon($icon)
- ->setText($description)
- ->setSubtext($details);
-
- // NOTE: We generate a local URI to make sure the form picks up CSRF tokens.
- $uri = $this->getControllerURI(
- 'checkout',
- array(
- 'cartID' => $cart->getID(),
- ),
- $local = true);
-
- return phabricator_form(
- $user,
- array(
- 'action' => $uri,
- 'method' => 'POST',
- ),
- $button);
- }
-
-
-/* -( Controllers )-------------------------------------------------------- */
-
-
- final public function getControllerURI(
- $action,
- array $params = array(),
- $local = false) {
-
- $id = $this->getProviderConfig()->getID();
- $app = PhabricatorApplication::getByClass('PhabricatorPhortuneApplication');
- $path = $app->getBaseURI().'provider/'.$id.'/'.$action.'/';
-
- $uri = new PhutilURI($path, $params);
-
- if ($local) {
- return $uri;
- } else {
- return PhabricatorEnv::getURI((string)$uri);
- }
- }
-
- public function canRespondToControllerAction($action) {
- return false;
- }
-
- public function processControllerRequest(
- PhortuneProviderActionController $controller,
- AphrontRequest $request) {
- throw new PhutilMethodNotImplementedException();
- }
-
-}
diff --git a/src/applications/phortune/provider/PhortuneStripePaymentProvider.php b/src/applications/phortune/provider/PhortuneStripePaymentProvider.php
deleted file mode 100644
--- a/src/applications/phortune/provider/PhortuneStripePaymentProvider.php
+++ /dev/null
@@ -1,470 +0,0 @@
-getPublishableKey());
- }
-
- public function getName() {
- return pht('Stripe');
- }
-
- public function getConfigureName() {
- return pht('Add Stripe Payments Account');
- }
-
- public function getConfigureDescription() {
- return pht(
- 'Allows you to accept credit or debit card payments with a '.
- 'stripe.com account.');
- }
-
- public function getConfigureProvidesDescription() {
- return pht('This merchant accepts credit and debit cards via Stripe.');
- }
-
- public function getPaymentMethodDescription() {
- return pht('Add Credit or Debit Card (US and Canada)');
- }
-
- public function getPaymentMethodIcon() {
- return 'Stripe';
- }
-
- public function getPaymentMethodProviderDescription() {
- return pht('Processed by Stripe');
- }
-
- public function getDefaultPaymentMethodDisplayName(
- PhortunePaymentMethod $method) {
- return pht('Credit/Debit Card');
- }
-
- public function getAllConfigurableProperties() {
- return array(
- self::STRIPE_PUBLISHABLE_KEY,
- self::STRIPE_SECRET_KEY,
- );
- }
-
- public function getAllConfigurableSecretProperties() {
- return array(
- self::STRIPE_SECRET_KEY,
- );
- }
-
- public function processEditForm(
- AphrontRequest $request,
- array $values) {
-
- $errors = array();
- $issues = array();
-
- if (!strlen($values[self::STRIPE_SECRET_KEY])) {
- $errors[] = pht('Stripe Secret Key is required.');
- $issues[self::STRIPE_SECRET_KEY] = pht('Required');
- }
-
- if (!strlen($values[self::STRIPE_PUBLISHABLE_KEY])) {
- $errors[] = pht('Stripe Publishable Key is required.');
- $issues[self::STRIPE_PUBLISHABLE_KEY] = pht('Required');
- }
-
- return array($errors, $issues, $values);
- }
-
- public function extendEditForm(
- AphrontRequest $request,
- AphrontFormView $form,
- array $values,
- array $issues) {
-
- $form
- ->appendChild(
- id(new AphrontFormTextControl())
- ->setName(self::STRIPE_SECRET_KEY)
- ->setValue($values[self::STRIPE_SECRET_KEY])
- ->setError(idx($issues, self::STRIPE_SECRET_KEY, true))
- ->setLabel(pht('Stripe Secret Key')))
- ->appendChild(
- id(new AphrontFormTextControl())
- ->setName(self::STRIPE_PUBLISHABLE_KEY)
- ->setValue($values[self::STRIPE_PUBLISHABLE_KEY])
- ->setError(idx($issues, self::STRIPE_PUBLISHABLE_KEY, true))
- ->setLabel(pht('Stripe Publishable Key')));
- }
-
- public function getConfigureInstructions() {
- return pht(
- "To configure Stripe, register or log in to an existing account on ".
- "[[https://stripe.com | stripe.com]]. Once logged in:\n\n".
- " - Go to {nav icon=user, name=Your Account > Account Settings ".
- "> API Keys}\n".
- " - Copy the **Secret Key** and **Publishable Key** into the fields ".
- "above.\n\n".
- "You can either use the test keys to add this provider in test mode, ".
- "or the live keys to accept live payments.");
- }
-
- public function canRunConfigurationTest() {
- return true;
- }
-
- public function runConfigurationTest() {
- $this->loadStripeAPILibraries();
-
- $secret_key = $this->getSecretKey();
- $account = Stripe_Account::retrieve($secret_key);
- }
-
- /**
- * @phutil-external-symbol class Stripe_Charge
- * @phutil-external-symbol class Stripe_CardError
- * @phutil-external-symbol class Stripe_Account
- */
- protected function executeCharge(
- PhortunePaymentMethod $method,
- PhortuneCharge $charge) {
- $this->loadStripeAPILibraries();
-
- $price = $charge->getAmountAsCurrency();
-
- $secret_key = $this->getSecretKey();
- $params = array(
- 'amount' => $price->getValueInUSDCents(),
- 'currency' => $price->getCurrency(),
- 'customer' => $method->getMetadataValue('stripe.customerID'),
- 'description' => $charge->getPHID(),
- 'capture' => true,
- );
-
- $stripe_charge = Stripe_Charge::create($params, $secret_key);
-
- $id = $stripe_charge->id;
- if (!$id) {
- throw new Exception(pht('Stripe charge call did not return an ID!'));
- }
-
- $charge->setMetadataValue('stripe.chargeID', $id);
- $charge->save();
- }
-
- protected function executeRefund(
- PhortuneCharge $charge,
- PhortuneCharge $refund) {
- $this->loadStripeAPILibraries();
-
- $charge_id = $charge->getMetadataValue('stripe.chargeID');
- if (!$charge_id) {
- throw new Exception(
- pht('Unable to refund charge; no Stripe chargeID!'));
- }
-
- $refund_cents = $refund
- ->getAmountAsCurrency()
- ->negate()
- ->getValueInUSDCents();
-
- $secret_key = $this->getSecretKey();
- $params = array(
- 'amount' => $refund_cents,
- );
-
- $stripe_charge = Stripe_Charge::retrieve($charge_id, $secret_key);
- $stripe_refund = $stripe_charge->refunds->create($params);
-
- $id = $stripe_refund->id;
- if (!$id) {
- throw new Exception(pht('Stripe refund call did not return an ID!'));
- }
-
- $charge->setMetadataValue('stripe.refundID', $id);
- $charge->save();
- }
-
- public function updateCharge(PhortuneCharge $charge) {
- $this->loadStripeAPILibraries();
-
- $charge_id = $charge->getMetadataValue('stripe.chargeID');
- if (!$charge_id) {
- throw new Exception(
- pht('Unable to update charge; no Stripe chargeID!'));
- }
-
- $secret_key = $this->getSecretKey();
- $stripe_charge = Stripe_Charge::retrieve($charge_id, $secret_key);
-
- // TODO: Deal with disputes / chargebacks / surprising refunds.
-
- }
-
- private function getPublishableKey() {
- return $this
- ->getProviderConfig()
- ->getMetadataValue(self::STRIPE_PUBLISHABLE_KEY);
- }
-
- private function getSecretKey() {
- return $this
- ->getProviderConfig()
- ->getMetadataValue(self::STRIPE_SECRET_KEY);
- }
-
-
-/* -( Adding Payment Methods )--------------------------------------------- */
-
-
- public function canCreatePaymentMethods() {
- return true;
- }
-
-
- /**
- * @phutil-external-symbol class Stripe_Token
- * @phutil-external-symbol class Stripe_Customer
- */
- public function createPaymentMethodFromRequest(
- AphrontRequest $request,
- PhortunePaymentMethod $method,
- array $token) {
- $this->loadStripeAPILibraries();
-
- $secret_key = $this->getSecretKey();
- $stripe_token = $token['stripeCardToken'];
-
- // First, make sure the token is valid.
- $info = id(new Stripe_Token())->retrieve($stripe_token, $secret_key);
-
- $account_phid = $method->getAccountPHID();
- $author_phid = $method->getAuthorPHID();
-
- $params = array(
- 'card' => $stripe_token,
- 'description' => $account_phid.':'.$author_phid,
- );
-
- // Then, we need to create a Customer in order to be able to charge
- // the card more than once. We create one Customer for each card;
- // they do not map to PhortuneAccounts because we allow an account to
- // have more than one active card.
- try {
- $customer = Stripe_Customer::create($params, $secret_key);
- } catch (Stripe_CardError $ex) {
- $display_exception = $this->newDisplayExceptionFromCardError($ex);
- if ($display_exception) {
- throw $display_exception;
- }
- throw $ex;
- }
-
- $card = $info->card;
-
- $method
- ->setBrand($card->brand)
- ->setLastFourDigits($card->last4)
- ->setExpires($card->exp_year, $card->exp_month)
- ->setMetadata(
- array(
- 'type' => 'stripe.customer',
- 'stripe.customerID' => $customer->id,
- 'stripe.cardToken' => $stripe_token,
- ));
- }
-
- public function renderCreatePaymentMethodForm(
- AphrontRequest $request,
- array $errors) {
-
- $src = 'https://js.stripe.com/v2/';
-
- $ccform = id(new PhortuneCreditCardForm())
- ->setSecurityAssurance(
- pht('Payments are processed securely by Stripe.'))
- ->setUser($request->getUser())
- ->setErrors($errors)
- ->addScript($src);
-
- CelerityAPI::getStaticResourceResponse()
- ->addContentSecurityPolicyURI('script-src', $src)
- ->addContentSecurityPolicyURI('frame-src', $src);
-
- Javelin::initBehavior(
- 'stripe-payment-form',
- array(
- 'stripePublishableKey' => $this->getPublishableKey(),
- 'formID' => $ccform->getFormID(),
- ));
-
- return $ccform->buildForm();
- }
-
- private function getStripeShortErrorCode($error_code) {
- $prefix = 'cc:stripe:';
- if (strncmp($error_code, $prefix, strlen($prefix))) {
- return null;
- }
- return substr($error_code, strlen($prefix));
- }
-
- public function validateCreatePaymentMethodToken(array $token) {
- return isset($token['stripeCardToken']);
- }
-
- public function translateCreatePaymentMethodErrorCode($error_code) {
- $short_code = $this->getStripeShortErrorCode($error_code);
-
- if ($short_code) {
- static $map = array(
- 'error:invalid_number' => PhortuneErrCode::ERR_CC_INVALID_NUMBER,
- 'error:invalid_cvc' => PhortuneErrCode::ERR_CC_INVALID_CVC,
- 'error:invalid_expiry_month' => PhortuneErrCode::ERR_CC_INVALID_EXPIRY,
- 'error:invalid_expiry_year' => PhortuneErrCode::ERR_CC_INVALID_EXPIRY,
- );
-
- if (isset($map[$short_code])) {
- return $map[$short_code];
- }
- }
-
- return $error_code;
- }
-
- /**
- * See https://stripe.com/docs/api#errors for more information on possible
- * errors.
- */
- public function getCreatePaymentMethodErrorMessage($error_code) {
- $short_code = $this->getStripeShortErrorCode($error_code);
- if (!$short_code) {
- return null;
- }
-
- switch ($short_code) {
- case 'error:incorrect_number':
- $error_key = 'number';
- $message = pht('Invalid or incorrect credit card number.');
- break;
- case 'error:incorrect_cvc':
- $error_key = 'cvc';
- $message = pht('Card CVC is invalid or incorrect.');
- break;
- $error_key = 'exp';
- $message = pht('Card expiration date is invalid or incorrect.');
- break;
- case 'error:invalid_expiry_month':
- case 'error:invalid_expiry_year':
- case 'error:invalid_cvc':
- case 'error:invalid_number':
- // NOTE: These should be translated into Phortune error codes earlier,
- // so we don't expect to receive them here. They are listed for clarity
- // and completeness. If we encounter one, we treat it as an unknown
- // error.
- break;
- case 'error:invalid_amount':
- case 'error:missing':
- case 'error:card_declined':
- case 'error:expired_card':
- case 'error:duplicate_transaction':
- case 'error:processing_error':
- default:
- // NOTE: These errors currently don't receive a detailed message.
- // NOTE: We can also end up here with "http:nnn" messages.
-
- // TODO: At least some of these should have a better message, or be
- // translated into common errors above.
- break;
- }
-
- return null;
- }
-
- private function loadStripeAPILibraries() {
- $root = dirname(phutil_get_library_root('phabricator'));
- require_once $root.'/externals/stripe-php/lib/Stripe.php';
- }
-
-
- private function newDisplayExceptionFromCardError(Stripe_CardError $ex) {
- $body = $ex->getJSONBody();
- if (!$body) {
- return null;
- }
-
- $map = idx($body, 'error');
- if (!$map) {
- return null;
- }
-
- $view = array();
-
- $message = idx($map, 'message');
-
- $view[] = id(new PHUIInfoView())
- ->setErrors(array($message));
-
- $view[] = phutil_tag(
- 'div',
- array(
- 'class' => 'mlt mlb',
- ),
- pht('Additional details about this error:'));
-
- $rows = array();
-
- $rows[] = array(
- pht('Error Code'),
- idx($map, 'code'),
- );
-
- $rows[] = array(
- pht('Error Type'),
- idx($map, 'type'),
- );
-
- $param = idx($map, 'param');
- if (strlen($param)) {
- $rows[] = array(
- pht('Error Param'),
- $param,
- );
- }
-
- $decline_code = idx($map, 'decline_code');
- if (strlen($decline_code)) {
- $rows[] = array(
- pht('Decline Code'),
- $decline_code,
- );
- }
-
- $doc_url = idx($map, 'doc_url');
- if ($doc_url) {
- $rows[] = array(
- pht('Learn More'),
- phutil_tag(
- 'a',
- array(
- 'href' => $doc_url,
- 'target' => '_blank',
- ),
- $doc_url),
- );
- }
-
- $view[] = id(new AphrontTableView($rows))
- ->setColumnClasses(
- array(
- 'header',
- 'wide',
- ));
-
- return id(new PhortuneDisplayException(get_class($ex)))
- ->setView($view);
- }
-
-
-}
diff --git a/src/applications/phortune/provider/PhortuneTestPaymentProvider.php b/src/applications/phortune/provider/PhortuneTestPaymentProvider.php
deleted file mode 100644
--- a/src/applications/phortune/provider/PhortuneTestPaymentProvider.php
+++ /dev/null
@@ -1,160 +0,0 @@
-setExpires('2050', '01')
- ->setBrand('FreeMoney')
- ->setLastFourDigits('9999')
- ->setMetadata(
- array(
- 'type' => 'test.wealth',
- ));
-
- return array();
- }
-
-
- /**
- * @task addmethod
- */
- public function renderCreatePaymentMethodForm(
- AphrontRequest $request,
- array $errors) {
-
- $ccform = id(new PhortuneCreditCardForm())
- ->setSecurityAssurance(
- pht('This is a test payment provider.'))
- ->setUser($request->getUser())
- ->setErrors($errors);
-
- Javelin::initBehavior(
- 'test-payment-form',
- array(
- 'formID' => $ccform->getFormID(),
- ));
-
- return $ccform->buildForm();
- }
-}
diff --git a/src/applications/phortune/provider/__tests__/PhortunePaymentProviderTestCase.php b/src/applications/phortune/provider/__tests__/PhortunePaymentProviderTestCase.php
deleted file mode 100644
--- a/src/applications/phortune/provider/__tests__/PhortunePaymentProviderTestCase.php
+++ /dev/null
@@ -1,10 +0,0 @@
-assertTrue(true);
- }
-
-}
diff --git a/src/applications/phortune/query/PhortuneAccountEmailQuery.php b/src/applications/phortune/query/PhortuneAccountEmailQuery.php
deleted file mode 100644
--- a/src/applications/phortune/query/PhortuneAccountEmailQuery.php
+++ /dev/null
@@ -1,113 +0,0 @@
-ids = $ids;
- return $this;
- }
-
- public function withPHIDs(array $phids) {
- $this->phids = $phids;
- return $this;
- }
-
- public function withAccountPHIDs(array $phids) {
- $this->accountPHIDs = $phids;
- return $this;
- }
-
- public function withAddressKeys(array $keys) {
- $this->addressKeys = $keys;
- return $this;
- }
-
- public function withStatuses(array $statuses) {
- $this->statuses = $statuses;
- return $this;
- }
-
- public function newResultObject() {
- return new PhortuneAccountEmail();
- }
-
- protected function willFilterPage(array $addresses) {
- $accounts = id(new PhortuneAccountQuery())
- ->setViewer($this->getViewer())
- ->setParentQuery($this)
- ->withPHIDs(mpull($addresses, 'getAccountPHID'))
- ->execute();
- $accounts = mpull($accounts, null, 'getPHID');
-
- foreach ($addresses as $key => $address) {
- $account = idx($accounts, $address->getAccountPHID());
-
- if (!$account) {
- $this->didRejectResult($addresses[$key]);
- unset($addresses[$key]);
- continue;
- }
-
- $address->attachAccount($account);
- }
-
- return $addresses;
- }
-
- protected function buildWhereClauseParts(AphrontDatabaseConnection $conn) {
- $where = parent::buildWhereClauseParts($conn);
-
- if ($this->ids !== null) {
- $where[] = qsprintf(
- $conn,
- 'address.id IN (%Ld)',
- $this->ids);
- }
-
- if ($this->phids !== null) {
- $where[] = qsprintf(
- $conn,
- 'address.phid IN (%Ls)',
- $this->phids);
- }
-
- if ($this->accountPHIDs !== null) {
- $where[] = qsprintf(
- $conn,
- 'address.accountPHID IN (%Ls)',
- $this->accountPHIDs);
- }
-
- if ($this->addressKeys !== null) {
- $where[] = qsprintf(
- $conn,
- 'address.addressKey IN (%Ls)',
- $this->addressKeys);
- }
-
- if ($this->statuses !== null) {
- $where[] = qsprintf(
- $conn,
- 'address.status IN (%Ls)',
- $this->statuses);
- }
-
- return $where;
- }
-
- public function getQueryApplicationClass() {
- return 'PhabricatorPhortuneApplication';
- }
-
- protected function getPrimaryTableAlias() {
- return 'address';
- }
-
-}
diff --git a/src/applications/phortune/query/PhortuneAccountEmailTransactionQuery.php b/src/applications/phortune/query/PhortuneAccountEmailTransactionQuery.php
deleted file mode 100644
--- a/src/applications/phortune/query/PhortuneAccountEmailTransactionQuery.php
+++ /dev/null
@@ -1,10 +0,0 @@
-setViewer($user)
- ->withMemberPHIDs(array($user->getPHID()))
- ->execute();
-
- if (!$accounts) {
- $accounts = array(
- PhortuneAccount::createNewAccount($user, $content_source),
- );
- }
-
- $accounts = mpull($accounts, null, 'getPHID');
-
- return $accounts;
- }
-
- public function withIDs(array $ids) {
- $this->ids = $ids;
- return $this;
- }
-
- public function withPHIDs(array $phids) {
- $this->phids = $phids;
- return $this;
- }
-
- public function withMemberPHIDs(array $phids) {
- $this->memberPHIDs = $phids;
- return $this;
- }
-
- public function newResultObject() {
- return new PhortuneAccount();
- }
-
- protected function willFilterPage(array $accounts) {
- $query = id(new PhabricatorEdgeQuery())
- ->withSourcePHIDs(mpull($accounts, 'getPHID'))
- ->withEdgeTypes(
- array(
- PhortuneAccountHasMemberEdgeType::EDGECONST,
- PhortuneAccountHasMerchantEdgeType::EDGECONST,
- ));
-
- $query->execute();
-
- foreach ($accounts as $account) {
- $member_phids = $query->getDestinationPHIDs(
- array(
- $account->getPHID(),
- ),
- array(
- PhortuneAccountHasMemberEdgeType::EDGECONST,
- ));
- $member_phids = array_reverse($member_phids);
- $account->attachMemberPHIDs($member_phids);
-
- $merchant_phids = $query->getDestinationPHIDs(
- array(
- $account->getPHID(),
- ),
- array(
- PhortuneAccountHasMerchantEdgeType::EDGECONST,
- ));
- $merchant_phids = array_reverse($merchant_phids);
- $account->attachMerchantPHIDs($merchant_phids);
- }
-
- return $accounts;
- }
-
- protected function buildWhereClauseParts(AphrontDatabaseConnection $conn) {
- $where = parent::buildWhereClauseParts($conn);
-
- if ($this->ids !== null) {
- $where[] = qsprintf(
- $conn,
- 'a.id IN (%Ld)',
- $this->ids);
- }
-
- if ($this->phids !== null) {
- $where[] = qsprintf(
- $conn,
- 'a.phid IN (%Ls)',
- $this->phids);
- }
-
- if ($this->memberPHIDs !== null) {
- $where[] = qsprintf(
- $conn,
- 'm.dst IN (%Ls)',
- $this->memberPHIDs);
- }
-
- return $where;
- }
-
- protected function buildJoinClauseParts(AphrontDatabaseConnection $conn) {
- $joins = parent::buildJoinClauseParts($conn);
-
- if ($this->memberPHIDs !== null) {
- $joins[] = qsprintf(
- $conn,
- 'LEFT JOIN %T m ON a.phid = m.src AND m.type = %d',
- PhabricatorEdgeConfig::TABLE_NAME_EDGE,
- PhortuneAccountHasMemberEdgeType::EDGECONST);
- }
-
- return $joins;
- }
-
- public function getQueryApplicationClass() {
- return 'PhabricatorPhortuneApplication';
- }
-
- protected function getPrimaryTableAlias() {
- return 'a';
- }
-
-}
diff --git a/src/applications/phortune/query/PhortuneAccountTransactionQuery.php b/src/applications/phortune/query/PhortuneAccountTransactionQuery.php
deleted file mode 100644
--- a/src/applications/phortune/query/PhortuneAccountTransactionQuery.php
+++ /dev/null
@@ -1,10 +0,0 @@
-ids = $ids;
- return $this;
- }
-
- public function withPHIDs(array $phids) {
- $this->phids = $phids;
- return $this;
- }
-
- public function withAccountPHIDs(array $account_phids) {
- $this->accountPHIDs = $account_phids;
- return $this;
- }
-
- public function withMerchantPHIDs(array $merchant_phids) {
- $this->merchantPHIDs = $merchant_phids;
- return $this;
- }
-
- public function withSubscriptionPHIDs(array $subscription_phids) {
- $this->subscriptionPHIDs = $subscription_phids;
- return $this;
- }
-
- public function withStatuses(array $statuses) {
- $this->statuses = $statuses;
- return $this;
- }
-
-
- /**
- * Include or exclude carts which represent invoices with payments due.
- *
- * @param bool `true` to select invoices; `false` to exclude invoices.
- * @return this
- */
- public function withInvoices($invoices) {
- $this->invoices = $invoices;
- return $this;
- }
-
- public function needPurchases($need_purchases) {
- $this->needPurchases = $need_purchases;
- return $this;
- }
-
- protected function loadPage() {
- $table = new PhortuneCart();
- $conn = $table->establishConnection('r');
-
- $rows = queryfx_all(
- $conn,
- 'SELECT cart.* FROM %T cart %Q %Q %Q',
- $table->getTableName(),
- $this->buildWhereClause($conn),
- $this->buildOrderClause($conn),
- $this->buildLimitClause($conn));
-
- return $table->loadAllFromArray($rows);
- }
-
- protected function willFilterPage(array $carts) {
- $accounts = id(new PhortuneAccountQuery())
- ->setViewer($this->getViewer())
- ->withPHIDs(mpull($carts, 'getAccountPHID'))
- ->execute();
- $accounts = mpull($accounts, null, 'getPHID');
-
- foreach ($carts as $key => $cart) {
- $account = idx($accounts, $cart->getAccountPHID());
- if (!$account) {
- unset($carts[$key]);
- continue;
- }
- $cart->attachAccount($account);
- }
-
- if (!$carts) {
- return array();
- }
-
- $merchants = id(new PhortuneMerchantQuery())
- ->setViewer($this->getViewer())
- ->withPHIDs(mpull($carts, 'getMerchantPHID'))
- ->execute();
- $merchants = mpull($merchants, null, 'getPHID');
-
- foreach ($carts as $key => $cart) {
- $merchant = idx($merchants, $cart->getMerchantPHID());
- if (!$merchant) {
- unset($carts[$key]);
- continue;
- }
- $cart->attachMerchant($merchant);
- }
-
- if (!$carts) {
- return array();
- }
-
- $implementations = array();
-
- $cart_map = mgroup($carts, 'getCartClass');
- foreach ($cart_map as $class => $class_carts) {
- $implementations += newv($class, array())->loadImplementationsForCarts(
- $this->getViewer(),
- $class_carts);
- }
-
- foreach ($carts as $key => $cart) {
- $implementation = idx($implementations, $key);
- if (!$implementation) {
- unset($carts[$key]);
- continue;
- }
- $cart->attachImplementation($implementation);
- }
-
- return $carts;
- }
-
- protected function didFilterPage(array $carts) {
- if ($this->needPurchases) {
- $purchases = id(new PhortunePurchaseQuery())
- ->setViewer($this->getViewer())
- ->setParentQuery($this)
- ->withCartPHIDs(mpull($carts, 'getPHID'))
- ->execute();
-
- $purchases = mgroup($purchases, 'getCartPHID');
- foreach ($carts as $cart) {
- $cart->attachPurchases(idx($purchases, $cart->getPHID(), array()));
- }
- }
-
- return $carts;
- }
-
- protected function buildWhereClause(AphrontDatabaseConnection $conn) {
- $where = array();
-
- $where[] = $this->buildPagingClause($conn);
-
- if ($this->ids !== null) {
- $where[] = qsprintf(
- $conn,
- 'cart.id IN (%Ld)',
- $this->ids);
- }
-
- if ($this->phids !== null) {
- $where[] = qsprintf(
- $conn,
- 'cart.phid IN (%Ls)',
- $this->phids);
- }
-
- if ($this->accountPHIDs !== null) {
- $where[] = qsprintf(
- $conn,
- 'cart.accountPHID IN (%Ls)',
- $this->accountPHIDs);
- }
-
- if ($this->merchantPHIDs !== null) {
- $where[] = qsprintf(
- $conn,
- 'cart.merchantPHID IN (%Ls)',
- $this->merchantPHIDs);
- }
-
- if ($this->subscriptionPHIDs !== null) {
- $where[] = qsprintf(
- $conn,
- 'cart.subscriptionPHID IN (%Ls)',
- $this->subscriptionPHIDs);
- }
-
- if ($this->statuses !== null) {
- $where[] = qsprintf(
- $conn,
- 'cart.status IN (%Ls)',
- $this->statuses);
- }
-
- if ($this->invoices !== null) {
- if ($this->invoices) {
- $where[] = qsprintf(
- $conn,
- 'cart.status = %s AND cart.isInvoice = 1',
- PhortuneCart::STATUS_READY);
- } else {
- $where[] = qsprintf(
- $conn,
- 'cart.status != %s OR cart.isInvoice = 0',
- PhortuneCart::STATUS_READY);
- }
- }
-
- return $this->formatWhereClause($conn, $where);
- }
-
- public function getQueryApplicationClass() {
- return 'PhabricatorPhortuneApplication';
- }
-
-}
diff --git a/src/applications/phortune/query/PhortuneCartSearchEngine.php b/src/applications/phortune/query/PhortuneCartSearchEngine.php
deleted file mode 100644
--- a/src/applications/phortune/query/PhortuneCartSearchEngine.php
+++ /dev/null
@@ -1,218 +0,0 @@
-account = $account;
- return $this;
- }
-
- public function getAccount() {
- return $this->account;
- }
-
- public function setMerchant(PhortuneMerchant $merchant) {
- $this->merchant = $merchant;
- return $this;
- }
-
- public function getMerchant() {
- return $this->merchant;
- }
-
- public function setSubscription(PhortuneSubscription $subscription) {
- $this->subscription = $subscription;
- return $this;
- }
-
- public function getSubscription() {
- return $this->subscription;
- }
-
- public function getResultTypeDescription() {
- return pht('Phortune Orders');
- }
-
- public function getApplicationClassName() {
- return 'PhabricatorPhortuneApplication';
- }
-
- public function buildSavedQueryFromRequest(AphrontRequest $request) {
- $saved = new PhabricatorSavedQuery();
-
- return $saved;
- }
-
- public function buildQueryFromSavedQuery(PhabricatorSavedQuery $saved) {
- $query = id(new PhortuneCartQuery())
- ->needPurchases(true);
-
- $viewer = $this->requireViewer();
-
- $merchant = $this->getMerchant();
- $account = $this->getAccount();
- if ($merchant) {
- $query->withMerchantPHIDs(array($merchant->getPHID()));
- } else if ($account) {
- $query->withAccountPHIDs(array($account->getPHID()));
- } else {
- $accounts = id(new PhortuneAccountQuery())
- ->withMemberPHIDs(array($viewer->getPHID()))
- ->execute();
- if ($accounts) {
- $query->withAccountPHIDs(mpull($accounts, 'getPHID'));
- } else {
- throw new Exception(pht('You have no accounts!'));
- }
- }
-
- $subscription = $this->getSubscription();
- if ($subscription) {
- $query->withSubscriptionPHIDs(array($subscription->getPHID()));
- }
-
- if ($saved->getParameter('invoices')) {
- $query->withInvoices(true);
- } else {
- $query->withStatuses(
- array(
- PhortuneCart::STATUS_PURCHASING,
- PhortuneCart::STATUS_CHARGED,
- PhortuneCart::STATUS_HOLD,
- PhortuneCart::STATUS_REVIEW,
- PhortuneCart::STATUS_PURCHASED,
- ));
- }
-
- return $query;
- }
-
- public function buildSearchForm(
- AphrontFormView $form,
- PhabricatorSavedQuery $saved_query) {}
-
- protected function getURI($path) {
- $merchant = $this->getMerchant();
- $account = $this->getAccount();
- if ($merchant) {
- return $merchant->getOrderListURI($path);
- } else if ($account) {
- return $account->getOrderListURI($path);
- } else {
- return '/phortune/order/'.$path;
- }
- }
-
- protected function getBuiltinQueryNames() {
- $names = array(
- 'all' => pht('Order History'),
- 'invoices' => pht('Unpaid Invoices'),
- );
-
- return $names;
- }
-
- public function buildSavedQueryFromBuiltin($query_key) {
-
- $query = $this->newSavedQuery();
- $query->setQueryKey($query_key);
-
- switch ($query_key) {
- case 'all':
- return $query;
- case 'invoices':
- return $query->setParameter('invoices', true);
- }
-
- return parent::buildSavedQueryFromBuiltin($query_key);
- }
-
- protected function getRequiredHandlePHIDsForResultList(
- array $carts,
- PhabricatorSavedQuery $query) {
- $phids = array();
- foreach ($carts as $cart) {
- $phids[] = $cart->getPHID();
- $phids[] = $cart->getMerchantPHID();
- $phids[] = $cart->getAuthorPHID();
- }
- return $phids;
- }
-
- protected function renderResultList(
- array $carts,
- PhabricatorSavedQuery $query,
- array $handles) {
- assert_instances_of($carts, 'PhortuneCart');
-
- $viewer = $this->requireViewer();
-
- $rows = array();
- foreach ($carts as $cart) {
- $merchant = $cart->getMerchant();
-
- if ($this->getMerchant()) {
- $href = $this->getApplicationURI(
- 'merchant/'.$merchant->getID().'/cart/'.$cart->getID().'/');
- } else {
- $href = $cart->getDetailURI();
- }
-
- $rows[] = array(
- $cart->getID(),
- $handles[$cart->getPHID()]->renderLink(),
- $handles[$merchant->getPHID()]->renderLink(),
- $handles[$cart->getAuthorPHID()]->renderLink(),
- $cart->getTotalPriceAsCurrency()->formatForDisplay(),
- PhortuneCart::getNameForStatus($cart->getStatus()),
- phabricator_datetime($cart->getDateModified(), $viewer),
- );
- }
-
- $table = id(new AphrontTableView($rows))
- ->setNoDataString(pht('No orders match the query.'))
- ->setHeaders(
- array(
- pht('ID'),
- pht('Order'),
- pht('Merchant'),
- pht('Authorized By'),
- pht('Amount'),
- pht('Status'),
- pht('Updated'),
- ))
- ->setColumnClasses(
- array(
- '',
- 'pri',
- '',
- '',
- 'wide right',
- '',
- 'right',
- ));
-
- $merchant = $this->getMerchant();
- if ($merchant) {
- $notice = pht('Orders for %s', $merchant->getName());
- } else {
- $notice = pht('Your Orders');
- }
- $table->setNotice($notice);
-
- $result = new PhabricatorApplicationSearchResultView();
- $result->setTable($table);
-
- return $result;
- }
-}
diff --git a/src/applications/phortune/query/PhortuneCartTransactionQuery.php b/src/applications/phortune/query/PhortuneCartTransactionQuery.php
deleted file mode 100644
--- a/src/applications/phortune/query/PhortuneCartTransactionQuery.php
+++ /dev/null
@@ -1,10 +0,0 @@
-ids = $ids;
- return $this;
- }
-
- public function withPHIDs(array $phids) {
- $this->phids = $phids;
- return $this;
- }
-
- public function withAccountPHIDs(array $account_phids) {
- $this->accountPHIDs = $account_phids;
- return $this;
- }
-
- public function withCartPHIDs(array $cart_phids) {
- $this->cartPHIDs = $cart_phids;
- return $this;
- }
-
- public function withStatuses(array $statuses) {
- $this->statuses = $statuses;
- return $this;
- }
-
- public function needCarts($need_carts) {
- $this->needCarts = $need_carts;
- return $this;
- }
-
- protected function loadPage() {
- $table = new PhortuneCharge();
- $conn = $table->establishConnection('r');
-
- $rows = queryfx_all(
- $conn,
- 'SELECT charge.* FROM %T charge %Q %Q %Q',
- $table->getTableName(),
- $this->buildWhereClause($conn),
- $this->buildOrderClause($conn),
- $this->buildLimitClause($conn));
-
- return $table->loadAllFromArray($rows);
- }
-
- protected function willFilterPage(array $charges) {
- $accounts = id(new PhortuneAccountQuery())
- ->setViewer($this->getViewer())
- ->setParentQuery($this)
- ->withPHIDs(mpull($charges, 'getAccountPHID'))
- ->execute();
- $accounts = mpull($accounts, null, 'getPHID');
-
- foreach ($charges as $key => $charge) {
- $account = idx($accounts, $charge->getAccountPHID());
- if (!$account) {
- unset($charges[$key]);
- continue;
- }
- $charge->attachAccount($account);
- }
-
- return $charges;
- }
-
- protected function didFilterPage(array $charges) {
- if ($this->needCarts) {
- $carts = id(new PhortuneCartQuery())
- ->setViewer($this->getViewer())
- ->setParentQuery($this)
- ->withPHIDs(mpull($charges, 'getCartPHID'))
- ->execute();
- $carts = mpull($carts, null, 'getPHID');
-
- foreach ($charges as $charge) {
- $cart = idx($carts, $charge->getCartPHID());
- $charge->attachCart($cart);
- }
- }
-
- return $charges;
- }
-
- protected function buildWhereClause(AphrontDatabaseConnection $conn) {
- $where = array();
-
- $where[] = $this->buildPagingClause($conn);
-
- if ($this->ids !== null) {
- $where[] = qsprintf(
- $conn,
- 'charge.id IN (%Ld)',
- $this->ids);
- }
-
- if ($this->phids !== null) {
- $where[] = qsprintf(
- $conn,
- 'charge.phid IN (%Ls)',
- $this->phids);
- }
-
- if ($this->accountPHIDs !== null) {
- $where[] = qsprintf(
- $conn,
- 'charge.accountPHID IN (%Ls)',
- $this->accountPHIDs);
- }
-
- if ($this->cartPHIDs !== null) {
- $where[] = qsprintf(
- $conn,
- 'charge.cartPHID IN (%Ls)',
- $this->cartPHIDs);
- }
-
- if ($this->statuses !== null) {
- $where[] = qsprintf(
- $conn,
- 'charge.status IN (%Ls)',
- $this->statuses);
- }
-
- return $this->formatWhereClause($conn, $where);
- }
-
- public function getQueryApplicationClass() {
- return 'PhabricatorPhortuneApplication';
- }
-
-}
diff --git a/src/applications/phortune/query/PhortuneChargeSearchEngine.php b/src/applications/phortune/query/PhortuneChargeSearchEngine.php
deleted file mode 100644
--- a/src/applications/phortune/query/PhortuneChargeSearchEngine.php
+++ /dev/null
@@ -1,110 +0,0 @@
-account = $account;
- return $this;
- }
-
- public function getAccount() {
- return $this->account;
- }
-
- public function getResultTypeDescription() {
- return pht('Phortune Charges');
- }
-
- public function getApplicationClassName() {
- return 'PhabricatorPhortuneApplication';
- }
-
- public function buildSavedQueryFromRequest(AphrontRequest $request) {
- $saved = new PhabricatorSavedQuery();
-
- return $saved;
- }
-
- public function buildQueryFromSavedQuery(PhabricatorSavedQuery $saved) {
- $query = id(new PhortuneChargeQuery());
-
- $viewer = $this->requireViewer();
-
- $account = $this->getAccount();
- if ($account) {
- $query->withAccountPHIDs(array($account->getPHID()));
- } else {
- $accounts = id(new PhortuneAccountQuery())
- ->withMemberPHIDs(array($viewer->getPHID()))
- ->execute();
- if ($accounts) {
- $query->withAccountPHIDs(mpull($accounts, 'getPHID'));
- } else {
- throw new Exception(pht('You have no accounts!'));
- }
- }
-
- return $query;
- }
-
- public function buildSearchForm(
- AphrontFormView $form,
- PhabricatorSavedQuery $saved_query) {}
-
- protected function getURI($path) {
- $account = $this->getAccount();
- if ($account) {
- return $account->getChargeListURI($path);
- } else {
- return '/phortune/charge/'.$path;
- }
- }
-
- protected function getBuiltinQueryNames() {
- $names = array(
- 'all' => pht('All Charges'),
- );
-
- return $names;
- }
-
- public function buildSavedQueryFromBuiltin($query_key) {
-
- $query = $this->newSavedQuery();
- $query->setQueryKey($query_key);
-
- switch ($query_key) {
- case 'all':
- return $query;
- }
-
- return parent::buildSavedQueryFromBuiltin($query_key);
- }
-
-
- protected function renderResultList(
- array $charges,
- PhabricatorSavedQuery $query,
- array $handles) {
- assert_instances_of($charges, 'PhortuneCharge');
-
- $viewer = $this->requireViewer();
-
- $table = id(new PhortuneChargeTableView())
- ->setUser($viewer)
- ->setCharges($charges);
-
- $result = new PhabricatorApplicationSearchResultView();
- $result->setTable($table);
-
- return $result;
- }
-}
diff --git a/src/applications/phortune/query/PhortuneMerchantQuery.php b/src/applications/phortune/query/PhortuneMerchantQuery.php
deleted file mode 100644
--- a/src/applications/phortune/query/PhortuneMerchantQuery.php
+++ /dev/null
@@ -1,189 +0,0 @@
-ids = $ids;
- return $this;
- }
-
- public function withPHIDs(array $phids) {
- $this->phids = $phids;
- return $this;
- }
-
- public function withMemberPHIDs(array $member_phids) {
- $this->memberPHIDs = $member_phids;
- return $this;
- }
-
- public function needProfileImage($need) {
- $this->needProfileImage = $need;
- return $this;
- }
-
- public function newResultObject() {
- return new PhortuneMerchant();
- }
-
- protected function willFilterPage(array $merchants) {
- $query = id(new PhabricatorEdgeQuery())
- ->withSourcePHIDs(mpull($merchants, 'getPHID'))
- ->withEdgeTypes(array(PhortuneMerchantHasMemberEdgeType::EDGECONST));
- $query->execute();
-
- foreach ($merchants as $merchant) {
- $member_phids = $query->getDestinationPHIDs(array($merchant->getPHID()));
- $member_phids = array_reverse($member_phids);
- $merchant->attachMemberPHIDs($member_phids);
- }
-
- if ($this->needProfileImage) {
- $default = null;
- $file_phids = mpull($merchants, 'getProfileImagePHID');
- $file_phids = array_filter($file_phids);
- if ($file_phids) {
- $files = id(new PhabricatorFileQuery())
- ->setParentQuery($this)
- ->setViewer($this->getViewer())
- ->withPHIDs($file_phids)
- ->execute();
- $files = mpull($files, null, 'getPHID');
- } else {
- $files = array();
- }
-
- foreach ($merchants as $merchant) {
- $file = idx($files, $merchant->getProfileImagePHID());
- if (!$file) {
- if (!$default) {
- $default = PhabricatorFile::loadBuiltin(
- $this->getViewer(),
- 'merchant.png');
- }
- $file = $default;
- }
- $merchant->attachProfileImageFile($file);
- }
- }
-
- return $merchants;
- }
-
- protected function buildWhereClauseParts(AphrontDatabaseConnection $conn) {
- $where = parent::buildWhereClauseParts($conn);
-
- if ($this->ids !== null) {
- $where[] = qsprintf(
- $conn,
- 'merchant.id IN (%Ld)',
- $this->ids);
- }
-
- if ($this->phids !== null) {
- $where[] = qsprintf(
- $conn,
- 'merchant.phid IN (%Ls)',
- $this->phids);
- }
-
- if ($this->memberPHIDs !== null) {
- $where[] = qsprintf(
- $conn,
- 'e.dst IN (%Ls)',
- $this->memberPHIDs);
- }
-
- return $where;
- }
-
- protected function buildJoinClauseParts(AphrontDatabaseConnection $conn) {
- $joins = parent::buildJoinClauseParts($conn);
-
- if ($this->memberPHIDs !== null) {
- $joins[] = qsprintf(
- $conn,
- 'LEFT JOIN %T e ON merchant.phid = e.src AND e.type = %d',
- PhabricatorEdgeConfig::TABLE_NAME_EDGE,
- PhortuneMerchantHasMemberEdgeType::EDGECONST);
- }
-
- return $joins;
- }
-
- public function getQueryApplicationClass() {
- return 'PhabricatorPhortuneApplication';
- }
-
- protected function getPrimaryTableAlias() {
- return 'merchant';
- }
-
- public static function canViewersEditMerchants(
- array $viewer_phids,
- array $merchant_phids) {
-
- // See T13366 for some discussion. This is an unusual caching construct to
- // make policy filtering of Accounts easier.
-
- foreach ($viewer_phids as $key => $viewer_phid) {
- if (!$viewer_phid) {
- unset($viewer_phids[$key]);
- }
- }
-
- if (!$viewer_phids) {
- return array();
- }
-
- $cache_key = 'phortune.merchant.can-edit';
- $cache = PhabricatorCaches::getRequestCache();
-
- $cache_data = $cache->getKey($cache_key);
- if (!$cache_data) {
- $cache_data = array();
- }
-
- $load_phids = array();
- foreach ($viewer_phids as $viewer_phid) {
- if (!isset($cache_data[$viewer_phid])) {
- $load_phids[] = $viewer_phid;
- }
- }
-
- $did_write = false;
- foreach ($load_phids as $load_phid) {
- $merchants = id(new self())
- ->setViewer(PhabricatorUser::getOmnipotentUser())
- ->withMemberPHIDs(array($load_phid))
- ->execute();
- foreach ($merchants as $merchant) {
- $cache_data[$load_phid][$merchant->getPHID()] = true;
- $did_write = true;
- }
- }
-
- if ($did_write) {
- $cache->setKey($cache_key, $cache_data);
- }
-
- $results = array();
- foreach ($viewer_phids as $viewer_phid) {
- foreach ($merchant_phids as $merchant_phid) {
- if (!isset($cache_data[$viewer_phid][$merchant_phid])) {
- continue;
- }
- $results[$viewer_phid][$merchant_phid] = true;
- }
- }
-
- return $results;
- }
-
-}
diff --git a/src/applications/phortune/query/PhortuneMerchantSearchEngine.php b/src/applications/phortune/query/PhortuneMerchantSearchEngine.php
deleted file mode 100644
--- a/src/applications/phortune/query/PhortuneMerchantSearchEngine.php
+++ /dev/null
@@ -1,89 +0,0 @@
-needProfileImage(true);
-
- return $query;
- }
-
- public function buildSearchForm(
- AphrontFormView $form,
- PhabricatorSavedQuery $saved_query) {}
-
- protected function getURI($path) {
- return '/phortune/merchant/'.$path;
- }
-
- protected function getBuiltinQueryNames() {
- $names = array(
- 'all' => pht('All Merchants'),
- );
-
- return $names;
- }
-
- public function buildSavedQueryFromBuiltin($query_key) {
-
- $query = $this->newSavedQuery();
- $query->setQueryKey($query_key);
-
- switch ($query_key) {
- case 'all':
- return $query;
- }
-
- return parent::buildSavedQueryFromBuiltin($query_key);
- }
-
- protected function getRequiredHandlePHIDsForResultList(
- array $merchants,
- PhabricatorSavedQuery $query) {
- return array();
- }
-
- protected function renderResultList(
- array $merchants,
- PhabricatorSavedQuery $query,
- array $handles) {
- assert_instances_of($merchants, 'PhortuneMerchant');
-
- $viewer = $this->requireViewer();
-
- $list = new PHUIObjectItemListView();
- $list->setUser($viewer);
- foreach ($merchants as $merchant) {
- $item = id(new PHUIObjectItemView())
- ->setSubhead(pht('Merchant %d', $merchant->getID()))
- ->setHeader($merchant->getName())
- ->setHref('/phortune/merchant/'.$merchant->getID().'/')
- ->setObject($merchant)
- ->setImageURI($merchant->getProfileImageURI());
-
- $list->addItem($item);
- }
-
- $result = new PhabricatorApplicationSearchResultView();
- $result->setObjectList($list);
- $result->setNoDataString(pht('No merchants found.'));
-
- return $result;
- }
-}
diff --git a/src/applications/phortune/query/PhortuneMerchantTransactionQuery.php b/src/applications/phortune/query/PhortuneMerchantTransactionQuery.php
deleted file mode 100644
--- a/src/applications/phortune/query/PhortuneMerchantTransactionQuery.php
+++ /dev/null
@@ -1,10 +0,0 @@
-ids = $ids;
- return $this;
- }
-
- public function withPHIDs(array $phids) {
- $this->phids = $phids;
- return $this;
- }
-
- public function withAccountPHIDs(array $phids) {
- $this->accountPHIDs = $phids;
- return $this;
- }
-
- public function withMerchantPHIDs(array $phids) {
- $this->merchantPHIDs = $phids;
- return $this;
- }
-
- public function withStatuses(array $statuses) {
- $this->statuses = $statuses;
- return $this;
- }
-
- public function newResultObject() {
- return new PhortunePaymentMethod();
- }
-
- protected function willFilterPage(array $methods) {
- $accounts = id(new PhortuneAccountQuery())
- ->setViewer($this->getViewer())
- ->withPHIDs(mpull($methods, 'getAccountPHID'))
- ->execute();
- $accounts = mpull($accounts, null, 'getPHID');
-
- foreach ($methods as $key => $method) {
- $account = idx($accounts, $method->getAccountPHID());
- if (!$account) {
- unset($methods[$key]);
- $this->didRejectResult($method);
- continue;
- }
- $method->attachAccount($account);
- }
-
- if (!$methods) {
- return $methods;
- }
-
- $merchants = id(new PhortuneMerchantQuery())
- ->setViewer($this->getViewer())
- ->withPHIDs(mpull($methods, 'getMerchantPHID'))
- ->execute();
- $merchants = mpull($merchants, null, 'getPHID');
-
- foreach ($methods as $key => $method) {
- $merchant = idx($merchants, $method->getMerchantPHID());
- if (!$merchant) {
- unset($methods[$key]);
- $this->didRejectResult($method);
- continue;
- }
- $method->attachMerchant($merchant);
- }
-
- if (!$methods) {
- return $methods;
- }
-
- $provider_configs = id(new PhortunePaymentProviderConfigQuery())
- ->setViewer($this->getViewer())
- ->withPHIDs(mpull($methods, 'getProviderPHID'))
- ->execute();
- $provider_configs = mpull($provider_configs, null, 'getPHID');
-
- foreach ($methods as $key => $method) {
- $provider_config = idx($provider_configs, $method->getProviderPHID());
- if (!$provider_config) {
- unset($methods[$key]);
- $this->didRejectResult($method);
- continue;
- }
- $method->attachProviderConfig($provider_config);
- }
-
- return $methods;
- }
-
- protected function buildWhereClauseParts(AphrontDatabaseConnection $conn) {
- $where = parent::buildWhereClauseParts($conn);
-
- if ($this->ids !== null) {
- $where[] = qsprintf(
- $conn,
- 'id IN (%Ld)',
- $this->ids);
- }
-
- if ($this->phids !== null) {
- $where[] = qsprintf(
- $conn,
- 'phid IN (%Ls)',
- $this->phids);
- }
-
- if ($this->accountPHIDs !== null) {
- $where[] = qsprintf(
- $conn,
- 'accountPHID IN (%Ls)',
- $this->accountPHIDs);
- }
-
- if ($this->merchantPHIDs !== null) {
- $where[] = qsprintf(
- $conn,
- 'merchantPHID IN (%Ls)',
- $this->merchantPHIDs);
- }
-
- if ($this->statuses !== null) {
- $where[] = qsprintf(
- $conn,
- 'status IN (%Ls)',
- $this->statuses);
- }
-
- return $where;
- }
-
- public function getQueryApplicationClass() {
- return 'PhabricatorPhortuneApplication';
- }
-
-}
diff --git a/src/applications/phortune/query/PhortunePaymentMethodTransactionQuery.php b/src/applications/phortune/query/PhortunePaymentMethodTransactionQuery.php
deleted file mode 100644
--- a/src/applications/phortune/query/PhortunePaymentMethodTransactionQuery.php
+++ /dev/null
@@ -1,10 +0,0 @@
-ids = $ids;
- return $this;
- }
-
- public function withPHIDs(array $phids) {
- $this->phids = $phids;
- return $this;
- }
-
- public function withMerchantPHIDs(array $phids) {
- $this->merchantPHIDs = $phids;
- return $this;
- }
-
- protected function loadPage() {
- $table = new PhortunePaymentProviderConfig();
- $conn = $table->establishConnection('r');
-
- $rows = queryfx_all(
- $conn,
- 'SELECT * FROM %T %Q %Q %Q',
- $table->getTableName(),
- $this->buildWhereClause($conn),
- $this->buildOrderClause($conn),
- $this->buildLimitClause($conn));
-
- return $table->loadAllFromArray($rows);
- }
-
- protected function willFilterPage(array $provider_configs) {
- $merchant_phids = mpull($provider_configs, 'getMerchantPHID');
- $merchants = id(new PhortuneMerchantQuery())
- ->setViewer($this->getViewer())
- ->setParentQuery($this)
- ->withPHIDs($merchant_phids)
- ->execute();
- $merchants = mpull($merchants, null, 'getPHID');
-
- foreach ($provider_configs as $key => $config) {
- $merchant = idx($merchants, $config->getMerchantPHID());
- if (!$merchant) {
- $this->didRejectResult($config);
- unset($provider_configs[$key]);
- continue;
- }
- $config->attachMerchant($merchant);
- }
-
- return $provider_configs;
- }
-
- protected function buildWhereClause(AphrontDatabaseConnection $conn) {
- $where = array();
-
- if ($this->ids !== null) {
- $where[] = qsprintf(
- $conn,
- 'id IN (%Ld)',
- $this->ids);
- }
-
- if ($this->phids !== null) {
- $where[] = qsprintf(
- $conn,
- 'phid IN (%Ls)',
- $this->phids);
- }
-
- if ($this->merchantPHIDs !== null) {
- $where[] = qsprintf(
- $conn,
- 'merchantPHID IN (%Ls)',
- $this->merchantPHIDs);
- }
-
- $where[] = $this->buildPagingClause($conn);
-
- return $this->formatWhereClause($conn, $where);
- }
-
- public function getQueryApplicationClass() {
- return 'PhabricatorPhortuneApplication';
- }
-
-}
diff --git a/src/applications/phortune/query/PhortunePaymentProviderConfigTransactionQuery.php b/src/applications/phortune/query/PhortunePaymentProviderConfigTransactionQuery.php
deleted file mode 100644
--- a/src/applications/phortune/query/PhortunePaymentProviderConfigTransactionQuery.php
+++ /dev/null
@@ -1,10 +0,0 @@
-ids = $ids;
- return $this;
- }
-
- public function withPHIDs(array $phids) {
- $this->phids = $phids;
- return $this;
- }
-
- public function withClassAndRef($class, $ref) {
- $this->refMap = array($class => array($ref));
- return $this;
- }
-
- protected function loadPage() {
- $table = new PhortuneProduct();
- $conn = $table->establishConnection('r');
-
- $rows = queryfx_all(
- $conn,
- 'SELECT * FROM %T %Q %Q %Q',
- $table->getTableName(),
- $this->buildWhereClause($conn),
- $this->buildOrderClause($conn),
- $this->buildLimitClause($conn));
-
- $page = $table->loadAllFromArray($rows);
-
- // NOTE: We're loading product implementations here, but also creating any
- // products which do not yet exist.
-
- $class_map = mgroup($page, 'getProductClass');
- if ($this->refMap) {
- $class_map += array_fill_keys(array_keys($this->refMap), array());
- }
-
- foreach ($class_map as $class => $products) {
- $refs = mpull($products, null, 'getProductRef');
- if (isset($this->refMap[$class])) {
- $refs += array_fill_keys($this->refMap[$class], null);
- }
-
- $implementations = newv($class, array())->loadImplementationsForRefs(
- $this->getViewer(),
- array_keys($refs));
- $implementations = mpull($implementations, null, 'getRef');
-
- foreach ($implementations as $ref => $implementation) {
- $product = idx($refs, $ref);
- if ($product === null) {
- // If this product does not exist yet, create it and add it to the
- // result page.
- $unguarded = AphrontWriteGuard::beginScopedUnguardedWrites();
- $product = PhortuneProduct::initializeNewProduct()
- ->setProductClass($class)
- ->setProductRef($ref)
- ->save();
- unset($unguarded);
-
- $page[] = $product;
- }
-
- $product->attachImplementation($implementation);
- }
- }
-
- return $page;
- }
-
- protected function buildWhereClause(AphrontDatabaseConnection $conn) {
- $where = array();
-
- if ($this->ids !== null) {
- $where[] = qsprintf(
- $conn,
- 'id IN (%Ld)',
- $this->ids);
- }
-
- if ($this->phids !== null) {
- $where[] = qsprintf(
- $conn,
- 'phid IN (%Ls)',
- $this->phids);
- }
-
- if ($this->refMap !== null) {
- $sql = array();
- foreach ($this->refMap as $class => $refs) {
- foreach ($refs as $ref) {
- $sql[] = qsprintf(
- $conn,
- '(productClassKey = %s AND productRefKey = %s)',
- PhabricatorHash::digestForIndex($class),
- PhabricatorHash::digestForIndex($ref));
- }
- }
- $where[] = qsprintf($conn, '%LO', $sql);
- }
-
- $where[] = $this->buildPagingClause($conn);
-
- return $this->formatWhereClause($conn, $where);
- }
-
- public function getQueryApplicationClass() {
- return 'PhabricatorPhortuneApplication';
- }
-
-}
diff --git a/src/applications/phortune/query/PhortunePurchaseQuery.php b/src/applications/phortune/query/PhortunePurchaseQuery.php
deleted file mode 100644
--- a/src/applications/phortune/query/PhortunePurchaseQuery.php
+++ /dev/null
@@ -1,110 +0,0 @@
-ids = $ids;
- return $this;
- }
-
- public function withPHIDs(array $phids) {
- $this->phids = $phids;
- return $this;
- }
-
- public function withCartPHIDs(array $cart_phids) {
- $this->cartPHIDs = $cart_phids;
- return $this;
- }
-
- protected function loadPage() {
- $table = new PhortunePurchase();
- $conn = $table->establishConnection('r');
-
- $rows = queryfx_all(
- $conn,
- 'SELECT purchase.* FROM %T purchase %Q %Q %Q',
- $table->getTableName(),
- $this->buildWhereClause($conn),
- $this->buildOrderClause($conn),
- $this->buildLimitClause($conn));
-
- return $table->loadAllFromArray($rows);
- }
-
- protected function willFilterPage(array $purchases) {
- $carts = id(new PhortuneCartQuery())
- ->setViewer($this->getViewer())
- ->setParentQuery($this)
- ->withPHIDs(mpull($purchases, 'getCartPHID'))
- ->execute();
- $carts = mpull($carts, null, 'getPHID');
-
- foreach ($purchases as $key => $purchase) {
- $cart = idx($carts, $purchase->getCartPHID());
- if (!$cart) {
- unset($purchases[$key]);
- continue;
- }
- $purchase->attachCart($cart);
- }
-
- $products = id(new PhortuneProductQuery())
- ->setViewer($this->getViewer())
- ->setParentQuery($this)
- ->withPHIDs(mpull($purchases, 'getProductPHID'))
- ->execute();
- $products = mpull($products, null, 'getPHID');
-
- foreach ($purchases as $key => $purchase) {
- $product = idx($products, $purchase->getProductPHID());
- if (!$product) {
- unset($purchases[$key]);
- continue;
- }
- $purchase->attachProduct($product);
- }
-
-
- return $purchases;
- }
-
- protected function buildWhereClause(AphrontDatabaseConnection $conn) {
- $where = array();
-
- $where[] = $this->buildPagingClause($conn);
-
- if ($this->ids !== null) {
- $where[] = qsprintf(
- $conn,
- 'purchase.id IN (%Ld)',
- $this->ids);
- }
-
- if ($this->phids !== null) {
- $where[] = qsprintf(
- $conn,
- 'purchase.phid IN (%Ls)',
- $this->phids);
- }
-
- if ($this->cartPHIDs !== null) {
- $where[] = qsprintf(
- $conn,
- 'purchase.cartPHID IN (%Ls)',
- $this->cartPHIDs);
- }
-
- return $this->formatWhereClause($conn, $where);
- }
-
- public function getQueryApplicationClass() {
- return 'PhabricatorPhortuneApplication';
- }
-
-}
diff --git a/src/applications/phortune/query/PhortuneSubscriptionQuery.php b/src/applications/phortune/query/PhortuneSubscriptionQuery.php
deleted file mode 100644
--- a/src/applications/phortune/query/PhortuneSubscriptionQuery.php
+++ /dev/null
@@ -1,200 +0,0 @@
-ids = $ids;
- return $this;
- }
-
- public function withPHIDs(array $phids) {
- $this->phids = $phids;
- return $this;
- }
-
- public function withAccountPHIDs(array $account_phids) {
- $this->accountPHIDs = $account_phids;
- return $this;
- }
-
- public function withMerchantPHIDs(array $merchant_phids) {
- $this->merchantPHIDs = $merchant_phids;
- return $this;
- }
-
- public function withStatuses(array $statuses) {
- $this->statuses = $statuses;
- return $this;
- }
-
- public function withPaymentMethodPHIDs(array $method_phids) {
- $this->paymentMethodPHIDs = $method_phids;
- return $this;
- }
-
- public function needTriggers($need_triggers) {
- $this->needTriggers = $need_triggers;
- return $this;
- }
-
- public function newResultObject() {
- return new PhortuneSubscription();
- }
-
- protected function willFilterPage(array $subscriptions) {
- $accounts = id(new PhortuneAccountQuery())
- ->setViewer($this->getViewer())
- ->withPHIDs(mpull($subscriptions, 'getAccountPHID'))
- ->execute();
- $accounts = mpull($accounts, null, 'getPHID');
-
- foreach ($subscriptions as $key => $subscription) {
- $account = idx($accounts, $subscription->getAccountPHID());
- if (!$account) {
- unset($subscriptions[$key]);
- $this->didRejectResult($subscription);
- continue;
- }
- $subscription->attachAccount($account);
- }
-
- if (!$subscriptions) {
- return $subscriptions;
- }
-
- $merchants = id(new PhortuneMerchantQuery())
- ->setViewer($this->getViewer())
- ->withPHIDs(mpull($subscriptions, 'getMerchantPHID'))
- ->execute();
- $merchants = mpull($merchants, null, 'getPHID');
-
- foreach ($subscriptions as $key => $subscription) {
- $merchant = idx($merchants, $subscription->getMerchantPHID());
- if (!$merchant) {
- unset($subscriptions[$key]);
- $this->didRejectResult($subscription);
- continue;
- }
- $subscription->attachMerchant($merchant);
- }
-
- if (!$subscriptions) {
- return $subscriptions;
- }
-
- $implementations = array();
-
- $subscription_map = mgroup($subscriptions, 'getSubscriptionClass');
- foreach ($subscription_map as $class => $class_subscriptions) {
- $sub = newv($class, array());
- $impl_objects = $sub->loadImplementationsForRefs(
- $this->getViewer(),
- mpull($class_subscriptions, 'getSubscriptionRef'));
-
- $implementations += mpull($impl_objects, null, 'getRef');
- }
-
- foreach ($subscriptions as $key => $subscription) {
- $ref = $subscription->getSubscriptionRef();
- $implementation = idx($implementations, $ref);
- if (!$implementation) {
- unset($subscriptions[$key]);
- $this->didRejectResult($subscription);
- continue;
- }
- $subscription->attachImplementation($implementation);
- }
-
- if (!$subscriptions) {
- return $subscriptions;
- }
-
- if ($this->needTriggers) {
- $trigger_phids = mpull($subscriptions, 'getTriggerPHID');
- $triggers = id(new PhabricatorWorkerTriggerQuery())
- ->setViewer($this->getViewer())
- ->withPHIDs($trigger_phids)
- ->needEvents(true)
- ->execute();
- $triggers = mpull($triggers, null, 'getPHID');
- foreach ($subscriptions as $key => $subscription) {
- $trigger = idx($triggers, $subscription->getTriggerPHID());
- if (!$trigger) {
- unset($subscriptions[$key]);
- $this->didRejectResult($subscription);
- continue;
- }
- $subscription->attachTrigger($trigger);
- }
- }
-
- return $subscriptions;
- }
-
- protected function buildWhereClauseParts(AphrontDatabaseConnection $conn) {
- $where = parent::buildWhereClauseParts($conn);
-
- if ($this->ids !== null) {
- $where[] = qsprintf(
- $conn,
- 'subscription.id IN (%Ld)',
- $this->ids);
- }
-
- if ($this->phids !== null) {
- $where[] = qsprintf(
- $conn,
- 'subscription.phid IN (%Ls)',
- $this->phids);
- }
-
- if ($this->accountPHIDs !== null) {
- $where[] = qsprintf(
- $conn,
- 'subscription.accountPHID IN (%Ls)',
- $this->accountPHIDs);
- }
-
- if ($this->merchantPHIDs !== null) {
- $where[] = qsprintf(
- $conn,
- 'subscription.merchantPHID IN (%Ls)',
- $this->merchantPHIDs);
- }
-
- if ($this->statuses !== null) {
- $where[] = qsprintf(
- $conn,
- 'subscription.status IN (%Ls)',
- $this->statuses);
- }
-
- if ($this->paymentMethodPHIDs !== null) {
- $where[] = qsprintf(
- $conn,
- 'subscription.defaultPaymentMethodPHID IN (%Ls)',
- $this->paymentMethodPHIDs);
- }
-
- return $where;
- }
-
- protected function getPrimaryTableAlias() {
- return 'subscription';
- }
-
- public function getQueryApplicationClass() {
- return 'PhabricatorPhortuneApplication';
- }
-
-}
diff --git a/src/applications/phortune/query/PhortuneSubscriptionSearchEngine.php b/src/applications/phortune/query/PhortuneSubscriptionSearchEngine.php
deleted file mode 100644
--- a/src/applications/phortune/query/PhortuneSubscriptionSearchEngine.php
+++ /dev/null
@@ -1,155 +0,0 @@
-account = $account;
- return $this;
- }
-
- public function getAccount() {
- return $this->account;
- }
-
- public function setMerchant(PhortuneMerchant $merchant) {
- $this->merchant = $merchant;
- return $this;
- }
-
- public function getMerchant() {
- return $this->merchant;
- }
-
- public function getResultTypeDescription() {
- return pht('Phortune Subscriptions');
- }
-
- public function getApplicationClassName() {
- return 'PhabricatorPhortuneApplication';
- }
-
- public function buildSavedQueryFromRequest(AphrontRequest $request) {
- $saved = new PhabricatorSavedQuery();
-
- return $saved;
- }
-
- public function buildQueryFromSavedQuery(PhabricatorSavedQuery $saved) {
- $query = id(new PhortuneSubscriptionQuery());
-
- $viewer = $this->requireViewer();
-
- $merchant = $this->getMerchant();
- $account = $this->getAccount();
- if ($merchant) {
- $can_edit = PhabricatorPolicyFilter::hasCapability(
- $viewer,
- $merchant,
- PhabricatorPolicyCapability::CAN_EDIT);
- if (!$can_edit) {
- throw new Exception(
- pht(
- 'You can not query subscriptions for a merchant you do not '.
- 'control.'));
- }
- $query->withMerchantPHIDs(array($merchant->getPHID()));
- } else if ($account) {
- $can_edit = PhabricatorPolicyFilter::hasCapability(
- $viewer,
- $account,
- PhabricatorPolicyCapability::CAN_EDIT);
- if (!$can_edit) {
- throw new Exception(
- pht(
- 'You can not query subscriptions for an account you are not '.
- 'a member of.'));
- }
- $query->withAccountPHIDs(array($account->getPHID()));
- } else {
- $accounts = id(new PhortuneAccountQuery())
- ->withMemberPHIDs(array($viewer->getPHID()))
- ->execute();
- if ($accounts) {
- $query->withAccountPHIDs(mpull($accounts, 'getPHID'));
- } else {
- throw new Exception(pht('You have no accounts!'));
- }
- }
-
- return $query;
- }
-
- public function buildSearchForm(
- AphrontFormView $form,
- PhabricatorSavedQuery $saved_query) {}
-
- protected function getURI($path) {
- $merchant = $this->getMerchant();
- $account = $this->getAccount();
- if ($merchant) {
- return $merchant->getSubscriptionListURI($path);
- } else if ($account) {
- return $account->getSubscriptionListURI($path);
- } else {
- return '/phortune/subscription/'.$path;
- }
- }
-
- protected function getBuiltinQueryNames() {
- $names = array(
- 'all' => pht('All Subscriptions'),
- );
-
- return $names;
- }
-
- public function buildSavedQueryFromBuiltin($query_key) {
-
- $query = $this->newSavedQuery();
- $query->setQueryKey($query_key);
-
- switch ($query_key) {
- case 'all':
- return $query;
- }
-
- return parent::buildSavedQueryFromBuiltin($query_key);
- }
-
- protected function renderResultList(
- array $subscriptions,
- PhabricatorSavedQuery $query,
- array $handles) {
- assert_instances_of($subscriptions, 'PhortuneSubscription');
-
- $viewer = $this->requireViewer();
-
- $table = id(new PhortuneSubscriptionTableView())
- ->setUser($viewer)
- ->setSubscriptions($subscriptions);
-
- $merchant = $this->getMerchant();
- if ($merchant) {
- $header = pht('Subscriptions for %s', $merchant->getName());
- $table->setIsMerchantView(true);
- } else {
- $header = pht('Your Subscriptions');
- }
-
- $table->setNotice($header);
-
- $result = new PhabricatorApplicationSearchResultView();
- $result->setTable($table);
-
- return $result;
- }
-}
diff --git a/src/applications/phortune/query/PhortuneSubscriptionTransactionQuery.php b/src/applications/phortune/query/PhortuneSubscriptionTransactionQuery.php
deleted file mode 100644
--- a/src/applications/phortune/query/PhortuneSubscriptionTransactionQuery.php
+++ /dev/null
@@ -1,10 +0,0 @@
-setBillingName('')
- ->setBillingAddress('')
- ->attachMerchantPHIDs(array())
- ->attachMemberPHIDs(array());
- }
-
- public static function createNewAccount(
- PhabricatorUser $actor,
- PhabricatorContentSource $content_source) {
-
- $account = self::initializeNewAccount($actor);
-
- $xactions = array();
- $xactions[] = id(new PhortuneAccountTransaction())
- ->setTransactionType(PhortuneAccountNameTransaction::TRANSACTIONTYPE)
- ->setNewValue(pht('Default Account'));
-
- $xactions[] = id(new PhortuneAccountTransaction())
- ->setTransactionType(PhabricatorTransactions::TYPE_EDGE)
- ->setMetadataValue(
- 'edge:type',
- PhortuneAccountHasMemberEdgeType::EDGECONST)
- ->setNewValue(
- array(
- '=' => array($actor->getPHID() => $actor->getPHID()),
- ));
-
- $editor = id(new PhortuneAccountEditor())
- ->setActor($actor)
- ->setContentSource($content_source);
-
- // We create an account for you the first time you visit Phortune.
- $unguarded = AphrontWriteGuard::beginScopedUnguardedWrites();
-
- $editor->applyTransactions($account, $xactions);
-
- unset($unguarded);
-
- return $account;
- }
-
- public function newCart(
- PhabricatorUser $actor,
- PhortuneCartImplementation $implementation,
- PhortuneMerchant $merchant) {
-
- $cart = PhortuneCart::initializeNewCart($actor, $this, $merchant);
-
- $cart->setCartClass(get_class($implementation));
- $cart->attachImplementation($implementation);
-
- $implementation->willCreateCart($actor, $cart);
-
- return $cart->save();
- }
-
- protected function getConfiguration() {
- return array(
- self::CONFIG_AUX_PHID => true,
- self::CONFIG_COLUMN_SCHEMA => array(
- 'name' => 'text255',
- 'billingName' => 'text255',
- 'billingAddress' => 'text',
- ),
- ) + parent::getConfiguration();
- }
-
- public function generatePHID() {
- return PhabricatorPHID::generateNewPHID(
- PhortuneAccountPHIDType::TYPECONST);
- }
-
- public function getMemberPHIDs() {
- return $this->assertAttached($this->memberPHIDs);
- }
-
- public function attachMemberPHIDs(array $phids) {
- $this->memberPHIDs = $phids;
- return $this;
- }
-
- public function getURI() {
- return urisprintf(
- '/phortune/account/%d/',
- $this->getID());
- }
-
- public function getDetailsURI() {
- return urisprintf(
- '/phortune/account/%d/details/',
- $this->getID());
- }
-
- public function getOrdersURI() {
- return urisprintf(
- '/phortune/account/%d/orders/',
- $this->getID());
- }
-
- public function getOrderListURI($path = '') {
- return urisprintf(
- '/phortune/account/%d/orders/list/%s',
- $this->getID(),
- $path);
- }
-
- public function getSubscriptionsURI() {
- return urisprintf(
- '/phortune/account/%d/subscriptions/',
- $this->getID());
- }
-
- public function getEmailAddressesURI() {
- return urisprintf(
- '/phortune/account/%d/addresses/',
- $this->getID());
- }
-
- public function getPaymentMethodsURI() {
- return urisprintf(
- '/phortune/account/%d/methods/',
- $this->getID());
- }
-
- public function getChargesURI() {
- return urisprintf(
- '/phortune/account/%d/charges/',
- $this->getID());
- }
-
- public function getChargeListURI($path = '') {
- return urisprintf(
- '/phortune/account/%d/charges/list/%s',
- $this->getID(),
- $path);
- }
-
- public function attachMerchantPHIDs(array $merchant_phids) {
- $this->merchantPHIDs = $merchant_phids;
- return $this;
- }
-
- public function getMerchantPHIDs() {
- return $this->assertAttached($this->merchantPHIDs);
- }
-
- public function writeMerchantEdge(PhortuneMerchant $merchant) {
- $edge_src = $this->getPHID();
- $edge_type = PhortuneAccountHasMerchantEdgeType::EDGECONST;
- $edge_dst = $merchant->getPHID();
-
- id(new PhabricatorEdgeEditor())
- ->addEdge($edge_src, $edge_type, $edge_dst)
- ->save();
-
- return $this;
- }
-
- public function isUserAccountMember(PhabricatorUser $user) {
- $user_phid = $user->getPHID();
- if (!$user_phid) {
- return null;
- }
-
- $member_map = array_fuse($this->getMemberPHIDs());
-
- return isset($member_map[$user_phid]);
- }
-
-/* -( PhabricatorApplicationTransactionInterface )------------------------- */
-
-
- public function getApplicationTransactionEditor() {
- return new PhortuneAccountEditor();
- }
-
- public function getApplicationTransactionTemplate() {
- return new PhortuneAccountTransaction();
- }
-
-
-/* -( PhabricatorPolicyInterface )----------------------------------------- */
-
-
- public function getCapabilities() {
- return array(
- PhabricatorPolicyCapability::CAN_VIEW,
- PhabricatorPolicyCapability::CAN_EDIT,
- );
- }
-
- public function getPolicy($capability) {
- switch ($capability) {
- case PhabricatorPolicyCapability::CAN_VIEW:
- case PhabricatorPolicyCapability::CAN_EDIT:
- if ($this->getPHID() === null) {
- // Allow a user to create an account for themselves.
- return PhabricatorPolicies::POLICY_USER;
- } else {
- return PhabricatorPolicies::POLICY_NOONE;
- }
- }
- }
-
- public function hasAutomaticCapability($capability, PhabricatorUser $viewer) {
- if ($this->isUserAccountMember($viewer)) {
- return true;
- }
-
- // See T13366. If the viewer can edit any merchant that this payment
- // account has a relationship with, they can see the payment account.
- if ($capability == PhabricatorPolicyCapability::CAN_VIEW) {
- $viewer_phids = array($viewer->getPHID());
- $merchant_phids = $this->getMerchantPHIDs();
-
- $any_edit = PhortuneMerchantQuery::canViewersEditMerchants(
- $viewer_phids,
- $merchant_phids);
-
- if ($any_edit) {
- return true;
- }
- }
-
- return false;
- }
-
- public function describeAutomaticCapability($capability) {
- return array(
- pht('Members of an account can always view and edit it.'),
- pht('Merchants an account has established a relationship can view it.'),
- );
- }
-
-
-}
diff --git a/src/applications/phortune/storage/PhortuneAccountEmail.php b/src/applications/phortune/storage/PhortuneAccountEmail.php
deleted file mode 100644
--- a/src/applications/phortune/storage/PhortuneAccountEmail.php
+++ /dev/null
@@ -1,152 +0,0 @@
- true,
- self::CONFIG_COLUMN_SCHEMA => array(
- 'address' => 'sort128',
- 'status' => 'text32',
- 'addressKey' => 'text32',
- 'accessKey' => 'text32',
- ),
- self::CONFIG_KEY_SCHEMA => array(
- 'key_account' => array(
- 'columns' => array('accountPHID', 'address'),
- 'unique' => true,
- ),
- 'key_address' => array(
- 'columns' => array('addressKey'),
- ),
- ),
- ) + parent::getConfiguration();
- }
-
- public function getPHIDType() {
- return PhortuneAccountEmailPHIDType::TYPECONST;
- }
-
- public static function initializeNewAddress(
- PhortuneAccount $account,
- $author_phid) {
-
- $address_key = Filesystem::readRandomCharacters(16);
- $access_key = Filesystem::readRandomCharacters(16);
- $default_status = PhortuneAccountEmailStatus::getDefaultStatusConstant();
-
- return id(new self())
- ->setAuthorPHID($author_phid)
- ->setAccountPHID($account->getPHID())
- ->setStatus($default_status)
- ->attachAccount($account)
- ->setAddressKey($address_key)
- ->setAccessKey($access_key);
- }
-
- public function attachAccount(PhortuneAccount $account) {
- $this->account = $account;
- return $this;
- }
-
- public function getAccount() {
- return $this->assertAttached($this->account);
- }
-
- public function getObjectName() {
- return pht('Account Email %d', $this->getID());
- }
-
- public function getURI() {
- return urisprintf(
- '/phortune/account/%d/addresses/%d/',
- $this->getAccount()->getID(),
- $this->getID());
- }
-
- public function getExternalURI() {
- return urisprintf(
- '/phortune/external/%s/%s/',
- $this->getAddressKey(),
- $this->getAccessKey());
- }
-
- public function getUnsubscribeURI() {
- return urisprintf(
- '/phortune/external/%s/%s/unsubscribe/',
- $this->getAddressKey(),
- $this->getAccessKey());
- }
-
- public function getExternalOrderURI(PhortuneCart $cart) {
- return urisprintf(
- '/phortune/external/%s/%s/order/%d/',
- $this->getAddressKey(),
- $this->getAccessKey(),
- $cart->getID());
- }
-
- public function getExternalOrderPrintURI(PhortuneCart $cart) {
- return urisprintf(
- '/phortune/external/%s/%s/order/%d/print/',
- $this->getAddressKey(),
- $this->getAccessKey(),
- $cart->getID());
- }
-
-
-/* -( PhabricatorPolicyInterface )----------------------------------------- */
-
-
- public function getCapabilities() {
- return array(
- PhabricatorPolicyCapability::CAN_VIEW,
- PhabricatorPolicyCapability::CAN_EDIT,
- );
- }
-
- public function getPolicy($capability) {
- return PhabricatorPolicies::getMostOpenPolicy();
- }
-
- public function hasAutomaticCapability($capability, PhabricatorUser $viewer) {
- return false;
- }
-
-
-/* -( PhabricatorExtendedPolicyInterface )--------------------------------- */
-
-
- public function getExtendedPolicy($capability, PhabricatorUser $viewer) {
- return array(
- array($this->getAccount(), $capability),
- );
- }
-
-
-/* -( PhabricatorApplicationTransactionInterface )------------------------- */
-
-
- public function getApplicationTransactionEditor() {
- return new PhortuneAccountEmailEditor();
- }
-
- public function getApplicationTransactionTemplate() {
- return new PhortuneAccountEmailTransaction();
- }
-
-}
diff --git a/src/applications/phortune/storage/PhortuneAccountEmailTransaction.php b/src/applications/phortune/storage/PhortuneAccountEmailTransaction.php
deleted file mode 100644
--- a/src/applications/phortune/storage/PhortuneAccountEmailTransaction.php
+++ /dev/null
@@ -1,18 +0,0 @@
-setAuthorPHID($actor->getPHID())
- ->setStatus(self::STATUS_BUILDING)
- ->setAccountPHID($account->getPHID())
- ->setIsInvoice(0)
- ->attachAccount($account)
- ->setMerchantPHID($merchant->getPHID())
- ->attachMerchant($merchant);
-
- $cart->account = $account;
- $cart->purchases = array();
-
- return $cart;
- }
-
- public function newPurchase(
- PhabricatorUser $actor,
- PhortuneProduct $product) {
-
- $purchase = PhortunePurchase::initializeNewPurchase($actor, $product)
- ->setAccountPHID($this->getAccount()->getPHID())
- ->setCartPHID($this->getPHID())
- ->save();
-
- $this->purchases[] = $purchase;
-
- return $purchase;
- }
-
- public static function getStatusNameMap() {
- return array(
- self::STATUS_BUILDING => pht('Building'),
- self::STATUS_READY => pht('Ready'),
- self::STATUS_PURCHASING => pht('Purchasing'),
- self::STATUS_CHARGED => pht('Charged'),
- self::STATUS_HOLD => pht('Hold'),
- self::STATUS_REVIEW => pht('Review'),
- self::STATUS_PURCHASED => pht('Purchased'),
- );
- }
-
- public static function getNameForStatus($status) {
- return idx(self::getStatusNameMap(), $status, $status);
- }
-
- public function activateCart() {
- $this->openTransaction();
- $this->beginReadLocking();
-
- $copy = clone $this;
- $copy->reload();
-
- if ($copy->getStatus() !== self::STATUS_BUILDING) {
- throw new Exception(
- pht(
- 'Cart has wrong status ("%s") to call %s.',
- $copy->getStatus(),
- 'willApplyCharge()'));
- }
-
- $this->setStatus(self::STATUS_READY)->save();
-
- $this->endReadLocking();
- $this->saveTransaction();
-
- $this->recordCartTransaction(PhortuneCartTransaction::TYPE_CREATED);
-
- return $this;
- }
-
- public function willApplyCharge(
- PhabricatorUser $actor,
- PhortunePaymentProvider $provider,
- PhortunePaymentMethod $method = null) {
-
- $account = $this->getAccount();
-
- $charge = PhortuneCharge::initializeNewCharge()
- ->setAccountPHID($account->getPHID())
- ->setCartPHID($this->getPHID())
- ->setAuthorPHID($actor->getPHID())
- ->setMerchantPHID($this->getMerchant()->getPHID())
- ->setProviderPHID($provider->getProviderConfig()->getPHID())
- ->setAmountAsCurrency($this->getTotalPriceAsCurrency());
-
- if ($method) {
- if (!$method->isActive()) {
- throw new Exception(
- pht(
- 'Attempting to apply a charge using an inactive '.
- 'payment method ("%s")!',
- $method->getPHID()));
- }
- $charge->setPaymentMethodPHID($method->getPHID());
- }
-
- $this->openTransaction();
- $this->beginReadLocking();
-
- $copy = clone $this;
- $copy->reload();
-
- if ($copy->getStatus() !== self::STATUS_READY) {
- throw new Exception(
- pht(
- 'Cart has wrong status ("%s") to call %s, expected "%s".',
- $copy->getStatus(),
- 'willApplyCharge()',
- self::STATUS_READY));
- }
-
- $charge->save();
- $this->setStatus(self::STATUS_PURCHASING)->save();
-
- $this->endReadLocking();
- $this->saveTransaction();
-
- return $charge;
- }
-
- public function didHoldCharge(PhortuneCharge $charge) {
- $charge->setStatus(PhortuneCharge::STATUS_HOLD);
-
- $this->openTransaction();
- $this->beginReadLocking();
-
- $copy = clone $this;
- $copy->reload();
-
- if ($copy->getStatus() !== self::STATUS_PURCHASING) {
- throw new Exception(
- pht(
- 'Cart has wrong status ("%s") to call %s, expected "%s".',
- $copy->getStatus(),
- 'didHoldCharge()',
- self::STATUS_PURCHASING));
- }
-
- $charge->save();
- $this->setStatus(self::STATUS_HOLD)->save();
-
- $this->endReadLocking();
- $this->saveTransaction();
-
- $this->recordCartTransaction(PhortuneCartTransaction::TYPE_HOLD);
- }
-
- public function didApplyCharge(PhortuneCharge $charge) {
- $charge->setStatus(PhortuneCharge::STATUS_CHARGED);
-
- $this->openTransaction();
- $this->beginReadLocking();
-
- $copy = clone $this;
- $copy->reload();
-
- if (($copy->getStatus() !== self::STATUS_PURCHASING) &&
- ($copy->getStatus() !== self::STATUS_HOLD)) {
- throw new Exception(
- pht(
- 'Cart has wrong status ("%s") to call %s.',
- $copy->getStatus(),
- 'didApplyCharge()'));
- }
-
- $charge->save();
- $this->setStatus(self::STATUS_CHARGED)->save();
-
- $this->endReadLocking();
- $this->saveTransaction();
-
- // TODO: Perform purchase review. Here, we would apply rules to determine
- // whether the charge needs manual review (maybe making the decision via
- // Herald, configuration, or by examining provider fraud data). For now,
- // don't require review.
- $needs_review = false;
-
- if ($needs_review) {
- $this->willReviewCart();
- } else {
- $this->didReviewCart();
- }
-
- return $this;
- }
-
- public function willReviewCart() {
- $this->openTransaction();
- $this->beginReadLocking();
-
- $copy = clone $this;
- $copy->reload();
-
- if (($copy->getStatus() !== self::STATUS_CHARGED)) {
- throw new Exception(
- pht(
- 'Cart has wrong status ("%s") to call %s!',
- $copy->getStatus(),
- 'willReviewCart()'));
- }
-
- $this->setStatus(self::STATUS_REVIEW)->save();
-
- $this->endReadLocking();
- $this->saveTransaction();
-
- $this->recordCartTransaction(PhortuneCartTransaction::TYPE_REVIEW);
-
- return $this;
- }
-
- public function didReviewCart() {
- $this->openTransaction();
- $this->beginReadLocking();
-
- $copy = clone $this;
- $copy->reload();
-
- if (($copy->getStatus() !== self::STATUS_CHARGED) &&
- ($copy->getStatus() !== self::STATUS_REVIEW)) {
- throw new Exception(
- pht(
- 'Cart has wrong status ("%s") to call %s!',
- $copy->getStatus(),
- 'didReviewCart()'));
- }
-
- foreach ($this->purchases as $purchase) {
- $purchase->getProduct()->didPurchaseProduct($purchase);
- }
-
- $this->setStatus(self::STATUS_PURCHASED)->save();
-
- $this->endReadLocking();
- $this->saveTransaction();
-
- $this->recordCartTransaction(PhortuneCartTransaction::TYPE_PURCHASED);
-
- return $this;
- }
-
- public function didFailCharge(PhortuneCharge $charge) {
- $charge->setStatus(PhortuneCharge::STATUS_FAILED);
-
- $this->openTransaction();
- $this->beginReadLocking();
-
- $copy = clone $this;
- $copy->reload();
-
- if (($copy->getStatus() !== self::STATUS_PURCHASING) &&
- ($copy->getStatus() !== self::STATUS_HOLD)) {
- throw new Exception(
- pht(
- 'Cart has wrong status ("%s") to call %s.',
- $copy->getStatus(),
- 'didFailCharge()'));
- }
-
- $charge->save();
-
- // Move the cart back into STATUS_READY so the user can try
- // making the purchase again.
- $this->setStatus(self::STATUS_READY)->save();
-
- $this->endReadLocking();
- $this->saveTransaction();
-
- return $this;
- }
-
-
- public function willRefundCharge(
- PhabricatorUser $actor,
- PhortunePaymentProvider $provider,
- PhortuneCharge $charge,
- PhortuneCurrency $amount) {
-
- if (!$amount->isPositive()) {
- throw new Exception(
- pht('Trying to refund non-positive amount of money!'));
- }
-
- if ($amount->isGreaterThan($charge->getAmountRefundableAsCurrency())) {
- throw new Exception(
- pht('Trying to refund more money than remaining on charge!'));
- }
-
- if ($charge->getRefundedChargePHID()) {
- throw new Exception(
- pht('Trying to refund a refund!'));
- }
-
- if (($charge->getStatus() !== PhortuneCharge::STATUS_CHARGED) &&
- ($charge->getStatus() !== PhortuneCharge::STATUS_HOLD)) {
- throw new Exception(
- pht('Trying to refund an uncharged charge!'));
- }
-
- $refund_charge = PhortuneCharge::initializeNewCharge()
- ->setAccountPHID($this->getAccount()->getPHID())
- ->setCartPHID($this->getPHID())
- ->setAuthorPHID($actor->getPHID())
- ->setMerchantPHID($this->getMerchant()->getPHID())
- ->setProviderPHID($provider->getProviderConfig()->getPHID())
- ->setPaymentMethodPHID($charge->getPaymentMethodPHID())
- ->setRefundedChargePHID($charge->getPHID())
- ->setAmountAsCurrency($amount->negate());
-
- $charge->openTransaction();
- $charge->beginReadLocking();
-
- $copy = clone $charge;
- $copy->reload();
-
- if ($copy->getRefundingPHID() !== null) {
- throw new Exception(
- pht('Trying to refund a charge which is already refunding!'));
- }
-
- $refund_charge->save();
- $charge->setRefundingPHID($refund_charge->getPHID());
- $charge->save();
-
- $charge->endReadLocking();
- $charge->saveTransaction();
-
- return $refund_charge;
- }
-
- public function didRefundCharge(
- PhortuneCharge $charge,
- PhortuneCharge $refund) {
-
- $refund->setStatus(PhortuneCharge::STATUS_CHARGED);
-
- $this->openTransaction();
- $this->beginReadLocking();
-
- $copy = clone $charge;
- $copy->reload();
-
- if ($charge->getRefundingPHID() !== $refund->getPHID()) {
- throw new Exception(
- pht('Charge is in the wrong refunding state!'));
- }
-
- $charge->setRefundingPHID(null);
-
- // NOTE: There's some trickiness here to get the signs right. Both
- // these values are positive but the refund has a negative value.
- $total_refunded = $charge
- ->getAmountRefundedAsCurrency()
- ->add($refund->getAmountAsCurrency()->negate());
-
- $charge->setAmountRefundedAsCurrency($total_refunded);
- $charge->save();
- $refund->save();
-
- $this->endReadLocking();
- $this->saveTransaction();
-
- $amount = $refund->getAmountAsCurrency()->negate();
- foreach ($this->purchases as $purchase) {
- $purchase->getProduct()->didRefundProduct($purchase, $amount);
- }
-
- return $this;
- }
-
- public function didFailRefund(
- PhortuneCharge $charge,
- PhortuneCharge $refund) {
-
- $refund->setStatus(PhortuneCharge::STATUS_FAILED);
-
- $this->openTransaction();
- $this->beginReadLocking();
-
- $copy = clone $charge;
- $copy->reload();
-
- if ($charge->getRefundingPHID() !== $refund->getPHID()) {
- throw new Exception(
- pht('Charge is in the wrong refunding state!'));
- }
-
- $charge->setRefundingPHID(null);
- $charge->save();
- $refund->save();
-
- $this->endReadLocking();
- $this->saveTransaction();
- }
-
- private function recordCartTransaction($type) {
- $omnipotent_user = PhabricatorUser::getOmnipotentUser();
- $phortune_phid = id(new PhabricatorPhortuneApplication())->getPHID();
-
- $xactions = array();
-
- $xactions[] = id(new PhortuneCartTransaction())
- ->setTransactionType($type)
- ->setNewValue(true);
-
- $content_source = PhabricatorContentSource::newForSource(
- PhabricatorPhortuneContentSource::SOURCECONST);
-
- $editor = id(new PhortuneCartEditor())
- ->setActor($omnipotent_user)
- ->setActingAsPHID($phortune_phid)
- ->setContentSource($content_source)
- ->setContinueOnMissingFields(true)
- ->setContinueOnNoEffect(true);
-
- $editor->applyTransactions($this, $xactions);
- }
-
- public function getName() {
- return $this->getImplementation()->getName($this);
- }
-
- public function getDoneURI() {
- return $this->getImplementation()->getDoneURI($this);
- }
-
- public function getDoneActionName() {
- return $this->getImplementation()->getDoneActionName($this);
- }
-
- public function getCancelURI() {
- return $this->getImplementation()->getCancelURI($this);
- }
-
- public function getDescription() {
- return $this->getImplementation()->getDescription($this);
- }
-
- public function getDetailURI() {
- return urisprintf(
- '/phortune/cart/%d/',
- $this->getID());
- }
-
- public function getCheckoutURI() {
- return '/phortune/cart/'.$this->getID().'/checkout/';
- }
-
- public function canCancelOrder() {
- try {
- $this->assertCanCancelOrder();
- return true;
- } catch (Exception $ex) {
- return false;
- }
- }
-
- public function canRefundOrder() {
- try {
- $this->assertCanRefundOrder();
- return true;
- } catch (Exception $ex) {
- return false;
- }
- }
-
- public function canVoidOrder() {
- try {
- $this->assertCanVoidOrder();
- return true;
- } catch (Exception $ex) {
- return false;
- }
- }
-
- public function assertCanCancelOrder() {
- switch ($this->getStatus()) {
- case self::STATUS_BUILDING:
- throw new Exception(
- pht(
- 'This order can not be cancelled because the application has not '.
- 'finished building it yet.'));
- case self::STATUS_READY:
- throw new Exception(
- pht(
- 'This order can not be cancelled because it has not been placed.'));
- }
-
- return $this->getImplementation()->assertCanCancelOrder($this);
- }
-
- public function assertCanRefundOrder() {
- switch ($this->getStatus()) {
- case self::STATUS_BUILDING:
- throw new Exception(
- pht(
- 'This order can not be refunded because the application has not '.
- 'finished building it yet.'));
- case self::STATUS_READY:
- throw new Exception(
- pht(
- 'This order can not be refunded because it has not been placed.'));
- }
-
- return $this->getImplementation()->assertCanRefundOrder($this);
- }
-
- public function assertCanVoidOrder() {
- if (!$this->getIsInvoice()) {
- throw new Exception(
- pht(
- 'This order can not be voided because it is not an invoice.'));
- }
-
- switch ($this->getStatus()) {
- case self::STATUS_READY:
- break;
- default:
- throw new Exception(
- pht(
- 'This order can not be voided because it is not ready for '.
- 'payment.'));
- }
-
- return null;
- }
-
-
- protected function getConfiguration() {
- return array(
- self::CONFIG_AUX_PHID => true,
- self::CONFIG_SERIALIZATION => array(
- 'metadata' => self::SERIALIZATION_JSON,
- ),
- self::CONFIG_COLUMN_SCHEMA => array(
- 'status' => 'text32',
- 'cartClass' => 'text128',
- 'mailKey' => 'bytes20',
- 'subscriptionPHID' => 'phid?',
- 'isInvoice' => 'bool',
- ),
- self::CONFIG_KEY_SCHEMA => array(
- 'key_account' => array(
- 'columns' => array('accountPHID'),
- ),
- 'key_merchant' => array(
- 'columns' => array('merchantPHID'),
- ),
- 'key_subscription' => array(
- 'columns' => array('subscriptionPHID'),
- ),
- ),
- ) + parent::getConfiguration();
- }
-
- public function generatePHID() {
- return PhabricatorPHID::generateNewPHID(
- PhortuneCartPHIDType::TYPECONST);
- }
-
- public function save() {
- if (!$this->getMailKey()) {
- $this->setMailKey(Filesystem::readRandomCharacters(20));
- }
- return parent::save();
- }
-
- public function attachPurchases(array $purchases) {
- assert_instances_of($purchases, 'PhortunePurchase');
- $this->purchases = $purchases;
- return $this;
- }
-
- public function getPurchases() {
- return $this->assertAttached($this->purchases);
- }
-
- public function attachAccount(PhortuneAccount $account) {
- $this->account = $account;
- return $this;
- }
-
- public function getAccount() {
- return $this->assertAttached($this->account);
- }
-
- public function attachMerchant(PhortuneMerchant $merchant) {
- $this->merchant = $merchant;
- return $this;
- }
-
- public function getMerchant() {
- return $this->assertAttached($this->merchant);
- }
-
- public function attachImplementation(
- PhortuneCartImplementation $implementation) {
- $this->implementation = $implementation;
- return $this;
- }
-
- public function getImplementation() {
- return $this->assertAttached($this->implementation);
- }
-
- public function getTotalPriceAsCurrency() {
- $prices = array();
- foreach ($this->getPurchases() as $purchase) {
- $prices[] = $purchase->getTotalPriceAsCurrency();
- }
-
- return PhortuneCurrency::newFromList($prices);
- }
-
- public function setMetadataValue($key, $value) {
- $this->metadata[$key] = $value;
- return $this;
- }
-
- public function getMetadataValue($key, $default = null) {
- return idx($this->metadata, $key, $default);
- }
-
- public function getObjectName() {
- return pht('Order %d', $this->getID());
- }
-
-
-/* -( PhabricatorApplicationTransactionInterface )------------------------- */
-
-
- public function getApplicationTransactionEditor() {
- return new PhortuneCartEditor();
- }
-
- public function getApplicationTransactionTemplate() {
- return new PhortuneCartTransaction();
- }
-
-
-/* -( PhabricatorPolicyInterface )----------------------------------------- */
-
-
- public function getCapabilities() {
- return array(
- PhabricatorPolicyCapability::CAN_VIEW,
- PhabricatorPolicyCapability::CAN_EDIT,
- );
- }
-
- public function getPolicy($capability) {
- return PhabricatorPolicies::getMostOpenPolicy();
- }
-
- public function hasAutomaticCapability($capability, PhabricatorUser $viewer) {
- if ($capability === PhabricatorPolicyCapability::CAN_VIEW) {
- $any_edit = PhortuneMerchantQuery::canViewersEditMerchants(
- array($viewer->getPHID()),
- array($this->getMerchantPHID()));
- if ($any_edit) {
- return true;
- }
- }
-
- return false;
- }
-
-
-/* -( PhabricatorExtendedPolicyInterface )--------------------------------- */
-
-
- public function getExtendedPolicy($capability, PhabricatorUser $viewer) {
- if ($this->hasAutomaticCapability($capability, $viewer)) {
- return array();
- }
-
- return array(
- array(
- $this->getAccount(),
- PhabricatorPolicyCapability::CAN_EDIT,
- ),
- );
- }
-
-}
diff --git a/src/applications/phortune/storage/PhortuneCartTransaction.php b/src/applications/phortune/storage/PhortuneCartTransaction.php
deleted file mode 100644
--- a/src/applications/phortune/storage/PhortuneCartTransaction.php
+++ /dev/null
@@ -1,87 +0,0 @@
-getTransactionType()) {
- case self::TYPE_CREATED:
- return true;
- }
-
- return parent::shouldHideForMail($xactions);
- }
-
- public function getTitle() {
- $old = $this->getOldValue();
- $new = $this->getNewValue();
-
- switch ($this->getTransactionType()) {
- case self::TYPE_CREATED:
- return pht('This order was created.');
- case self::TYPE_HOLD:
- return pht('This order was put on hold until payment clears.');
- case self::TYPE_REVIEW:
- return pht(
- 'This order was flagged for manual processing by the merchant.');
- case self::TYPE_CANCEL:
- return pht('This order was cancelled.');
- case self::TYPE_REFUND:
- return pht('This order was refunded.');
- case self::TYPE_PURCHASED:
- return pht('Payment for this order was completed.');
- case self::TYPE_INVOICED:
- return pht('This order was invoiced.');
- }
-
- return parent::getTitle();
- }
-
- public function getTitleForMail() {
- switch ($this->getTransactionType()) {
- case self::TYPE_INVOICED:
- return pht('You have a new invoice due.');
- }
-
- return parent::getTitleForMail();
- }
-
- public function getActionName() {
- switch ($this->getTransactionType()) {
- case self::TYPE_CREATED:
- return pht('Created');
- case self::TYPE_HOLD:
- return pht('Hold');
- case self::TYPE_REVIEW:
- return pht('Review');
- case self::TYPE_CANCEL:
- return pht('Cancelled');
- case self::TYPE_REFUND:
- return pht('Refunded');
- case self::TYPE_PURCHASED:
- return pht('Complete');
- case self::TYPE_INVOICED:
- return pht('New Invoice');
- }
-
- return parent::getActionName();
- }
-
-
-}
diff --git a/src/applications/phortune/storage/PhortuneCharge.php b/src/applications/phortune/storage/PhortuneCharge.php
deleted file mode 100644
--- a/src/applications/phortune/storage/PhortuneCharge.php
+++ /dev/null
@@ -1,205 +0,0 @@
-setStatus(self::STATUS_CHARGING)
- ->setAmountRefundedAsCurrency(PhortuneCurrency::newEmptyCurrency());
- }
-
- protected function getConfiguration() {
- return array(
- self::CONFIG_AUX_PHID => true,
- self::CONFIG_SERIALIZATION => array(
- 'metadata' => self::SERIALIZATION_JSON,
- ),
- self::CONFIG_APPLICATION_SERIALIZERS => array(
- 'amountAsCurrency' => new PhortuneCurrencySerializer(),
- 'amountRefundedAsCurrency' => new PhortuneCurrencySerializer(),
- ),
- self::CONFIG_COLUMN_SCHEMA => array(
- 'paymentMethodPHID' => 'phid?',
- 'refundedChargePHID' => 'phid?',
- 'refundingPHID' => 'phid?',
- 'amountAsCurrency' => 'text64',
- 'amountRefundedAsCurrency' => 'text64',
- 'status' => 'text32',
- ),
- self::CONFIG_KEY_SCHEMA => array(
- 'key_cart' => array(
- 'columns' => array('cartPHID'),
- ),
- 'key_account' => array(
- 'columns' => array('accountPHID'),
- ),
- 'key_merchant' => array(
- 'columns' => array('merchantPHID'),
- ),
- 'key_provider' => array(
- 'columns' => array('providerPHID'),
- ),
- ),
- ) + parent::getConfiguration();
- }
-
- public static function getStatusNameMap() {
- return array(
- self::STATUS_CHARGING => pht('Charging'),
- self::STATUS_CHARGED => pht('Charged'),
- self::STATUS_HOLD => pht('Hold'),
- self::STATUS_FAILED => pht('Failed'),
- );
- }
-
- public static function getNameForStatus($status) {
- return idx(self::getStatusNameMap(), $status, pht('Unknown'));
- }
-
- public function isRefund() {
- return $this->getAmountAsCurrency()->negate()->isPositive();
- }
-
- public function getStatusForDisplay() {
- if ($this->getStatus() == self::STATUS_CHARGED) {
- if ($this->getRefundedChargePHID()) {
- return pht('Refund');
- }
-
- $refunded = $this->getAmountRefundedAsCurrency();
-
- if ($refunded->isPositive()) {
- if ($refunded->isEqualTo($this->getAmountAsCurrency())) {
- return pht('Fully Refunded');
- } else {
- return pht('%s Refunded', $refunded->formatForDisplay());
- }
- }
- }
-
- return self::getNameForStatus($this->getStatus());
- }
-
- public function generatePHID() {
- return PhabricatorPHID::generateNewPHID(
- PhortuneChargePHIDType::TYPECONST);
- }
-
- public function getMetadataValue($key, $default = null) {
- return idx($this->metadata, $key, $default);
- }
-
- public function setMetadataValue($key, $value) {
- $this->metadata[$key] = $value;
- return $this;
- }
-
- public function getAccount() {
- return $this->assertAttached($this->account);
- }
-
- public function attachAccount(PhortuneAccount $account) {
- $this->account = $account;
- return $this;
- }
-
- public function getCart() {
- return $this->assertAttached($this->cart);
- }
-
- public function attachCart(PhortuneCart $cart = null) {
- $this->cart = $cart;
- return $this;
- }
-
- public function getAmountRefundableAsCurrency() {
- $amount = $this->getAmountAsCurrency();
- $refunded = $this->getAmountRefundedAsCurrency();
-
- // We can't refund negative amounts of money, since it does not make
- // sense and is not possible in the various payment APIs.
-
- $refundable = $amount->subtract($refunded);
- if ($refundable->isPositive()) {
- return $refundable;
- } else {
- return PhortuneCurrency::newEmptyCurrency();
- }
- }
-
-
-/* -( PhabricatorPolicyInterface )----------------------------------------- */
-
-
- public function getCapabilities() {
- return array(
- PhabricatorPolicyCapability::CAN_VIEW,
- PhabricatorPolicyCapability::CAN_EDIT,
- );
- }
-
- public function getPolicy($capability) {
- return PhabricatorPolicies::getMostOpenPolicy();
- }
-
- public function hasAutomaticCapability($capability, PhabricatorUser $viewer) {
- if ($capability === PhabricatorPolicyCapability::CAN_VIEW) {
- $any_edit = PhortuneMerchantQuery::canViewersEditMerchants(
- array($viewer->getPHID()),
- array($this->getMerchantPHID()));
- if ($any_edit) {
- return true;
- }
- }
-
- return false;
- }
-
-
-/* -( PhabricatorExtendedPolicyInterface )--------------------------------- */
-
-
- public function getExtendedPolicy($capability, PhabricatorUser $viewer) {
- if ($this->hasAutomaticCapability($capability, $viewer)) {
- return array();
- }
-
- return array(
- array(
- $this->getAccount(),
- PhabricatorPolicyCapability::CAN_EDIT,
- ),
- );
- }
-
-}
diff --git a/src/applications/phortune/storage/PhortuneDAO.php b/src/applications/phortune/storage/PhortuneDAO.php
deleted file mode 100644
--- a/src/applications/phortune/storage/PhortuneDAO.php
+++ /dev/null
@@ -1,9 +0,0 @@
-attachMemberPHIDs(array())
- ->setContactInfo('')
- ->setInvoiceEmail('')
- ->setInvoiceFooter('');
- }
-
- protected function getConfiguration() {
- return array(
- self::CONFIG_AUX_PHID => true,
- self::CONFIG_COLUMN_SCHEMA => array(
- 'name' => 'text255',
- 'description' => 'text',
- 'contactInfo' => 'text',
- 'invoiceEmail' => 'text255',
- 'invoiceFooter' => 'text',
- 'profileImagePHID' => 'phid?',
- ),
- ) + parent::getConfiguration();
- }
-
- public function generatePHID() {
- return PhabricatorPHID::generateNewPHID(
- PhortuneMerchantPHIDType::TYPECONST);
- }
-
- public function getMemberPHIDs() {
- return $this->assertAttached($this->memberPHIDs);
- }
-
- public function attachMemberPHIDs(array $member_phids) {
- $this->memberPHIDs = $member_phids;
- return $this;
- }
-
- public function getURI() {
- return '/phortune/merchant/'.$this->getID().'/';
- }
-
- public function getProfileImageURI() {
- return $this->getProfileImageFile()->getBestURI();
- }
-
- public function attachProfileImageFile(PhabricatorFile $file) {
- $this->profileImageFile = $file;
- return $this;
- }
-
- public function getProfileImageFile() {
- return $this->assertAttached($this->profileImageFile);
- }
-
- public function getObjectName() {
- return pht('Merchant %d', $this->getID());
- }
-
- public function getDetailsURI() {
- return urisprintf(
- '/phortune/merchant/%d/details/',
- $this->getID());
- }
-
- public function getOrdersURI() {
- return urisprintf(
- '/phortune/merchant/%d/orders/',
- $this->getID());
- }
-
- public function getOrderListURI($path = '') {
- return urisprintf(
- '/phortune/merchant/%d/orders/list/%s',
- $this->getID(),
- $path);
- }
-
- public function getSubscriptionsURI() {
- return urisprintf(
- '/phortune/merchant/%d/subscriptions/',
- $this->getID());
- }
-
- public function getSubscriptionListURI($path = '') {
- return urisprintf(
- '/phortune/merchant/%d/subscriptions/list/%s',
- $this->getID(),
- $path);
- }
-
- public function getManagersURI() {
- return urisprintf(
- '/phortune/merchant/%d/managers/',
- $this->getID());
- }
-
- public function getPaymentProvidersURI() {
- return urisprintf(
- '/phortune/merchant/%d/providers/',
- $this->getID());
- }
-
-/* -( PhabricatorApplicationTransactionInterface )------------------------- */
-
-
- public function getApplicationTransactionEditor() {
- return new PhortuneMerchantEditor();
- }
-
- public function getApplicationTransactionTemplate() {
- return new PhortuneMerchantTransaction();
- }
-
-
-/* -( PhabricatorPolicyInterface )----------------------------------------- */
-
-
- public function getCapabilities() {
- return array(
- PhabricatorPolicyCapability::CAN_VIEW,
- PhabricatorPolicyCapability::CAN_EDIT,
- );
- }
-
- public function getPolicy($capability) {
- switch ($capability) {
- case PhabricatorPolicyCapability::CAN_VIEW:
- return PhabricatorPolicies::getMostOpenPolicy();
- case PhabricatorPolicyCapability::CAN_EDIT:
- return PhabricatorPolicies::POLICY_NOONE;
- }
- }
-
- public function hasAutomaticCapability($capability, PhabricatorUser $viewer) {
- $members = array_fuse($this->getMemberPHIDs());
- if (isset($members[$viewer->getPHID()])) {
- return true;
- }
-
- return false;
- }
-
- public function describeAutomaticCapability($capability) {
- return pht("A merchant's members can always view and edit it.");
- }
-
-}
diff --git a/src/applications/phortune/storage/PhortuneMerchantTransaction.php b/src/applications/phortune/storage/PhortuneMerchantTransaction.php
deleted file mode 100644
--- a/src/applications/phortune/storage/PhortuneMerchantTransaction.php
+++ /dev/null
@@ -1,18 +0,0 @@
- true,
- self::CONFIG_SERIALIZATION => array(
- 'metadata' => self::SERIALIZATION_JSON,
- ),
- self::CONFIG_COLUMN_SCHEMA => array(
- 'name' => 'text255',
- 'status' => 'text64',
- 'brand' => 'text64',
- 'expires' => 'text16',
- 'lastFourDigits' => 'text16',
- ),
- self::CONFIG_KEY_SCHEMA => array(
- 'key_account' => array(
- 'columns' => array('accountPHID', 'status'),
- ),
- 'key_merchant' => array(
- 'columns' => array('merchantPHID', 'accountPHID'),
- ),
- ),
- ) + parent::getConfiguration();
- }
-
- public function generatePHID() {
- return PhabricatorPHID::generateNewPHID(
- PhortunePaymentMethodPHIDType::TYPECONST);
- }
-
- public function attachAccount(PhortuneAccount $account) {
- $this->account = $account;
- return $this;
- }
-
- public function getAccount() {
- return $this->assertAttached($this->account);
- }
-
- public function attachMerchant(PhortuneMerchant $merchant) {
- $this->merchant = $merchant;
- return $this;
- }
-
- public function getMerchant() {
- return $this->assertAttached($this->merchant);
- }
-
- public function attachProviderConfig(PhortunePaymentProviderConfig $config) {
- $this->providerConfig = $config;
- return $this;
- }
-
- public function getProviderConfig() {
- return $this->assertAttached($this->providerConfig);
- }
-
- public function getDescription() {
- $provider = $this->buildPaymentProvider();
-
- $expires = $this->getDisplayExpires();
- $description = $provider->getPaymentMethodProviderDescription();
-
- return pht("Expires %s \xC2\xB7 %s", $expires, $description);
- }
-
- public function getMetadataValue($key, $default = null) {
- return idx($this->getMetadata(), $key, $default);
- }
-
- public function setMetadataValue($key, $value) {
- $this->metadata[$key] = $value;
- return $this;
- }
-
- public function buildPaymentProvider() {
- return $this->getProviderConfig()->buildProvider();
- }
-
- public function getDisplayName() {
- if (strlen($this->name)) {
- return $this->name;
- }
-
- $provider = $this->buildPaymentProvider();
- return $provider->getDefaultPaymentMethodDisplayName($this);
- }
-
- public function getFullDisplayName() {
- return pht('%s (%s)', $this->getDisplayName(), $this->getSummary());
- }
-
- public function getSummary() {
- return pht('%s %s', $this->getBrand(), $this->getLastFourDigits());
- }
-
- public function setExpires($year, $month) {
- $this->expires = $year.'-'.$month;
- return $this;
- }
-
- public function getDisplayExpires() {
- list($year, $month) = explode('-', $this->getExpires());
- $month = sprintf('%02d', $month);
- $year = substr($year, -2);
- return $month.'/'.$year;
- }
-
- public function isActive() {
- return ($this->getStatus() === self::STATUS_ACTIVE);
- }
-
- public function getURI() {
- return urisprintf(
- '/phortune/account/%d/methods/%d/',
- $this->getAccount()->getID(),
- $this->getID());
- }
-
- public function getObjectName() {
- return pht('Payment Method %d', $this->getID());
- }
-
-
-/* -( PhabricatorApplicationTransactionInterface )------------------------- */
-
-
- public function getApplicationTransactionEditor() {
- return new PhortunePaymentMethodEditor();
- }
-
- public function getApplicationTransactionTemplate() {
- return new PhortunePaymentMethodTransaction();
- }
-
-
-/* -( PhabricatorPolicyInterface )----------------------------------------- */
-
-
- public function getCapabilities() {
- return array(
- PhabricatorPolicyCapability::CAN_VIEW,
- PhabricatorPolicyCapability::CAN_EDIT,
- );
- }
-
- public function getPolicy($capability) {
- return PhabricatorPolicies::getMostOpenPolicy();
- }
-
- public function hasAutomaticCapability($capability, PhabricatorUser $viewer) {
- // See T13366. If you can edit the merchant associated with this payment
- // method, you can view the payment method.
- if ($capability === PhabricatorPolicyCapability::CAN_VIEW) {
- $any_edit = PhortuneMerchantQuery::canViewersEditMerchants(
- array($viewer->getPHID()),
- array($this->getMerchantPHID()));
- if ($any_edit) {
- return true;
- }
- }
-
- return false;
- }
-
-
-/* -( PhabricatorExtendedPolicyInterface )--------------------------------- */
-
-
- public function getExtendedPolicy($capability, PhabricatorUser $viewer) {
- if ($this->hasAutomaticCapability($capability, $viewer)) {
- return array();
- }
-
- // See T13366. For blanket view and edit permissions on all payment
- // methods, you must be able to edit the associated account.
- return array(
- array(
- $this->getAccount(),
- PhabricatorPolicyCapability::CAN_EDIT,
- ),
- );
- }
-
-
-/* -( PhabricatorPolicyCodexInterface )------------------------------------ */
-
-
- public function newPolicyCodex() {
- return new PhortunePaymentMethodPolicyCodex();
- }
-
-}
diff --git a/src/applications/phortune/storage/PhortunePaymentMethodTransaction.php b/src/applications/phortune/storage/PhortunePaymentMethodTransaction.php
deleted file mode 100644
--- a/src/applications/phortune/storage/PhortunePaymentMethodTransaction.php
+++ /dev/null
@@ -1,18 +0,0 @@
-setMerchantPHID($merchant->getPHID())
- ->attachMerchant($merchant)
- ->setIsEnabled(1);
- }
-
- protected function getConfiguration() {
- return array(
- self::CONFIG_AUX_PHID => true,
- self::CONFIG_SERIALIZATION => array(
- 'metadata' => self::SERIALIZATION_JSON,
- ),
- self::CONFIG_COLUMN_SCHEMA => array(
- 'providerClassKey' => 'bytes12',
- 'providerClass' => 'text128',
- 'isEnabled' => 'bool',
- ),
- self::CONFIG_KEY_SCHEMA => array(
- 'key_merchant' => array(
- 'columns' => array('merchantPHID', 'providerClassKey'),
- 'unique' => true,
- ),
- ),
- ) + parent::getConfiguration();
- }
-
- public function save() {
- $this->providerClassKey = PhabricatorHash::digestForIndex(
- $this->providerClass);
-
- return parent::save();
- }
-
- public function generatePHID() {
- return PhabricatorPHID::generateNewPHID(
- PhortunePaymentProviderPHIDType::TYPECONST);
- }
-
- public function attachMerchant(PhortuneMerchant $merchant) {
- $this->merchant = $merchant;
- return $this;
- }
-
- public function getMerchant() {
- return $this->assertAttached($this->merchant);
- }
-
- public function getMetadataValue($key, $default = null) {
- return idx($this->metadata, $key, $default);
- }
-
- public function setMetadataValue($key, $value) {
- $this->metadata[$key] = $value;
- return $this;
- }
-
- public function buildProvider() {
- return newv($this->getProviderClass(), array())
- ->setProviderConfig($this);
- }
-
- public function getObjectName() {
- return pht('Provider %d', $this->getID());
- }
-
- public function getURI() {
- return urisprintf(
- '/phortune/merchant/%d/providers/%d/',
- $this->getMerchant()->getID(),
- $this->getID());
- }
-
-
-/* -( PhabricatorPolicyInterface )----------------------------------------- */
-
-
- public function getCapabilities() {
- return array(
- PhabricatorPolicyCapability::CAN_VIEW,
- PhabricatorPolicyCapability::CAN_EDIT,
- );
- }
-
- public function getPolicy($capability) {
- return $this->getMerchant()->getPolicy($capability);
- }
-
- public function hasAutomaticCapability($capability, PhabricatorUser $viewer) {
- return $this->getMerchant()->hasAutomaticCapability($capability, $viewer);
- }
-
- public function describeAutomaticCapability($capability) {
- return pht('Providers have the policies of their merchant.');
- }
-
-
-/* -( PhabricatorApplicationTransactionInterface )------------------------- */
-
-
- public function getApplicationTransactionEditor() {
- return new PhortunePaymentProviderConfigEditor();
- }
-
- public function getApplicationTransactionTemplate() {
- return new PhortunePaymentProviderConfigTransaction();
- }
-
-}
diff --git a/src/applications/phortune/storage/PhortunePaymentProviderConfigTransaction.php b/src/applications/phortune/storage/PhortunePaymentProviderConfigTransaction.php
deleted file mode 100644
--- a/src/applications/phortune/storage/PhortunePaymentProviderConfigTransaction.php
+++ /dev/null
@@ -1,53 +0,0 @@
-getAuthorPHID();
-
- $old = $this->getOldValue();
- $new = $this->getNewValue();
-
- switch ($this->getTransactionType()) {
- case self::TYPE_CREATE:
- return pht(
- '%s created this payment provider.',
- $this->renderHandleLink($author_phid));
- case self::TYPE_ENABLE:
- if ($new) {
- return pht(
- '%s enabled this payment provider.',
- $this->renderHandleLink($author_phid));
- } else {
- return pht(
- '%s disabled this payment provider.',
- $this->renderHandleLink($author_phid));
- }
- case self::TYPE_PROPERTY:
- // TODO: Allow providers to improve this.
-
- return pht(
- '%s edited a property of this payment provider.',
- $this->renderHandleLink($author_phid));
- break;
- }
-
- return parent::getTitle();
- }
-
-}
diff --git a/src/applications/phortune/storage/PhortuneProduct.php b/src/applications/phortune/storage/PhortuneProduct.php
deleted file mode 100644
--- a/src/applications/phortune/storage/PhortuneProduct.php
+++ /dev/null
@@ -1,113 +0,0 @@
- true,
- self::CONFIG_SERIALIZATION => array(
- 'metadata' => self::SERIALIZATION_JSON,
- ),
- self::CONFIG_COLUMN_SCHEMA => array(
- 'productClassKey' => 'bytes12',
- 'productClass' => 'text128',
- 'productRefKey' => 'bytes12',
- 'productRef' => 'text128',
- ),
- self::CONFIG_KEY_SCHEMA => array(
- 'key_product' => array(
- 'columns' => array('productClassKey', 'productRefKey'),
- 'unique' => true,
- ),
- ),
- ) + parent::getConfiguration();
- }
-
- public function generatePHID() {
- return PhabricatorPHID::generateNewPHID(
- PhortuneProductPHIDType::TYPECONST);
- }
-
- public static function initializeNewProduct() {
- return id(new PhortuneProduct());
- }
-
- public function attachImplementation(PhortuneProductImplementation $impl) {
- $this->implementation = $impl;
- }
-
- public function getImplementation() {
- return $this->assertAttached($this->implementation);
- }
-
- public function save() {
- $this->productClassKey = PhabricatorHash::digestForIndex(
- $this->productClass);
-
- $this->productRefKey = PhabricatorHash::digestForIndex(
- $this->productRef);
-
- return parent::save();
- }
-
- public function getPriceAsCurrency() {
- return $this->getImplementation()->getPriceAsCurrency($this);
- }
-
- public function getProductName() {
- return $this->getImplementation()->getName($this);
- }
-
- public function getPurchaseName(PhortunePurchase $purchase) {
- return $this->getImplementation()->getPurchaseName($this, $purchase);
- }
-
- public function didPurchaseProduct(PhortunePurchase $purchase) {
- return $this->getImplementation()->didPurchaseProduct($this, $purchase);
- }
-
- public function didRefundProduct(
- PhortunePurchase $purchase,
- PhortuneCurrency $amount) {
- return $this->getImplementation()->didRefundProduct(
- $this,
- $purchase,
- $amount);
- }
-
- public function getPurchaseURI(PhortunePurchase $purchase) {
- return $this->getImplementation()->getPurchaseURI(
- $this,
- $purchase);
- }
-
-/* -( PhabricatorPolicyInterface )----------------------------------------- */
-
-
- public function getCapabilities() {
- return array(
- PhabricatorPolicyCapability::CAN_VIEW,
- );
- }
-
- public function getPolicy($capability) {
- return PhabricatorPolicies::POLICY_USER;
- }
-
- public function hasAutomaticCapability($capability, PhabricatorUser $viewer) {
- return false;
- }
-
-}
diff --git a/src/applications/phortune/storage/PhortunePurchase.php b/src/applications/phortune/storage/PhortunePurchase.php
deleted file mode 100644
--- a/src/applications/phortune/storage/PhortunePurchase.php
+++ /dev/null
@@ -1,137 +0,0 @@
-setAuthorPHID($actor->getPHID())
- ->setProductPHID($product->getPHID())
- ->attachProduct($product)
- ->setQuantity(1)
- ->setStatus(self::STATUS_PENDING)
- ->setBasePriceAsCurrency($product->getPriceAsCurrency());
- }
-
- protected function getConfiguration() {
- return array(
- self::CONFIG_AUX_PHID => true,
- self::CONFIG_SERIALIZATION => array(
- 'metadata' => self::SERIALIZATION_JSON,
- ),
- self::CONFIG_APPLICATION_SERIALIZERS => array(
- 'basePriceAsCurrency' => new PhortuneCurrencySerializer(),
- ),
- self::CONFIG_COLUMN_SCHEMA => array(
- 'cartPHID' => 'phid?',
- 'basePriceAsCurrency' => 'text64',
- 'quantity' => 'uint32',
- 'status' => 'text32',
- ),
- self::CONFIG_KEY_SCHEMA => array(
- 'key_cart' => array(
- 'columns' => array('cartPHID'),
- ),
- ),
- ) + parent::getConfiguration();
- }
-
- public function generatePHID() {
- return PhabricatorPHID::generateNewPHID(
- PhortunePurchasePHIDType::TYPECONST);
- }
-
- public function attachCart(PhortuneCart $cart) {
- $this->cart = $cart;
- return $this;
- }
-
- public function getCart() {
- return $this->assertAttached($this->cart);
- }
-
- public function attachProduct(PhortuneProduct $product) {
- $this->product = $product;
- return $this;
- }
-
- public function getProduct() {
- return $this->assertAttached($this->product);
- }
-
- public function getFullDisplayName() {
- return $this->getProduct()->getPurchaseName($this);
- }
-
- public function getURI() {
- return $this->getProduct()->getPurchaseURI($this);
- }
-
- public function getTotalPriceAsCurrency() {
- $base = $this->getBasePriceAsCurrency();
-
- $price = PhortuneCurrency::newEmptyCurrency();
- for ($ii = 0; $ii < $this->getQuantity(); $ii++) {
- $price = $price->add($base);
- }
-
- return $price;
- }
-
- public function getMetadataValue($key, $default = null) {
- return idx($this->metadata, $key, $default);
- }
-
- public function setMetadataValue($key, $value) {
- $this->metadata[$key] = $value;
- return $this;
- }
-
-
-/* -( PhabricatorPolicyInterface )----------------------------------------- */
-
-
- public function getCapabilities() {
- return array(
- PhabricatorPolicyCapability::CAN_VIEW,
- PhabricatorPolicyCapability::CAN_EDIT,
- );
- }
-
- public function getPolicy($capability) {
- return $this->getCart()->getPolicy($capability);
- }
-
- public function hasAutomaticCapability($capability, PhabricatorUser $viewer) {
- return $this->getCart()->hasAutomaticCapability($capability, $viewer);
- }
-
- public function describeAutomaticCapability($capability) {
- return pht('Purchases have the policies of their cart.');
- }
-
-}
diff --git a/src/applications/phortune/storage/PhortuneSchemaSpec.php b/src/applications/phortune/storage/PhortuneSchemaSpec.php
deleted file mode 100644
--- a/src/applications/phortune/storage/PhortuneSchemaSpec.php
+++ /dev/null
@@ -1,9 +0,0 @@
-buildEdgeSchemata(new PhortuneAccount());
- }
-
-}
diff --git a/src/applications/phortune/storage/PhortuneSubscription.php b/src/applications/phortune/storage/PhortuneSubscription.php
deleted file mode 100644
--- a/src/applications/phortune/storage/PhortuneSubscription.php
+++ /dev/null
@@ -1,319 +0,0 @@
- true,
- self::CONFIG_SERIALIZATION => array(
- 'metadata' => self::SERIALIZATION_JSON,
- ),
- self::CONFIG_COLUMN_SCHEMA => array(
- 'defaultPaymentMethodPHID' => 'phid?',
- 'subscriptionClassKey' => 'bytes12',
- 'subscriptionClass' => 'text128',
- 'subscriptionRefKey' => 'bytes12',
- 'subscriptionRef' => 'text128',
- 'status' => 'text32',
- ),
- self::CONFIG_KEY_SCHEMA => array(
- 'key_subscription' => array(
- 'columns' => array('subscriptionClassKey', 'subscriptionRefKey'),
- 'unique' => true,
- ),
- 'key_account' => array(
- 'columns' => array('accountPHID'),
- ),
- 'key_merchant' => array(
- 'columns' => array('merchantPHID'),
- ),
- ),
- ) + parent::getConfiguration();
- }
-
- public function getPHIDType() {
- return PhortuneSubscriptionPHIDType::TYPECONST;
- }
-
- public static function initializeNewSubscription(
- PhortuneAccount $account,
- PhortuneMerchant $merchant,
- PhabricatorUser $author,
- PhortuneSubscriptionImplementation $implementation,
- PhabricatorTriggerClock $clock) {
-
- $trigger = id(new PhabricatorWorkerTrigger())
- ->setClock($clock);
-
- return id(new PhortuneSubscription())
- ->setStatus(self::STATUS_ACTIVE)
- ->setAccountPHID($account->getPHID())
- ->attachAccount($account)
- ->setMerchantPHID($merchant->getPHID())
- ->attachMerchant($merchant)
- ->setAuthorPHID($author->getPHID())
- ->setSubscriptionClass(get_class($implementation))
- ->setSubscriptionRef($implementation->getRef())
- ->attachImplementation($implementation)
- ->attachTrigger($trigger);
- }
-
- public function attachImplementation(
- PhortuneSubscriptionImplementation $impl) {
- $this->implementation = $impl;
- return $this;
- }
-
- public function getImplementation() {
- return $this->assertAttached($this->implementation);
- }
-
- public function attachAccount(PhortuneAccount $account) {
- $this->account = $account;
- return $this;
- }
-
- public function getAccount() {
- return $this->assertAttached($this->account);
- }
-
- public function attachMerchant(PhortuneMerchant $merchant) {
- $this->merchant = $merchant;
- return $this;
- }
-
- public function getMerchant() {
- return $this->assertAttached($this->merchant);
- }
-
- public function attachTrigger(PhabricatorWorkerTrigger $trigger) {
- $this->trigger = $trigger;
- return $this;
- }
-
- public function getTrigger() {
- return $this->assertAttached($this->trigger);
- }
-
- public function save() {
- $this->subscriptionClassKey = PhabricatorHash::digestForIndex(
- $this->subscriptionClass);
-
- $this->subscriptionRefKey = PhabricatorHash::digestForIndex(
- $this->subscriptionRef);
-
- $is_new = (!$this->getID());
-
- $this->openTransaction();
-
- // If we're saving this subscription for the first time, we're also
- // going to set up the trigger for it.
- if ($is_new) {
- $trigger_phid = PhabricatorPHID::generateNewPHID(
- PhabricatorWorkerTriggerPHIDType::TYPECONST);
- $this->setTriggerPHID($trigger_phid);
- }
-
- $result = parent::save();
-
- if ($is_new) {
- $trigger_action = new PhabricatorScheduleTaskTriggerAction(
- array(
- 'class' => 'PhortuneSubscriptionWorker',
- 'data' => array(
- 'subscriptionPHID' => $this->getPHID(),
- ),
- 'options' => array(
- 'objectPHID' => $this->getPHID(),
- 'priority' => PhabricatorWorker::PRIORITY_BULK,
- ),
- ));
-
- $trigger = $this->getTrigger();
- $trigger->setPHID($trigger_phid);
- $trigger->setAction($trigger_action);
- $trigger->save();
- }
- $this->saveTransaction();
-
- $account = $this->getAccount();
- $merchant = $this->getMerchant();
- $account->writeMerchantEdge($merchant);
-
- return $result;
- }
-
- public function getSubscriptionName() {
- return $this->getImplementation()->getName($this);
- }
-
- public function getSubscriptionFullName() {
- return $this->getImplementation()->getFullName($this);
- }
-
- public function getSubscriptionCrumbName() {
- return $this->getImplementation()->getCrumbName($this);
- }
-
- public function getCartName(PhortuneCart $cart) {
- return $this->getImplementation()->getCartName($this, $cart);
- }
-
- public function getURI() {
- return urisprintf(
- '/phortune/account/%d/subscriptions/%d/',
- $this->getAccount()->getID(),
- $this->getID());
- }
-
- public function getEditURI() {
- $account_id = $this->getAccount()->getID();
- $id = $this->getID();
-
- return "/phortune/{$account_id}/subscription/edit/{$id}/";
- }
-
- public function getMerchantURI() {
- $merchant_id = $this->getMerchant()->getID();
- $id = $this->getID();
- return "/phortune/merchant/{$merchant_id}/subscription/view/{$id}/";
- }
-
- public function getCostForBillingPeriodAsCurrency($start_epoch, $end_epoch) {
- return $this->getImplementation()->getCostForBillingPeriodAsCurrency(
- $this,
- $start_epoch,
- $end_epoch);
- }
-
- public function shouldInvoiceForBillingPeriod($start_epoch, $end_epoch) {
- return $this->getImplementation()->shouldInvoiceForBillingPeriod(
- $this,
- $start_epoch,
- $end_epoch);
- }
-
- public function getPurchaseName(
- PhortuneProduct $product,
- PhortunePurchase $purchase) {
- return $this->getImplementation()->getPurchaseName(
- $this,
- $product,
- $purchase);
- }
-
- public function getPurchaseURI(
- PhortuneProduct $product,
- PhortunePurchase $purchase) {
- return $this->getImplementation()->getPurchaseURI(
- $this,
- $product,
- $purchase);
- }
-
- public function didPurchaseProduct(
- PhortuneProduct $product,
- PhortunePurchase $purchase) {
- return $this->getImplementation()->didPurchaseProduct(
- $this,
- $product,
- $purchase);
- }
-
-/* -( PhabricatorApplicationTransactionInterface )------------------------- */
-
-
- public function getApplicationTransactionEditor() {
- return new PhortuneSubscriptionEditor();
- }
-
- public function getApplicationTransactionTemplate() {
- return new PhortuneSubscriptionTransaction();
- }
-
-/* -( PhabricatorPolicyInterface )----------------------------------------- */
-
-
- public function getCapabilities() {
- return array(
- PhabricatorPolicyCapability::CAN_VIEW,
- PhabricatorPolicyCapability::CAN_EDIT,
- );
- }
-
- public function getPolicy($capability) {
- return PhabricatorPolicies::getMostOpenPolicy();
- }
-
- public function hasAutomaticCapability($capability, PhabricatorUser $viewer) {
- // See T13366. If you can edit the merchant associated with this
- // subscription, you can view the subscription.
- if ($capability === PhabricatorPolicyCapability::CAN_VIEW) {
- $any_edit = PhortuneMerchantQuery::canViewersEditMerchants(
- array($viewer->getPHID()),
- array($this->getMerchantPHID()));
- if ($any_edit) {
- return true;
- }
- }
-
- return false;
- }
-
-
-/* -( PhabricatorExtendedPolicyInterface )--------------------------------- */
-
-
- public function getExtendedPolicy($capability, PhabricatorUser $viewer) {
- if ($this->hasAutomaticCapability($capability, $viewer)) {
- return array();
- }
-
- // See T13366. For blanket view and edit permissions on all subscriptions,
- // you must be able to edit the associated account.
- return array(
- array(
- $this->getAccount(),
- PhabricatorPolicyCapability::CAN_EDIT,
- ),
- );
- }
-
-
-/* -( PhabricatorPolicyCodexInterface )------------------------------------ */
-
-
- public function newPolicyCodex() {
- return new PhortuneSubscriptionPolicyCodex();
- }
-
-}
diff --git a/src/applications/phortune/storage/PhortuneSubscriptionTransaction.php b/src/applications/phortune/storage/PhortuneSubscriptionTransaction.php
deleted file mode 100644
--- a/src/applications/phortune/storage/PhortuneSubscriptionTransaction.php
+++ /dev/null
@@ -1,18 +0,0 @@
-getName($subscription);
- }
-
- public function getCrumbName(PhortuneSubscription $subscription) {
- return $this->getName($subscription);
- }
-
- abstract public function getCostForBillingPeriodAsCurrency(
- PhortuneSubscription $subscription,
- $start_epoch,
- $end_epoch);
-
- public function shouldInvoiceForBillingPeriod(
- PhortuneSubscription $subscription,
- $start_epoch,
- $end_epoch) {
- return true;
- }
-
- public function getCartName(
- PhortuneSubscription $subscription,
- PhortuneCart $cart) {
- return pht('Subscription');
- }
-
- public function getPurchaseName(
- PhortuneSubscription $subscription,
- PhortuneProduct $product,
- PhortunePurchase $purchase) {
- return $product->getProductName();
- }
-
- public function getPurchaseURI(
- PhortuneSubscription $subscription,
- PhortuneProduct $product,
- PhortunePurchase $purchase) {
- return null;
- }
-
- public function didPurchaseProduct(
- PhortuneSubscription $subscription,
- PhortuneProduct $product,
- PhortunePurchase $purchase) {
- return null;
- }
-
-}
diff --git a/src/applications/phortune/view/PhortuneChargeTableView.php b/src/applications/phortune/view/PhortuneChargeTableView.php
deleted file mode 100644
--- a/src/applications/phortune/view/PhortuneChargeTableView.php
+++ /dev/null
@@ -1,89 +0,0 @@
-showOrder = $show_order;
- return $this;
- }
-
- public function getShowOrder() {
- return $this->showOrder;
- }
-
- public function setCharges(array $charges) {
- $this->charges = $charges;
- return $this;
- }
-
- public function getCharges() {
- return $this->charges;
- }
-
- public function render() {
- $charges = $this->getCharges();
- $viewer = $this->getViewer();
-
- $phids = array();
- foreach ($charges as $charge) {
- $phids[] = $charge->getCartPHID();
- $phids[] = $charge->getProviderPHID();
- $phids[] = $charge->getPaymentMethodPHID();
- $phids[] = $charge->getMerchantPHID();
- }
-
- $handles = $viewer->loadHandles($phids);
-
- $rows = array();
- foreach ($charges as $charge) {
- $rows[] = array(
- $charge->getID(),
- $handles[$charge->getCartPHID()]->renderLink(),
- $handles[$charge->getProviderPHID()]->renderLink(),
- $charge->getPaymentMethodPHID()
- ? $handles[$charge->getPaymentMethodPHID()]->renderLink()
- : null,
- $handles[$charge->getMerchantPHID()]->renderLink(),
- $charge->getAmountAsCurrency()->formatForDisplay(),
- $charge->getStatusForDisplay(),
- phabricator_datetime($charge->getDateCreated(), $viewer),
- );
- }
-
- $table = id(new AphrontTableView($rows))
- ->setNoDataString(pht('No charges found.'))
- ->setHeaders(
- array(
- pht('ID'),
- pht('Cart'),
- pht('Provider'),
- pht('Method'),
- pht('Merchant'),
- pht('Amount'),
- pht('Status'),
- pht('Created'),
- ))
- ->setColumnClasses(
- array(
- '',
- '',
- '',
- '',
- '',
- 'wide right',
- '',
- '',
- ))
- ->setColumnVisibility(
- array(
- true,
- $this->getShowOrder(),
- ));
-
- return $table;
- }
-
-}
diff --git a/src/applications/phortune/view/PhortuneCreditCardForm.php b/src/applications/phortune/view/PhortuneCreditCardForm.php
deleted file mode 100644
--- a/src/applications/phortune/view/PhortuneCreditCardForm.php
+++ /dev/null
@@ -1,122 +0,0 @@
-securityAssurance = $security_assurance;
- return $this;
- }
-
- public function getSecurityAssurance() {
- return $this->securityAssurance;
- }
-
- public function setUser(PhabricatorUser $user) {
- $this->user = $user;
- return $this;
- }
-
- public function setErrors(array $errors) {
- $this->errors = $errors;
- return $this;
- }
-
- public function addScript($script_uri) {
- $this->scripts[] = $script_uri;
- return $this;
- }
-
- public function getFormID() {
- if (!$this->formID) {
- $this->formID = celerity_generate_unique_node_id();
- }
- return $this->formID;
- }
-
- public function buildForm() {
- $form_id = $this->getFormID();
-
- require_celerity_resource('phortune-credit-card-form-css');
- require_celerity_resource('phortune-credit-card-form');
-
- require_celerity_resource('aphront-tooltip-css');
- Javelin::initBehavior('phabricator-tooltips');
-
- $form = new AphrontFormView();
-
- foreach ($this->scripts as $script) {
- $form->appendChild(
- phutil_tag(
- 'script',
- array(
- 'type' => 'text/javascript',
- 'src' => $script,
- )));
- }
-
- $errors = $this->errors;
- $e_number = isset($errors[PhortuneErrCode::ERR_CC_INVALID_NUMBER])
- ? pht('Invalid')
- : null;
-
- $e_cvc = isset($errors[PhortuneErrCode::ERR_CC_INVALID_CVC])
- ? pht('Invalid')
- : null;
-
- $e_expiry = isset($errors[PhortuneErrCode::ERR_CC_INVALID_EXPIRY])
- ? pht('Invalid')
- : null;
-
- $form
- ->setID($form_id)
- ->appendChild(
- id(new AphrontFormTextControl())
- ->setLabel(pht('Card Number'))
- ->setDisableAutocomplete(true)
- ->setSigil('number-input')
- ->setError($e_number))
- ->appendChild(
- id(new AphrontFormTextControl())
- ->setLabel(pht('CVC'))
- ->setDisableAutocomplete(true)
- ->addClass('aphront-form-cvc-input')
- ->setSigil('cvc-input')
- ->setError($e_cvc))
- ->appendChild(
- id(new PhortuneMonthYearExpiryControl())
- ->setLabel(pht('Expiration'))
- ->setUser($this->user)
- ->setError($e_expiry));
-
- $assurance = $this->getSecurityAssurance();
- if ($assurance) {
- $assurance = phutil_tag(
- 'div',
- array(
- 'class' => 'phortune-security-assurance',
- ),
- array(
- id(new PHUIIconView())
- ->setIcon('fa-lock grey'),
- ' ',
- $assurance,
- ));
-
- $form->appendChild(
- id(new AphrontFormMarkupControl())
- ->setValue($assurance));
- }
-
- return $form;
- }
-}
diff --git a/src/applications/phortune/view/PhortuneOrderDescriptionView.php b/src/applications/phortune/view/PhortuneOrderDescriptionView.php
deleted file mode 100644
--- a/src/applications/phortune/view/PhortuneOrderDescriptionView.php
+++ /dev/null
@@ -1,39 +0,0 @@
-order = $order;
- return $this;
- }
-
- public function getOrder() {
- return $this->order;
- }
-
- public function render() {
- $viewer = $this->getViewer();
- $order = $this->getOrder();
-
- $description = $order->getDescription();
- if (!strlen($description)) {
- return null;
- }
-
- $output = new PHUIRemarkupView($viewer, $description);
-
- $description_box = id(new PHUIBoxView())
- ->addMargin(PHUI::MARGIN_LARGE)
- ->appendChild($output);
-
- return id(new PHUIObjectBoxView())
- ->setHeaderText(pht('Description'))
- ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)
- ->appendChild($description_box);
- }
-
-
-}
diff --git a/src/applications/phortune/view/PhortuneOrderItemsView.php b/src/applications/phortune/view/PhortuneOrderItemsView.php
deleted file mode 100644
--- a/src/applications/phortune/view/PhortuneOrderItemsView.php
+++ /dev/null
@@ -1,58 +0,0 @@
-getViewer();
- $order = $this->getOrder();
-
- $purchases = id(new PhortunePurchaseQuery())
- ->setViewer($viewer)
- ->withCartPHIDs(array($order->getPHID()))
- ->execute();
-
- $order->attachPurchases($purchases);
-
- $rows = array();
- foreach ($purchases as $purchase) {
- $rows[] = array(
- $purchase->getFullDisplayName(),
- $purchase->getBasePriceAsCurrency()->formatForDisplay(),
- $purchase->getQuantity(),
- $purchase->getTotalPriceAsCurrency()->formatForDisplay(),
- );
- }
-
- $rows[] = array(
- phutil_tag('strong', array(), pht('Total')),
- '',
- '',
- phutil_tag('strong', array(),
- $order->getTotalPriceAsCurrency()->formatForDisplay()),
- );
-
- $table = new AphrontTableView($rows);
- $table->setHeaders(
- array(
- pht('Item'),
- pht('Price'),
- pht('Qty.'),
- pht('Total'),
- ));
- $table->setColumnClasses(
- array(
- 'wide',
- 'right',
- 'right',
- 'right',
- ));
-
- return id(new PHUIObjectBoxView())
- ->setHeaderText(pht('Items'))
- ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)
- ->setTable($table);
- }
-
-
-}
diff --git a/src/applications/phortune/view/PhortuneOrderSummaryView.php b/src/applications/phortune/view/PhortuneOrderSummaryView.php
deleted file mode 100644
--- a/src/applications/phortune/view/PhortuneOrderSummaryView.php
+++ /dev/null
@@ -1,370 +0,0 @@
-resumeURI = $resume_uri;
- return $this;
- }
-
- public function getResumeURI() {
- return $this->resumeURI;
- }
-
- public function setPrintable($printable) {
- $this->printable = $printable;
- return $this;
- }
-
- public function getPrintable() {
- return $this->printable;
- }
-
- public function render() {
- $is_printable = $this->getPrintable();
-
- $content = array();
-
- if ($is_printable) {
- $content[] = $this->newContactHeader();
- }
-
- $content[] = $this->newMessagesView();
- $content[] = $this->newDetailsView();
- $content[] = $this->newDescriptionView();
- $content[] = $this->newItemsView();
- $content[] = $this->newChargesView();
-
- if ($is_printable) {
- $content[] = $this->newContactFooter();
- }
-
- return $content;
- }
-
- private function newMessagesView() {
- $viewer = $this->getViewer();
- $order = $this->getOrder();
-
- $messages = array();
- $severity = null;
-
- $resume_uri = $this->getResumeURI();
-
- $can_edit = PhabricatorPolicyFilter::hasCapability(
- $viewer,
- $order,
- PhabricatorPolicyCapability::CAN_EDIT);
-
- $can_merchant = PhabricatorPolicyFilter::hasCapability(
- $viewer,
- $order->getMerchant(),
- PhabricatorPolicyCapability::CAN_EDIT);
-
- switch ($order->getStatus()) {
- case PhortuneCart::STATUS_READY:
- if ($order->getIsInvoice()) {
- $severity = PHUIInfoView::SEVERITY_NOTICE;
- $messages[] = pht('This invoice is ready for payment.');
- }
- break;
- case PhortuneCart::STATUS_PURCHASING:
- if ($can_edit) {
- if ($resume_uri) {
- $messages[] = pht(
- 'The checkout process has been started, but not yet completed. '.
- 'You can continue checking out by clicking %s, or cancel the '.
- 'order, or contact the merchant for assistance.',
- phutil_tag('strong', array(), pht('Continue Checkout')));
- } else {
- $messages[] = pht(
- 'The checkout process has been started, but an error occurred. '.
- 'You can cancel the order or contact the merchant for '.
- 'assistance.');
- }
- }
- break;
- case PhortuneCart::STATUS_CHARGED:
- if ($can_edit) {
- $messages[] = pht(
- 'You have been charged, but processing could not be completed. '.
- 'You can cancel your order, or contact the merchant for '.
- 'assistance.');
- }
- break;
- case PhortuneCart::STATUS_HOLD:
- if ($can_edit) {
- $messages[] = pht(
- 'Payment for this order is on hold. You can click %s to check '.
- 'for updates, cancel the order, or contact the merchant for '.
- 'assistance.',
- phutil_tag('strong', array(), pht('Update Status')));
- }
- break;
- case PhortuneCart::STATUS_REVIEW:
- if ($can_merchant) {
- $messages[] = pht(
- 'This order has been flagged for manual review. Review the order '.
- 'and choose %s to accept it or %s to reject it.',
- phutil_tag('strong', array(), pht('Accept Order')),
- phutil_tag('strong', array(), pht('Refund Order')));
- } else if ($can_edit) {
- $messages[] = pht(
- 'This order requires manual processing and will complete once '.
- 'the merchant accepts it.');
- }
- break;
- case PhortuneCart::STATUS_PURCHASED:
- $severity = PHUIInfoView::SEVERITY_SUCCESS;
- $messages[] = pht('This purchase has been completed.');
- break;
- }
-
- if (!$messages) {
- return null;
- }
-
- if ($severity === null) {
- $severity = PHUIInfoView::SEVERITY_WARNING;
- }
-
- $messages_view = id(new PHUIInfoView())
- ->setSeverity($severity)
- ->appendChild($messages);
-
- $is_printable = $this->getPrintable();
- if ($is_printable) {
- $messages_view = phutil_tag(
- 'div',
- array(
- 'class' => 'phortune-invoice-status',
- ),
- $messages_view);
- }
-
- return $messages_view;
- }
-
- private function newDetailsView() {
- $viewer = $this->getViewer();
- $order = $this->getOrder();
- $is_printable = $this->getPrintable();
-
- $view = id(new PHUIPropertyListView())
- ->setViewer($viewer)
- ->setObject($order);
-
- $account_phid = $order->getAccountPHID();
- $author_phid = $order->getAuthorPHID();
- $merchant_phid = $order->getMerchantPHID();
-
- $handles = $viewer->loadHandles(
- array(
- $account_phid,
- $author_phid,
- $merchant_phid,
- ));
-
- if ($is_printable) {
- $account_link = $handles[$account_phid]->getFullName();
- $author_link = $handles[$author_phid]->getFullName();
- $merchant_link = $handles[$merchant_phid]->getFullName();
- } else {
- $account_link = $handles[$account_phid]->renderLink();
- $author_link = $handles[$author_phid]->renderLink();
- $merchant_link = $handles[$merchant_phid]->renderLink();
- }
-
- if ($is_printable) {
- $view->addProperty(pht('Order Name'), $order->getName());
- }
-
- $view->addProperty(pht('Account'), $account_link);
- $view->addProperty(pht('Authorized By'), $author_link);
- $view->addProperty(pht('Merchant'), $merchant_link);
-
- $view->addProperty(
- pht('Order Status'),
- PhortuneCart::getNameForStatus($order->getStatus()));
- $view->addProperty(
- pht('Created'),
- phabricator_datetime($order->getDateCreated(), $viewer));
- $view->addProperty(
- pht('Updated'),
- phabricator_datetime($order->getDateModified(), $viewer));
-
- return id(new PHUIObjectBoxView())
- ->setHeaderText(pht('Details'))
- ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)
- ->appendChild($view);
- }
-
- private function newChargesView() {
- $viewer = $this->getViewer();
- $order = $this->getOrder();
-
- $charges = id(new PhortuneChargeQuery())
- ->setViewer($viewer)
- ->withCartPHIDs(array($order->getPHID()))
- ->needCarts(true)
- ->execute();
-
- $charges_table = id(new PhortuneChargeTableView())
- ->setUser($viewer)
- ->setCharges($charges)
- ->setShowOrder(false);
-
- $charges_view = id(new PHUIObjectBoxView())
- ->setHeaderText(pht('Charges'))
- ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)
- ->setTable($charges_table);
-
- return $charges_view;
- }
-
- private function newDescriptionView() {
- $viewer = $this->getViewer();
- $order = $this->getOrder();
-
- return id(new PhortuneOrderDescriptionView())
- ->setViewer($viewer)
- ->setOrder($order);
- }
-
- private function newItemsView() {
- $viewer = $this->getViewer();
- $order = $this->getOrder();
-
- return id(new PhortuneOrderItemsView())
- ->setViewer($viewer)
- ->setOrder($order);
- }
-
- private function newContactHeader() {
- $viewer = $this->getViewer();
- $order = $this->getOrder();
-
- $merchant = id(new PhortuneMerchantQuery())
- ->setViewer($viewer)
- ->withPHIDs(array($order->getMerchant()->getPHID()))
- ->needProfileImage(true)
- ->executeOne();
-
- $merchant_name = $merchant->getName();
- $merchant_image = $merchant->getProfileImageURI();
-
- $account = $order->getAccount();
- $account_name = $account->getBillingName();
-
- $account_contact = $account->getBillingAddress();
- if (strlen($account_contact)) {
- $account_contact = new PHUIRemarkupView(
- $viewer,
- $account_contact);
- }
-
- $merchant_contact = $merchant->getContactInfo();
- if (strlen($merchant_contact)) {
- $merchant_contact = new PHUIRemarkupView(
- $viewer,
- $merchant->getContactInfo());
- }
-
- $logo = phutil_tag(
- 'div',
- array(
- 'class' => 'phortune-invoice-logo',
- ),
- phutil_tag(
- 'img',
- array(
- 'height' => '50',
- 'width' => '50',
- 'alt' => $merchant_name,
- 'src' => $merchant_image,
- )));
-
- $to_title = phutil_tag(
- 'div',
- array(
- 'class' => 'phortune-mini-header',
- ),
- pht('Bill To:'));
-
- $bill_to = phutil_tag(
- 'td',
- array(
- 'class' => 'phortune-invoice-to',
- 'width' => '50%',
- ),
- array(
- $to_title,
- phutil_tag('strong', array(), $account_name),
- phutil_tag('br', array()),
- $account_contact,
- ));
-
- $from_title = phutil_tag(
- 'div',
- array(
- 'class' => 'phortune-mini-header',
- ),
- pht('From:'));
-
- $bill_from = phutil_tag(
- 'td',
- array(
- 'class' => 'phortune-invoice-from',
- 'width' => '50%',
- ),
- array(
- $from_title,
- phutil_tag('strong', array(), $merchant_name),
- phutil_tag('br', array()),
- $merchant_contact,
- ));
-
- $contact = phutil_tag(
- 'table',
- array(
- 'class' => 'phortune-invoice-contact',
- 'width' => '100%',
- ),
- phutil_tag(
- 'tr',
- array(),
- array(
- $bill_to,
- $bill_from,
- )));
-
- return array(
- $logo,
- $contact,
- );
- }
-
- private function newContactFooter() {
- $viewer = $this->getViewer();
- $order = $this->getOrder();
-
- $merchant = $order->getMerchant();
- $footer = $merchant->getInvoiceFooter();
-
- if (!strlen($footer)) {
- return null;
- }
-
- return phutil_tag(
- 'div',
- array(
- 'class' => 'phortune-invoice-footer',
- ),
- $footer);
- }
-
-}
diff --git a/src/applications/phortune/view/PhortuneOrderTableView.php b/src/applications/phortune/view/PhortuneOrderTableView.php
deleted file mode 100644
--- a/src/applications/phortune/view/PhortuneOrderTableView.php
+++ /dev/null
@@ -1,198 +0,0 @@
-carts = $carts;
- return $this;
- }
-
- public function getCarts() {
- return $this->carts;
- }
-
- public function setIsInvoices($is_invoices) {
- $this->isInvoices = $is_invoices;
- return $this;
- }
-
- public function getIsInvoices() {
- return $this->isInvoices;
- }
-
- public function setNoDataString($no_data_string) {
- $this->noDataString = $no_data_string;
- return $this;
- }
-
- public function getNoDataString() {
- return $this->noDataString;
- }
-
- public function setIsMerchantView($is_merchant_view) {
- $this->isMerchantView = $is_merchant_view;
- return $this;
- }
-
- public function getIsMerchantView() {
- return $this->isMerchantView;
- }
-
- public function setAccountEmail(PhortuneAccountEmail $account_email) {
- $this->accountEmail = $account_email;
- return $this;
- }
-
- public function getAccountEmail() {
- return $this->accountEmail;
- }
-
- public function render() {
- $carts = $this->getCarts();
- $viewer = $this->getUser();
-
- $is_invoices = $this->getIsInvoices();
- $is_merchant = $this->getIsMerchantView();
- $is_external = (bool)$this->getAccountEmail();
-
- $email = $this->getAccountEmail();
-
- $phids = array();
- foreach ($carts as $cart) {
- $phids[] = $cart->getPHID();
- foreach ($cart->getPurchases() as $purchase) {
- $phids[] = $purchase->getPHID();
- }
- $phids[] = $cart->getMerchantPHID();
- }
-
- $handles = $viewer->loadHandles($phids);
-
- $rows = array();
- $rowc = array();
- foreach ($carts as $cart) {
- if ($is_external) {
- $cart_link = phutil_tag(
- 'a',
- array(
- 'href' => $email->getExternalOrderURI($cart),
- ),
- $handles[$cart->getPHID()]->getName());
- } else {
- $cart_link = $handles[$cart->getPHID()]->renderLink();
- }
- $purchases = $cart->getPurchases();
-
- if (count($purchases) == 1) {
- $purchase = head($purchases);
- $purchase_name = $handles[$purchase->getPHID()]->getName();
- $purchases = array();
- } else {
- $purchase_name = '';
- }
-
- if ($is_invoices) {
- if ($is_external) {
- $merchant_link = $handles[$cart->getMerchantPHID()]->getName();
- } else {
- $merchant_link = $handles[$cart->getMerchantPHID()]->renderLink();
- }
- } else {
- $merchant_link = null;
- }
-
- $rowc[] = '';
- $rows[] = array(
- $cart->getID(),
- $merchant_link,
- phutil_tag(
- 'strong',
- array(),
- $cart_link),
- $purchase_name,
- phutil_tag(
- 'strong',
- array(),
- $cart->getTotalPriceAsCurrency()->formatForDisplay()),
- PhortuneCart::getNameForStatus($cart->getStatus()),
- phabricator_datetime($cart->getDateModified(), $viewer),
- phabricator_datetime($cart->getDateCreated(), $viewer),
- id(new PHUIButtonView())
- ->setTag('a')
- ->setColor('green')
- ->setHref($cart->getCheckoutURI())
- ->setText(pht('Pay Now'))
- ->setIcon('fa-credit-card'),
- );
- foreach ($purchases as $purchase) {
- $id = $purchase->getID();
-
- $price = $purchase->getTotalPriceAsCurrency()->formatForDisplay();
-
- $rowc[] = '';
- $rows[] = array(
- '',
- '',
- $handles[$purchase->getPHID()]->renderLink(),
- $price,
- '',
- '',
- '',
- '',
- );
- }
- }
-
- $table = id(new AphrontTableView($rows))
- ->setNoDataString($this->getNoDataString())
- ->setRowClasses($rowc)
- ->setHeaders(
- array(
- pht('ID'),
- pht('Merchant'),
- $is_invoices ? pht('Invoice') : pht('Order'),
- pht('Purchase'),
- pht('Amount'),
- pht('Status'),
- pht('Updated'),
- pht('Invoice Date'),
- null,
- ))
- ->setColumnClasses(
- array(
- '',
- '',
- '',
- 'wide',
- 'right',
- '',
- 'right',
- 'right',
- 'action',
- ))
- ->setColumnVisibility(
- array(
- true,
- $is_invoices,
- true,
- true,
- true,
- !$is_invoices,
- !$is_invoices,
- $is_invoices,
-
- // We show "Pay Now" for due invoices, but not if the viewer is the
- // merchant, since it doesn't make sense for them to pay.
- ($is_invoices && !$is_merchant && !$is_external),
- ));
-
- return $table;
- }
-
-}
diff --git a/src/applications/phortune/view/PhortuneOrderView.php b/src/applications/phortune/view/PhortuneOrderView.php
deleted file mode 100644
--- a/src/applications/phortune/view/PhortuneOrderView.php
+++ /dev/null
@@ -1,17 +0,0 @@
-order = $order;
- return $this;
- }
-
- final public function getOrder() {
- return $this->order;
- }
-
-}
diff --git a/src/applications/phortune/view/PhortuneSubscriptionTableView.php b/src/applications/phortune/view/PhortuneSubscriptionTableView.php
deleted file mode 100644
--- a/src/applications/phortune/view/PhortuneSubscriptionTableView.php
+++ /dev/null
@@ -1,83 +0,0 @@
-subscriptions = $subscriptions;
- return $this;
- }
-
- public function getSubscriptions() {
- return $this->subscriptions;
- }
-
- public function setIsMerchantView($is_merchant_view) {
- $this->isMerchantView = $is_merchant_view;
- return $this;
- }
-
- public function getIsMerchantView() {
- return $this->isMerchantView;
- }
-
- public function setNotice($notice) {
- $this->notice = $notice;
- return $this;
- }
-
- public function render() {
- return $this->newTableView();
- }
-
- public function newTableView() {
- $subscriptions = $this->getSubscriptions();
- $viewer = $this->getViewer();
-
- $phids = mpull($subscriptions, 'getPHID');
- $handles = $viewer->loadHandles($phids);
-
- $rows = array();
- $rowc = array();
- foreach ($subscriptions as $subscription) {
- if ($this->getIsMerchantView()) {
- $uri = $subscription->getMerchantURI();
- } else {
- $uri = $subscription->getURI();
- }
-
- $subscription_link = $handles[$subscription->getPHID()]->renderLink();
- $rows[] = array(
- $subscription->getID(),
- phutil_tag(
- 'a',
- array(
- 'href' => $uri,
- ),
- $subscription->getSubscriptionFullName()),
- phabricator_datetime($subscription->getDateCreated(), $viewer),
- );
- }
-
- $table = id(new AphrontTableView($rows))
- ->setNotice($this->notice)
- ->setHeaders(
- array(
- pht('ID'),
- pht('Name'),
- pht('Created'),
- ))
- ->setColumnClasses(
- array(
- '',
- 'wide',
- 'right',
- ));
-
- return $table;
- }
-
-}
diff --git a/src/applications/phortune/worker/PhortuneSubscriptionWorker.php b/src/applications/phortune/worker/PhortuneSubscriptionWorker.php
deleted file mode 100644
--- a/src/applications/phortune/worker/PhortuneSubscriptionWorker.php
+++ /dev/null
@@ -1,264 +0,0 @@
-loadSubscription();
-
- $range = $this->getBillingPeriodRange($subscription);
- list($last_epoch, $next_epoch) = $range;
-
- $should_invoice = $subscription->shouldInvoiceForBillingPeriod(
- $last_epoch,
- $next_epoch);
- if (!$should_invoice) {
- return;
- }
-
- $currency = $subscription->getCostForBillingPeriodAsCurrency(
- $last_epoch,
- $next_epoch);
- if (!$currency->isPositive()) {
- return;
- }
-
-
- $account = $subscription->getAccount();
- $merchant = $subscription->getMerchant();
-
- $viewer = PhabricatorUser::getOmnipotentUser();
-
- $product = id(new PhortuneProductQuery())
- ->setViewer($viewer)
- ->withClassAndRef('PhortuneSubscriptionProduct', $subscription->getPHID())
- ->executeOne();
-
- $cart_implementation = id(new PhortuneSubscriptionCart())
- ->setSubscription($subscription);
-
- // TODO: This isn't really ideal. It would be better to use an application
- // actor than a fairly arbitrary account member.
-
- // However, for now, some of the stuff later in the pipeline requires a
- // valid actor with a real PHID. The subscription should eventually be
- // able to create these invoices "as" the application it is acting on
- // behalf of.
-
- $members = id(new PhabricatorPeopleQuery())
- ->setViewer($viewer)
- ->withPHIDs($account->getMemberPHIDs())
- ->execute();
- $actor = null;
-
- $any_disabled = false;
- foreach ($members as $member) {
-
- // Don't act as a disabled user. If all of the users on the account are
- // disabled this means we won't charge the subscription, but that's
- // probably correct since it means no one can cancel or pay it anyway.
- if ($member->getIsDisabled()) {
- $any_disabled = true;
- continue;
- }
-
- // For now, just pick the first valid user we encounter as the actor.
- $actor = $member;
- break;
- }
-
- if (!$actor) {
- if ($any_disabled) {
- $message = pht(
- 'All members of the account ("%s") for this subscription ("%s") '.
- 'are disabled.',
- $account->getPHID(),
- $subscription->getPHID());
- } else if ($account->getMemberPHIDs()) {
- $message = pht(
- 'Unable to load any of the members of the account ("%s") for this '.
- 'subscription ("%s").',
- $account->getPHID(),
- $subscription->getPHID());
- } else {
- $message = pht(
- 'The account ("%s") for this subscription ("%s") has no '.
- 'members.',
- $account->getPHID(),
- $subscription->getPHID());
- }
- throw new PhabricatorWorkerPermanentFailureException($message);
- }
-
- $cart = $account->newCart($actor, $cart_implementation, $merchant);
-
- $purchase = $cart->newPurchase($actor, $product);
-
- $purchase
- ->setBasePriceAsCurrency($currency)
- ->setMetadataValue('subscriptionPHID', $subscription->getPHID())
- ->setMetadataValue('epoch.start', $last_epoch)
- ->setMetadataValue('epoch.end', $next_epoch)
- ->save();
-
- $cart
- ->setSubscriptionPHID($subscription->getPHID())
- ->setIsInvoice(1)
- ->save();
-
- $cart->activateCart();
-
- try {
- $issues = $this->chargeSubscription($actor, $subscription, $cart);
- } catch (Exception $ex) {
- $issues = array(
- pht(
- 'There was a technical error while trying to automatically bill '.
- 'this subscription: %s',
- $ex),
- );
- }
-
- if (!$issues) {
- // We're all done; charging the cart sends a billing email as a side
- // effect.
- return;
- }
-
- // We're shoving this through the CartEditor because it has all the logic
- // for sending mail about carts. This doesn't really affect the state of
- // the cart, but reduces the amount of code duplication.
-
- $xactions = array();
- $xactions[] = id(new PhortuneCartTransaction())
- ->setTransactionType(PhortuneCartTransaction::TYPE_INVOICED)
- ->setNewValue(true);
-
- $content_source = PhabricatorContentSource::newForSource(
- PhabricatorPhortuneContentSource::SOURCECONST);
-
- $acting_phid = id(new PhabricatorPhortuneApplication())->getPHID();
- $editor = id(new PhortuneCartEditor())
- ->setActor($viewer)
- ->setActingAsPHID($acting_phid)
- ->setContentSource($content_source)
- ->setContinueOnMissingFields(true)
- ->setInvoiceIssues($issues)
- ->applyTransactions($cart, $xactions);
- }
-
-
- private function chargeSubscription(
- PhabricatorUser $viewer,
- PhortuneSubscription $subscription,
- PhortuneCart $cart) {
-
- $issues = array();
- if (!$subscription->getDefaultPaymentMethodPHID()) {
- $issues[] = pht(
- 'There is no payment method associated with this subscription, so '.
- 'it could not be billed automatically. Add a default payment method '.
- 'to enable automatic billing.');
- return $issues;
- }
-
- $method = id(new PhortunePaymentMethodQuery())
- ->setViewer($viewer)
- ->withPHIDs(array($subscription->getDefaultPaymentMethodPHID()))
- ->withStatuses(
- array(
- PhortunePaymentMethod::STATUS_ACTIVE,
- ))
- ->executeOne();
- if (!$method) {
- $issues[] = pht(
- 'The payment method associated with this subscription is invalid '.
- 'or out of date, so it could not be automatically billed. Update '.
- 'the default payment method to enable automatic billing.');
- return $issues;
- }
-
- $provider = $method->buildPaymentProvider();
- $charge = $cart->willApplyCharge($viewer, $provider, $method);
-
- try {
- $provider->applyCharge($method, $charge);
- } catch (Exception $ex) {
- $cart->didFailCharge($charge);
- $issues[] = pht(
- 'Automatic billing failed: %s',
- $ex->getMessage());
- return $issues;
- }
-
- $cart->didApplyCharge($charge);
- }
-
-
- /**
- * Load the subscription to generate an invoice for.
- *
- * @return PhortuneSubscription The subscription to invoice.
- */
- private function loadSubscription() {
- $viewer = PhabricatorUser::getOmnipotentUser();
-
- $data = $this->getTaskData();
- $subscription_phid = idx($data, 'subscriptionPHID');
-
- $subscription = id(new PhortuneSubscriptionQuery())
- ->setViewer($viewer)
- ->withPHIDs(array($subscription_phid))
- ->executeOne();
- if (!$subscription) {
- throw new PhabricatorWorkerPermanentFailureException(
- pht(
- 'Failed to load subscription with PHID "%s".',
- $subscription_phid));
- }
-
- return $subscription;
- }
-
-
- /**
- * Get the start and end epoch timestamps for this billing period.
- *
- * @param PhortuneSubscription The subscription being billed.
- * @return pair Beginning and end of the billing range.
- */
- private function getBillingPeriodRange(PhortuneSubscription $subscription) {
- $data = $this->getTaskData();
-
- $last_epoch = idx($data, 'trigger.last-epoch');
- if (!$last_epoch) {
- // If this is the first time the subscription is firing, use the
- // creation date as the start of the billing period.
- $last_epoch = $subscription->getDateCreated();
- }
- $this_epoch = idx($data, 'trigger.this-epoch');
-
- if (!$last_epoch || !$this_epoch) {
- throw new PhabricatorWorkerPermanentFailureException(
- pht('Subscription is missing billing period information.'));
- }
-
- $period_length = ($this_epoch - $last_epoch);
- if ($period_length <= 0) {
- throw new PhabricatorWorkerPermanentFailureException(
- pht(
- 'Subscription has invalid billing period.'));
- }
-
- if (empty($data['manual'])) {
- if (PhabricatorTime::getNow() < $this_epoch) {
- throw new Exception(
- pht(
- 'Refusing to generate a subscription invoice for a billing period '.
- 'which ends in the future.'));
- }
- }
-
- return array($last_epoch, $this_epoch);
- }
-
-}
diff --git a/src/applications/phortune/xaction/PhortuneAccountBillingAddressTransaction.php b/src/applications/phortune/xaction/PhortuneAccountBillingAddressTransaction.php
deleted file mode 100644
--- a/src/applications/phortune/xaction/PhortuneAccountBillingAddressTransaction.php
+++ /dev/null
@@ -1,39 +0,0 @@
-getBillingAddress();
- }
-
- public function applyInternalEffects($object, $value) {
- $object->setBillingAddress($value);
- }
-
- public function getTitle() {
- return pht(
- '%s updated the account billing address.',
- $this->renderAuthor());
- }
-
- public function hasChangeDetailView() {
- return true;
- }
-
- public function getMailDiffSectionHeader() {
- return pht('CHANGES TO BILLING ADDRESS');
- }
-
- public function newChangeDetailView() {
- $viewer = $this->getViewer();
-
- return id(new PhabricatorApplicationTransactionTextDiffDetailView())
- ->setViewer($viewer)
- ->setOldText($this->getOldValue())
- ->setNewText($this->getNewValue());
- }
-
-}
diff --git a/src/applications/phortune/xaction/PhortuneAccountBillingNameTransaction.php b/src/applications/phortune/xaction/PhortuneAccountBillingNameTransaction.php
deleted file mode 100644
--- a/src/applications/phortune/xaction/PhortuneAccountBillingNameTransaction.php
+++ /dev/null
@@ -1,56 +0,0 @@
-getBillingName();
- }
-
- public function applyInternalEffects($object, $value) {
- $object->setBillingName($value);
- }
-
- public function getTitle() {
- $old = $this->getOldValue();
- $new = $this->getNewValue();
-
- if (strlen($old) && strlen($new)) {
- return pht(
- '%s changed the billing name for this account from %s to %s.',
- $this->renderAuthor(),
- $this->renderOldValue(),
- $this->renderNewValue());
- } else if (strlen($old)) {
- return pht(
- '%s removed the billing name for this account (was %s).',
- $this->renderAuthor(),
- $this->renderOldValue());
- } else {
- return pht(
- '%s set the billing name for this account to %s.',
- $this->renderAuthor(),
- $this->renderNewValue());
- }
- }
-
- public function validateTransactions($object, array $xactions) {
- $errors = array();
-
- $max_length = $object->getColumnMaximumByteLength('billingName');
- foreach ($xactions as $xaction) {
- $new_value = $xaction->getNewValue();
- $new_length = strlen($new_value);
- if ($new_length > $max_length) {
- $errors[] = $this->newRequiredError(
- pht('The billing name can be no longer than %s characters.',
- new PhutilNumber($max_length)));
- }
- }
-
- return $errors;
- }
-
-}
diff --git a/src/applications/phortune/xaction/PhortuneAccountEmailAddressTransaction.php b/src/applications/phortune/xaction/PhortuneAccountEmailAddressTransaction.php
deleted file mode 100644
--- a/src/applications/phortune/xaction/PhortuneAccountEmailAddressTransaction.php
+++ /dev/null
@@ -1,63 +0,0 @@
-getAddress();
- }
-
- public function applyInternalEffects($object, $value) {
- $object->setAddress($value);
- }
-
- public function validateTransactions($object, array $xactions) {
- $errors = array();
-
- if ($this->isEmptyTextTransaction($object->getAddress(), $xactions)) {
- $errors[] = $this->newRequiredError(
- pht('You must provide an email address.'));
- }
-
- $max_length = $object->getColumnMaximumByteLength('address');
- foreach ($xactions as $xaction) {
- $old_value = $xaction->getOldValue();
- $new_value = $xaction->getNewValue();
-
- $new_length = strlen($new_value);
- if ($new_length > $max_length) {
- $errors[] = $this->newInvalidError(
- pht(
- 'The address can be no longer than %s characters.',
- new PhutilNumber($max_length)),
- $xaction);
- continue;
- }
-
- if (!PhabricatorUserEmail::isValidAddress($new_value)) {
- $errors[] = $this->newInvalidError(
- PhabricatorUserEmail::describeValidAddresses(),
- $xaction);
- continue;
- }
-
- if ($new_value !== $old_value) {
- if (!$this->isNewObject()) {
- $errors[] = $this->newInvalidError(
- pht(
- 'Account email addresses can not be edited once they are '.
- 'created. To change the billing address for an account, '.
- 'disable the old address and then add a new address.'),
- $xaction);
- continue;
- }
- }
-
- }
-
- return $errors;
- }
-
-}
diff --git a/src/applications/phortune/xaction/PhortuneAccountEmailRotateTransaction.php b/src/applications/phortune/xaction/PhortuneAccountEmailRotateTransaction.php
deleted file mode 100644
--- a/src/applications/phortune/xaction/PhortuneAccountEmailRotateTransaction.php
+++ /dev/null
@@ -1,23 +0,0 @@
-setAccessKey($access_key);
- }
-
- public function getTitle() {
- return pht(
- '%s rotated the access key for this email address.',
- $this->renderAuthor());
- }
-
-}
diff --git a/src/applications/phortune/xaction/PhortuneAccountEmailStatusTransaction.php b/src/applications/phortune/xaction/PhortuneAccountEmailStatusTransaction.php
deleted file mode 100644
--- a/src/applications/phortune/xaction/PhortuneAccountEmailStatusTransaction.php
+++ /dev/null
@@ -1,23 +0,0 @@
-getStatus();
- }
-
- public function applyInternalEffects($object, $value) {
- $object->setStatus($value);
- }
-
- public function getTitle() {
- return pht(
- '%s changed the status for this address to %s.',
- $this->renderAuthor(),
- $this->renderNewValue());
- }
-
-}
diff --git a/src/applications/phortune/xaction/PhortuneAccountEmailTransactionType.php b/src/applications/phortune/xaction/PhortuneAccountEmailTransactionType.php
deleted file mode 100644
--- a/src/applications/phortune/xaction/PhortuneAccountEmailTransactionType.php
+++ /dev/null
@@ -1,4 +0,0 @@
-getName();
- }
-
- public function applyInternalEffects($object, $value) {
- $object->setName($value);
- }
-
- public function getTitle() {
- $old = $this->getOldValue();
- $new = $this->getNewValue();
-
- if (phutil_nonempty_string($old) && phutil_nonempty_string($new)) {
- return pht(
- '%s renamed this account from %s to %s.',
- $this->renderAuthor(),
- $this->renderOldValue(),
- $this->renderNewValue());
- } else {
- return pht(
- '%s created this account.',
- $this->renderAuthor());
- }
- }
-
- public function validateTransactions($object, array $xactions) {
- $errors = array();
-
- if ($this->isEmptyTextTransaction($object->getName(), $xactions)) {
- $errors[] = $this->newRequiredError(
- pht('Accounts must have a name.'));
- }
-
- $max_length = $object->getColumnMaximumByteLength('name');
- foreach ($xactions as $xaction) {
- $new_value = $xaction->getNewValue();
- $new_length = strlen($new_value);
- if ($new_length > $max_length) {
- $errors[] = $this->newRequiredError(
- pht('The name can be no longer than %s characters.',
- new PhutilNumber($max_length)));
- }
- }
-
- return $errors;
- }
-
-}
diff --git a/src/applications/phortune/xaction/PhortuneAccountTransactionType.php b/src/applications/phortune/xaction/PhortuneAccountTransactionType.php
deleted file mode 100644
--- a/src/applications/phortune/xaction/PhortuneAccountTransactionType.php
+++ /dev/null
@@ -1,4 +0,0 @@
-getContactInfo();
- }
-
- public function applyInternalEffects($object, $value) {
- $object->setContactInfo($value);
- }
-
- public function getTitle() {
- return pht(
- '%s updated the merchant contact info.',
- $this->renderAuthor());
- }
-
- public function getTitleForFeed() {
- return pht(
- '%s updated the merchant contact info for %s.',
- $this->renderAuthor(),
- $this->renderObject());
- }
-
- public function hasChangeDetailView() {
- return true;
- }
-
- public function getMailDiffSectionHeader() {
- return pht('CHANGES TO MERCHANT CONTACT INFO');
- }
-
- public function newChangeDetailView() {
- $viewer = $this->getViewer();
-
- return id(new PhabricatorApplicationTransactionTextDiffDetailView())
- ->setViewer($viewer)
- ->setOldText($this->getOldValue())
- ->setNewText($this->getNewValue());
- }
-
- public function newRemarkupChanges() {
- $changes = array();
-
- $changes[] = $this->newRemarkupChange()
- ->setOldValue($this->getOldValue())
- ->setNewValue($this->getNewValue());
-
- return $changes;
- }
-
-}
diff --git a/src/applications/phortune/xaction/PhortuneMerchantDescriptionTransaction.php b/src/applications/phortune/xaction/PhortuneMerchantDescriptionTransaction.php
deleted file mode 100644
--- a/src/applications/phortune/xaction/PhortuneMerchantDescriptionTransaction.php
+++ /dev/null
@@ -1,56 +0,0 @@
-getDescription();
- }
-
- public function applyInternalEffects($object, $value) {
- $object->setDescription($value);
- }
-
- public function getTitle() {
- return pht(
- '%s updated the merchant description.',
- $this->renderAuthor());
- }
-
- public function getTitleForFeed() {
- return pht(
- '%s updated the merchant description for %s.',
- $this->renderAuthor(),
- $this->renderObject());
- }
-
- public function hasChangeDetailView() {
- return true;
- }
-
- public function getMailDiffSectionHeader() {
- return pht('CHANGES TO MERCHANT DESCRIPTION');
- }
-
- public function newChangeDetailView() {
- $viewer = $this->getViewer();
-
- return id(new PhabricatorApplicationTransactionTextDiffDetailView())
- ->setViewer($viewer)
- ->setOldText($this->getOldValue())
- ->setNewText($this->getNewValue());
- }
-
- public function newRemarkupChanges() {
- $changes = array();
-
- $changes[] = $this->newRemarkupChange()
- ->setOldValue($this->getOldValue())
- ->setNewValue($this->getNewValue());
-
- return $changes;
- }
-
-}
diff --git a/src/applications/phortune/xaction/PhortuneMerchantInvoiceEmailTransaction.php b/src/applications/phortune/xaction/PhortuneMerchantInvoiceEmailTransaction.php
deleted file mode 100644
--- a/src/applications/phortune/xaction/PhortuneMerchantInvoiceEmailTransaction.php
+++ /dev/null
@@ -1,94 +0,0 @@
-getInvoiceEmail();
- }
-
- public function applyInternalEffects($object, $value) {
- $object->setInvoiceEmail($value);
- }
-
- public function getTitle() {
- $old = $this->getOldValue();
- $new = $this->getNewValue();
-
- if (strlen($old) && strlen($new)) {
- return pht(
- '%s updated the invoice email from %s to %s.',
- $this->renderAuthor(),
- $this->renderOldValue(),
- $this->renderNewValue());
- } else if (strlen($old)) {
- return pht(
- '%s removed the invoice email.',
- $this->renderAuthor());
- } else {
- return pht(
- '%s set the invoice email to %s.',
- $this->renderAuthor(),
- $this->renderNewValue());
- }
- }
-
- public function getTitleForFeed() {
- $old = $this->getOldValue();
- $new = $this->getNewValue();
-
- if (strlen($old) && strlen($new)) {
- return pht(
- '%s updated %s invoice email from %s to %s.',
- $this->renderAuthor(),
- $this->renderObject(),
- $this->renderOldValue(),
- $this->renderNewValue());
- } else if (strlen($old)) {
- return pht(
- '%s removed the invoice email for %s.',
- $this->renderAuthor(),
- $this->renderObject());
- } else {
- return pht(
- '%s set the invoice email for %s to %s.',
- $this->renderAuthor(),
- $this->renderObject(),
- $this->renderNewValue());
- }
- }
-
- public function getIcon() {
- return 'fa-envelope';
- }
-
- public function validateTransactions($object, array $xactions) {
- $errors = array();
-
- $max_length = $object->getColumnMaximumByteLength('invoiceEmail');
- foreach ($xactions as $xaction) {
- if (strlen($xaction->getNewValue())) {
- $email = new PhutilEmailAddress($xaction->getNewValue());
- $domain = $email->getDomainName();
- if (!strlen($domain)) {
- $errors[] = $this->newInvalidError(
- pht('Invoice email "%s" must be a valid email.',
- $xaction->getNewValue()));
- }
-
- $new_value = $xaction->getNewValue();
- $new_length = strlen($new_value);
- if ($new_length > $max_length) {
- $errors[] = $this->newInvalidError(
- pht('The email can be no longer than %s characters.',
- new PhutilNumber($max_length)));
- }
- }
- }
-
- return $errors;
- }
-
-}
diff --git a/src/applications/phortune/xaction/PhortuneMerchantInvoiceFooterTransaction.php b/src/applications/phortune/xaction/PhortuneMerchantInvoiceFooterTransaction.php
deleted file mode 100644
--- a/src/applications/phortune/xaction/PhortuneMerchantInvoiceFooterTransaction.php
+++ /dev/null
@@ -1,56 +0,0 @@
-getInvoiceFooter();
- }
-
- public function applyInternalEffects($object, $value) {
- $object->setInvoiceFooter($value);
- }
-
- public function getTitle() {
- return pht(
- '%s updated the merchant invoice footer.',
- $this->renderAuthor());
- }
-
- public function getTitleForFeed() {
- return pht(
- '%s updated the merchant invoice footer for %s.',
- $this->renderAuthor(),
- $this->renderObject());
- }
-
- public function hasChangeDetailView() {
- return true;
- }
-
- public function getMailDiffSectionHeader() {
- return pht('CHANGES TO MERCHANT INVOICE FOOTER');
- }
-
- public function newChangeDetailView() {
- $viewer = $this->getViewer();
-
- return id(new PhabricatorApplicationTransactionTextDiffDetailView())
- ->setViewer($viewer)
- ->setOldText($this->getOldValue())
- ->setNewText($this->getNewValue());
- }
-
- public function newRemarkupChanges() {
- $changes = array();
-
- $changes[] = $this->newRemarkupChange()
- ->setOldValue($this->getOldValue())
- ->setNewValue($this->getNewValue());
-
- return $changes;
- }
-
-}
diff --git a/src/applications/phortune/xaction/PhortuneMerchantNameTransaction.php b/src/applications/phortune/xaction/PhortuneMerchantNameTransaction.php
deleted file mode 100644
--- a/src/applications/phortune/xaction/PhortuneMerchantNameTransaction.php
+++ /dev/null
@@ -1,55 +0,0 @@
-getName();
- }
-
- public function applyInternalEffects($object, $value) {
- $object->setName($value);
- }
-
- public function getTitle() {
- return pht(
- '%s renamed this merchant from %s to %s.',
- $this->renderAuthor(),
- $this->renderOldValue(),
- $this->renderNewValue());
- }
-
- public function getTitleForFeed() {
- return pht(
- '%s renamed %s merchant name from %s to %s.',
- $this->renderAuthor(),
- $this->renderObject(),
- $this->renderOldValue(),
- $this->renderNewValue());
- }
-
- public function validateTransactions($object, array $xactions) {
- $errors = array();
-
- if ($this->isEmptyTextTransaction($object->getName(), $xactions)) {
- $errors[] = $this->newRequiredError(
- pht('Merchants must have a name.'));
- }
-
- $max_length = $object->getColumnMaximumByteLength('name');
- foreach ($xactions as $xaction) {
- $new_value = $xaction->getNewValue();
- $new_length = strlen($new_value);
- if ($new_length > $max_length) {
- $errors[] = $this->newInvalidError(
- pht('The name can be no longer than %s characters.',
- new PhutilNumber($max_length)));
- }
- }
-
- return $errors;
- }
-
-}
diff --git a/src/applications/phortune/xaction/PhortuneMerchantPictureTransaction.php b/src/applications/phortune/xaction/PhortuneMerchantPictureTransaction.php
deleted file mode 100644
--- a/src/applications/phortune/xaction/PhortuneMerchantPictureTransaction.php
+++ /dev/null
@@ -1,33 +0,0 @@
-getProfileImagePHID();
- }
-
- public function applyInternalEffects($object, $value) {
- $object->setProfileImagePHID($value);
- }
-
- public function getTitle() {
- return pht(
- '%s updated the picture.',
- $this->renderAuthor());
- }
-
- public function getTitleForFeed() {
- return pht(
- '%s updated the picture for merchant %s.',
- $this->renderAuthor(),
- $this->renderObject());
- }
-
- public function getIcon() {
- return 'fa-camera-retro';
- }
-
-}
diff --git a/src/applications/phortune/xaction/PhortuneMerchantTransactionType.php b/src/applications/phortune/xaction/PhortuneMerchantTransactionType.php
deleted file mode 100644
--- a/src/applications/phortune/xaction/PhortuneMerchantTransactionType.php
+++ /dev/null
@@ -1,4 +0,0 @@
-getName();
- }
-
- public function applyInternalEffects($object, $value) {
- $object->setName($value);
- }
-
- public function getTitle() {
- $old_value = $this->getOldValue();
- $new_value = $this->getNewValue();
-
- if (strlen($old_value) && strlen($new_value)) {
- return pht(
- '%s renamed this payment method from %s to %s.',
- $this->renderAuthor(),
- $this->renderOldValue(),
- $this->renderNewValue());
- } else if (strlen($new_value)) {
- return pht(
- '%s set the name of this payment method to %s.',
- $this->renderAuthor(),
- $this->renderNewValue());
- } else {
- return pht(
- '%s removed the name of this payment method (was: %s).',
- $this->renderAuthor(),
- $this->renderOldValue());
- }
- }
-
-}
diff --git a/src/applications/phortune/xaction/paymentmethod/PhortunePaymentMethodStatusTransaction.php b/src/applications/phortune/xaction/paymentmethod/PhortunePaymentMethodStatusTransaction.php
deleted file mode 100644
--- a/src/applications/phortune/xaction/paymentmethod/PhortunePaymentMethodStatusTransaction.php
+++ /dev/null
@@ -1,22 +0,0 @@
-getStatus();
- }
-
- public function applyInternalEffects($object, $value) {
- $object->setStatus($value);
- }
-
- public function getTitle() {
- return pht(
- '%s changed the status of this payment method.',
- $this->renderAuthor());
- }
-
-}
diff --git a/src/applications/phortune/xaction/paymentmethod/PhortunePaymentMethodTransactionType.php b/src/applications/phortune/xaction/paymentmethod/PhortunePaymentMethodTransactionType.php
deleted file mode 100644
--- a/src/applications/phortune/xaction/paymentmethod/PhortunePaymentMethodTransactionType.php
+++ /dev/null
@@ -1,4 +0,0 @@
-getDefaultPaymentMethodPHID();
- }
-
- public function applyInternalEffects($object, $value) {
- $object->setDefaultPaymentMethodPHID($value);
- }
-
- public function getTitle() {
- $old_phid = $this->getOldValue();
- $new_phid = $this->getNewValue();
-
- if ($old_phid && $new_phid) {
- return pht(
- '%s changed the automatic payment method for this subscription.',
- $this->renderAuthor());
- } else if ($new_phid) {
- return pht(
- '%s configured an automatic payment method for this subscription.',
- $this->renderAuthor());
- } else {
- return pht(
- '%s stopped automatic payments for this subscription.',
- $this->renderAuthor());
- }
- }
-
- public function shouldTryMFA(
- $object,
- PhabricatorApplicationTransaction $xaction) {
- return true;
- }
-
-}
diff --git a/src/applications/phortune/xaction/subscription/PhortuneSubscriptionTransactionType.php b/src/applications/phortune/xaction/subscription/PhortuneSubscriptionTransactionType.php
deleted file mode 100644
--- a/src/applications/phortune/xaction/subscription/PhortuneSubscriptionTransactionType.php
+++ /dev/null
@@ -1,4 +0,0 @@
-setIcon('fa-heart')
- ->setHeader(pht('Funder'))
+ ->setHeader(pht('Supporter'))
->setQuality(PhabricatorBadgesQuality::UNCOMMON);
$badges3[] = id(new PHUIBadgeMiniView())
diff --git a/src/applications/uiexample/examples/PhabricatorMultiColumnUIExample.php b/src/applications/uiexample/examples/PhabricatorMultiColumnUIExample.php
--- a/src/applications/uiexample/examples/PhabricatorMultiColumnUIExample.php
+++ b/src/applications/uiexample/examples/PhabricatorMultiColumnUIExample.php
@@ -100,69 +100,6 @@
->setFluidLayout(true)
->setBorder(true);
- $shipping = id(new PHUIFormLayoutView())
- ->setUser($user)
- ->setFullWidth(true)
- ->appendChild(
- id(new AphrontFormTextControl())
- ->setLabel(pht('Name'))
- ->setDisableAutocomplete(true)
- ->setSigil('name-input'))
- ->appendChild(
- id(new AphrontFormTextControl())
- ->setLabel(pht('Address'))
- ->setDisableAutocomplete(true)
- ->setSigil('address-input'))
- ->appendChild(
- id(new AphrontFormTextControl())
- ->setLabel(pht('City/State'))
- ->setDisableAutocomplete(true)
- ->setSigil('city-input'))
- ->appendChild(
- id(new AphrontFormTextControl())
- ->setLabel(pht('Country'))
- ->setDisableAutocomplete(true)
- ->setSigil('country-input'))
- ->appendChild(
- id(new AphrontFormTextControl())
- ->setLabel(pht('Postal Code'))
- ->setDisableAutocomplete(true)
- ->setSigil('postal-input'));
-
- $cc = id(new PHUIFormLayoutView())
- ->setUser($user)
- ->setFullWidth(true)
- ->appendChild(
- id(new AphrontFormTextControl())
- ->setLabel(pht('Card Number'))
- ->setDisableAutocomplete(true)
- ->setSigil('number-input')
- ->setError(''))
- ->appendChild(
- id(new AphrontFormTextControl())
- ->setLabel(pht('CVC'))
- ->setDisableAutocomplete(true)
- ->setSigil('cvc-input')
- ->setError(''))
- ->appendChild(
- id(new PhortuneMonthYearExpiryControl())
- ->setLabel(pht('Expiration'))
- ->setUser($user)
- ->setError(''));
-
- $shipping_title = pht('Shipping Address');
- $billing_title = pht('Billing Address');
- $cc_title = pht('Payment Information');
-
- $head6 = id(new PHUIHeaderView())
- ->setHeader(pht("Let's Go Shopping"));
- $layout6 = id(new AphrontMultiColumnView())
- ->addColumn(hsprintf('%s
%s', $shipping_title, $shipping))
- ->addColumn(hsprintf('%s
%s', $billing_title, $shipping))
- ->addColumn(hsprintf('%s
%s', $cc_title, $cc))
- ->setFluidLayout(true)
- ->setBorder(true);
-
$wrap1 = phutil_tag(
'div',
array(
@@ -198,13 +135,6 @@
),
$layout5);
- $wrap6 = phutil_tag(
- 'div',
- array(
- 'class' => 'ml',
- ),
- $layout6);
-
return phutil_tag(
'div',
array(),
@@ -219,8 +149,6 @@
$wrap4,
$head5,
$wrap5,
- $head6,
- $wrap6,
));
}
}
diff --git a/src/docs/book/phorge.book b/src/docs/book/phorge.book
--- a/src/docs/book/phorge.book
+++ b/src/docs/book/phorge.book
@@ -140,10 +140,6 @@
"name": "Flags",
"include": "(^src/applications/flag/)"
},
- "fund": {
- "name": "Fund",
- "include": "(^src/applications/fund/)"
- },
"harbormaster": {
"name": "Harbormaster",
"include": "(^src/applications/harbormaster/)"
@@ -232,10 +228,6 @@
"name": "Pholio",
"include": "(^src/applications/pholio/)"
},
- "phortune": {
- "name": "Phortune",
- "include": "(^src/applications/phortune/)"
- },
"phpast": {
"name": "PHPAST",
"include": "(^src/applications/phpast/)"
diff --git a/src/infrastructure/storage/patch/PhabricatorBuiltinPatchList.php b/src/infrastructure/storage/patch/PhabricatorBuiltinPatchList.php
--- a/src/infrastructure/storage/patch/PhabricatorBuiltinPatchList.php
+++ b/src/infrastructure/storage/patch/PhabricatorBuiltinPatchList.php
@@ -93,7 +93,6 @@
'db.config' => array(),
'db.token' => array(),
'db.phlux' => array(),
- 'db.phortune' => array(),
'db.phrequent' => array(),
'db.diviner' => array(),
'db.auth' => array(),
@@ -104,7 +103,6 @@
'db.passphrase' => array(),
'db.dashboard' => array(),
'db.system' => array(),
- 'db.fund' => array(),
'db.almanac' => array(),
'db.multimeter' => array(),
'db.spaces' => array(),
@@ -618,16 +616,12 @@
'20130317.phrictionedge.sql' => array(),
'20130321.token.sql' => array(),
'20130310.xactionmeta.sql' => array(),
- '20130322.phortune.sql' => array(),
- '20130323.phortunepayment.sql' => array(),
- '20130324.phortuneproduct.sql' => array(),
'20130330.phrequent.sql' => array(),
'20130403.conpherencecache.sql' => array(),
'20130403.conpherencecachemig.php' => array(),
'20130409.commitdrev.php' => array(),
'20130417.externalaccount.sql' => array(),
'20130423.updateexternalaccount.sql' => array(),
- '20130423.phortunepaymentrevised.sql' => array(),
'20130423.conpherenceindices.sql' => array(),
'20130426.search_savedquery.sql' => array(),
'20130502.countdownrevamp1.sql' => array(),
diff --git a/src/view/page/PhabricatorStandardPageView.php b/src/view/page/PhabricatorStandardPageView.php
--- a/src/view/page/PhabricatorStandardPageView.php
+++ b/src/view/page/PhabricatorStandardPageView.php
@@ -857,8 +857,8 @@
$blacklist[] = $application->getQuicksandURIPatternBlacklist();
}
- // See T4340. Currently, Phortune and Auth both require pulling in external
- // Javascript (for Stripe card management and Recaptcha, respectively).
+ // See T4340. Currently, Auth requires pulling in external
+ // Javascript (for Recaptcha).
// This can put us in a position where the user loads a page with a
// restrictive Content-Security-Policy, then uses Quicksand to navigate to
// a page which needs to load external scripts. For now, just blacklist
@@ -866,7 +866,6 @@
// significant by doing so.
$blacklist[] = array(
- '/phortune/.*',
'/auth/.*',
);
diff --git a/webroot/rsrc/css/application/phortune/phortune-credit-card-form.css b/webroot/rsrc/css/application/phortune/phortune-credit-card-form.css
deleted file mode 100644
--- a/webroot/rsrc/css/application/phortune/phortune-credit-card-form.css
+++ /dev/null
@@ -1,7 +0,0 @@
-/**
- * @provides phortune-credit-card-form-css
- */
-
-.phortune-security-assurance {
- color: {$lightgreytext};
-}
diff --git a/webroot/rsrc/css/application/phortune/phortune-invoice.css b/webroot/rsrc/css/application/phortune/phortune-invoice.css
deleted file mode 100644
--- a/webroot/rsrc/css/application/phortune/phortune-invoice.css
+++ /dev/null
@@ -1,75 +0,0 @@
-/**
- * @provides phortune-invoice-css
- */
-
-.phortune-invoice-view {
- max-width: 800px;
- margin: 16px auto;
- background: #fff;
-}
-
-.phortune-invoice-view .phabricator-main-menu {
- display: none;
-}
-
-.phortune-invoice-view .phabricator-standard-page-footer {
- display: none;
-}
-
-.device-desktop .phortune-invoice-view .phui-property-list-key {
- width: 16%;
-}
-
-.device-desktop .phortune-invoice-view .phui-property-list-value {
- width: 80%;
-}
-
-.phortune-invoice-logo {
- margin-bottom: 24px;
-}
-
-.phortune-invoice-logo img {
- margin: 0 auto;
-}
-
-.phortune-invoice-contact {
- margin-bottom: 32px;
-}
-
-.phortune-invoice-contact td {
- padding: 4px 16px;
-}
-
-.phortune-invoice-to {
- border-right: 1px solid {$lightblueborder};
-}
-
-.phortune-mini-header {
- color: {$lightbluetext};
- font-weight: bold;
- text-transform: uppercase;
- margin-bottom: 4px;
- letter-spacing: 0.25em;
-}
-
-.phortune-invoice-status {
- margin-bottom: 24px;
-}
-
-.phortune-invoice-status .phui-info-view {
- margin: 0;
-}
-
-.phortune-invoice-view .phui-box.phui-object-box {
- margin-bottom: 24px;
-}
-
-.phortune-invoice-footer {
- color: {$lightgreytext};
- margin: 48px 0 64px;
- text-align: center;
-}
-
-.phortune-invoice-footer strong {
- color: #000;
-}
diff --git a/webroot/rsrc/css/application/phortune/phortune.css b/webroot/rsrc/css/application/phortune/phortune.css
deleted file mode 100644
--- a/webroot/rsrc/css/application/phortune/phortune.css
+++ /dev/null
@@ -1,27 +0,0 @@
-/**
- * @provides phortune-css
- */
-
-.phortune-payment-icon {
- width: 34px;
- height: 34px;
-}
-
-.phortune-payment-onetime-list {
- width: 280px;
-}
-
-.phortune-payment-onetime-list button {
- margin: 0 0 8px 0;
- width: 100%;
-}
-
-.printable.phortune-cart-page .phui-two-column-view .phui-two-column-content
- .phui-main-column {
- width: auto;
-}
-
-.printable.phortune-cart-page .phui-two-column-view .phui-two-column-content
- .phui-side-column {
- display: none;
-}
diff --git a/webroot/rsrc/js/application/phortune/behavior-stripe-payment-form.js b/webroot/rsrc/js/application/phortune/behavior-stripe-payment-form.js
deleted file mode 100644
--- a/webroot/rsrc/js/application/phortune/behavior-stripe-payment-form.js
+++ /dev/null
@@ -1,57 +0,0 @@
-/**
- * @provides javelin-behavior-stripe-payment-form
- * @requires javelin-behavior
- * javelin-dom
- * phortune-credit-card-form
- */
-
-JX.behavior('stripe-payment-form', function(config) {
-
- function onsubmit(card_data) {
- var errors = [];
-
- Stripe.setPublishableKey(config.stripePublishableKey);
-
- if (!Stripe.validateCardNumber(card_data.number)) {
- errors.push('cc:invalid:number');
- }
-
- if (!Stripe.validateCVC(card_data.cvc)) {
- errors.push('cc:invalid:cvc');
- }
-
- if (!Stripe.validateExpiry(card_data.month, card_data.year)) {
- errors.push('cc:invalid:expiry');
- }
-
- if (errors.length) {
- ccform.submitForm(errors);
- return;
- }
-
- var data = {
- number: card_data.number,
- cvc: card_data.cvc,
- exp_month: card_data.month,
- exp_year: card_data.year
- };
-
- Stripe.createToken(data, onresponse);
- }
-
- function onresponse(status, response) {
- var errors = [];
- var token = null;
- if (status != 200) {
- errors.push('cc:stripe:http:' + status);
- } else if (response.error) {
- errors.push('cc:stripe:error:' + response.error.type);
- } else {
- token = response.id;
- }
-
- ccform.submitForm(errors, {stripeCardToken: token});
- }
-
- var ccform = new JX.PhortuneCreditCardForm(JX.$(config.formID), onsubmit);
-});
diff --git a/webroot/rsrc/js/application/phortune/behavior-test-payment-form.js b/webroot/rsrc/js/application/phortune/behavior-test-payment-form.js
deleted file mode 100644
--- a/webroot/rsrc/js/application/phortune/behavior-test-payment-form.js
+++ /dev/null
@@ -1,18 +0,0 @@
-/**
- * @provides javelin-behavior-test-payment-form
- * @requires javelin-behavior
- * javelin-dom
- * phortune-credit-card-form
- */
-
-JX.behavior('test-payment-form', function(config) {
- function onsubmit() {
- onresponse();
- }
-
- function onresponse() {
- ccform.submitForm([], {test: true});
- }
-
- var ccform = new JX.PhortuneCreditCardForm(JX.$(config.formID), onsubmit);
-});
diff --git a/webroot/rsrc/js/application/phortune/phortune-credit-card-form.js b/webroot/rsrc/js/application/phortune/phortune-credit-card-form.js
deleted file mode 100644
--- a/webroot/rsrc/js/application/phortune/phortune-credit-card-form.js
+++ /dev/null
@@ -1,59 +0,0 @@
-/**
- * @provides phortune-credit-card-form
- * @requires javelin-install
- * javelin-dom
- * javelin-json
- * javelin-workflow
- * javelin-util
- * @javelin
- */
-
-/**
- * Simple wrapper for credit card forms generated by `PhortuneCreditCardForm`.
- *
- * To construct an object for a form:
- *
- * new JX.PhortuneCreditCardForm(form_root_node, submit_callback);
- *
- */
-JX.install('PhortuneCreditCardForm', {
- construct : function(root, onsubmit) {
- this._root = root;
- this._submitCallback = onsubmit;
- JX.DOM.listen(root, 'submit', null, JX.bind(this, this._onsubmit));
- },
-
- members : {
- _root : null,
- _submitCallback : null,
-
- _getCardData : function() {
- var root = this._root;
-
- return {
- number : JX.DOM.find(root, 'input', 'number-input').value,
- cvc : JX.DOM.find(root, 'input', 'cvc-input' ).value,
- month : JX.DOM.find(root, 'select', 'month-input' ).value,
- year : JX.DOM.find(root, 'select', 'year-input' ).value
- };
- },
-
- submitForm : function(errors, token) {
- var params = {
- errors: JX.JSON.stringify(errors),
- token: JX.JSON.stringify(token || {})
- };
-
- JX.Workflow
- .newFromForm(this._root, params)
- .start();
- },
-
- _onsubmit : function(e) {
- e.kill();
- this._submitCallback(this._getCardData());
- }
-
- }
-
-});