', $attempt );
- }
}
// Deactivate the plugin
diff --git a/includes/functions-shorturls.php b/includes/functions-shorturls.php
index 93dffb7..3fa74d9 100644
--- a/includes/functions-shorturls.php
+++ b/includes/functions-shorturls.php
@@ -26,9 +26,10 @@
* @param string $url URL to shorten
* @param string $keyword optional "keyword"
* @param string $title option title
+ * @param int $row_id used to form unique IDs in the generated HTML
* @return array array with error/success state and short URL information
*/
-function yourls_add_new_link( $url, $keyword = '', $title = '' ) {
+function yourls_add_new_link( $url, $keyword = '', $title = '', $row_id = 1 ) {
// Allow plugins to short-circuit the whole function
$pre = yourls_apply_filter( 'shunt_add_new_link', false, $url, $keyword, $title );
if ( false !== $pre ) {
@@ -140,7 +141,7 @@ function yourls_add_new_link( $url, $keyword = '', $title = '' ) {
$return['status'] = 'success';
$return['message'] = /* //translators: eg "http://someurl/ added to DB" */ yourls_s( '%s added to database', yourls_trim_long_string( $url ) );
$return['title'] = $title;
- $return['html'] = yourls_table_add_row( $keyword, $url, $title, $ip, 0, time() );
+ $return['html'] = yourls_table_add_row( $keyword, $url, $title, $ip, 0, time(), $row_id );
$return['shorturl'] = yourls_link($keyword);
$return['statusCode'] = 200; // 200 OK
} else {
diff --git a/includes/functions-upgrade.php b/includes/functions-upgrade.php
index 4b48145..af8c284 100644
--- a/includes/functions-upgrade.php
+++ b/includes/functions-upgrade.php
@@ -5,7 +5,7 @@
*
* Note to devs : prefer update function names using the SQL version, eg yourls_update_to_506(),
* rather than using the YOURLS version number, eg yourls_update_to_18(). This is to allow having
- * multiple SQL update during the dev cycle of the same Y0URLS version
+ * multiple SQL update during the dev cycle of the same YOURLS version
*
* @param string|int $step
* @param string $oldver
@@ -406,7 +406,7 @@ function yourls_update_table_to_14() {
if( $count != $queries ) {
$success = false;
$num = $count - $queries;
- echo "
$num error(s) occured while updating the URL table :(
";
+ echo "
$num error(s) occurred while updating the URL table :(
";
}
if ( $count == $chunk ) {
diff --git a/includes/functions.php b/includes/functions.php
index 2f6725c..138746a 100644
--- a/includes/functions.php
+++ b/includes/functions.php
@@ -264,8 +264,7 @@ function yourls_redirect( $location, $code = 301 ) {
* Redirect to an existing short URL
*
* Redirect client to an existing short URL (no check performed) and execute misc tasks: update
- * clicks for short URL, update logs, and send a nocache header to prevent bots indexing short
- * URLS (see #2202)
+ * clicks for short URL, update logs, and send an X-Robots-Tag header to control indexing of a page.
*
* @since 1.7.3
* @param string $url
@@ -281,16 +280,36 @@ function yourls_redirect_shorturl($url, $keyword) {
// Update detailed log for stats
yourls_log_redirect( $keyword );
- // Tell (Google)bots not to index this short URL, see #2202
- if ( !headers_sent() ) {
- header( "X-Robots-Tag: noindex", true );
- }
+ // Send an X-Robots-Tag header
+ yourls_robots_tag_header();
yourls_redirect( $url, 301 );
}
/**
- * Send headers to explicitely tell browser not to cache content or redirection
+ * Send an X-Robots-Tag header. See #3486
+ *
+ * @since 1.9.2
+ * @return void
+ */
+function yourls_robots_tag_header() {
+ // Allow plugins to short-circuit the whole function
+ $pre = yourls_apply_filter( 'shunt_robots_tag_header', false );
+ if ( false !== $pre ) {
+ return $pre;
+ }
+
+ // By default, we're sending a 'noindex' header
+ $tag = yourls_apply_filter( 'robots_tag_header', 'noindex' );
+ $replace = yourls_apply_filter( 'robots_tag_header_replace', true );
+ if ( !headers_sent() ) {
+ header( "X-Robots-Tag: $tag", $replace );
+ }
+}
+
+
+/**
+ * Send headers to explicitly tell browser not to cache content or redirection
*
* @since 1.7.10
* @return void
@@ -1014,6 +1033,10 @@ function yourls_get_request($yourls_site = '', $uri = '') {
/**
* Fix $_SERVER['REQUEST_URI'] variable for various setups. Stolen from WP.
*
+ * We also strip $_COOKIE from $_REQUEST to allow our lazy using $_REQUEST without 3rd party cookie interfering.
+ * See #3383 for explanation.
+ *
+ * @since 1.5.1
* @return void
*/
function yourls_fix_request_uri() {
@@ -1024,6 +1047,9 @@ function yourls_fix_request_uri() {
];
$_SERVER = array_merge( $default_server_values, $_SERVER );
+ // Make $_REQUEST with only $_GET and $_POST, not $_COOKIE. See #3383.
+ $_REQUEST = array_merge( $_GET, $_POST );
+
// Fix for IIS when running with PHP ISAPI
if ( empty( $_SERVER[ 'REQUEST_URI' ] ) || ( php_sapi_name() != 'cgi-fcgi' && preg_match( '/^Microsoft-IIS\//', $_SERVER[ 'SERVER_SOFTWARE' ] ) ) ) {
@@ -1065,30 +1091,32 @@ function yourls_fix_request_uri() {
* @return void
*/
function yourls_check_maintenance_mode() {
- $file = YOURLS_ABSPATH . '/.maintenance' ;
+ $dot_file = YOURLS_ABSPATH . '/.maintenance' ;
- if ( !file_exists( $file ) || yourls_is_upgrading() || yourls_is_installing() ) {
+ if ( !file_exists( $dot_file ) || yourls_is_upgrading() || yourls_is_installing() ) {
return;
}
global $maintenance_start;
- include_once( $file );
+ yourls_include_file_sandbox( $dot_file );
// If the $maintenance_start timestamp is older than 10 minutes, don't die.
if ( ( time() - $maintenance_start ) >= 600 ) {
return;
}
// Use any /user/maintenance.php file
- if( file_exists( YOURLS_USERDIR.'/maintenance.php' ) ) {
- include_once( YOURLS_USERDIR.'/maintenance.php' );
- die();
- }
+ $file = YOURLS_USERDIR . '/maintenance.php';
+ if(file_exists($file)) {
+ if(yourls_include_file_sandbox( $file ) == true) {
+ die();
+ }
+ }
// Or use the default messages
- $title = yourls__( 'Service temporarily unavailable' );
- $message = yourls__( 'Our service is currently undergoing scheduled maintenance.' ) . "
\n
" .
- yourls__( 'Things should not last very long, thank you for your patience and please excuse the inconvenience' );
- yourls_die( $message, $title , 503 );
+ $title = yourls__('Service temporarily unavailable');
+ $message = yourls__('Our service is currently undergoing scheduled maintenance.') . "
\n
" .
+ yourls__('Things should not last very long, thank you for your patience and please excuse the inconvenience');
+ yourls_die( $message, $title, 503 );
}
/**
@@ -1271,3 +1299,26 @@ function yourls_tell_if_new_version() {
yourls_debug_log( 'Check for new version: '.( yourls_maybe_check_core_version() ? 'yes' : 'no' ) );
yourls_new_core_version_notice(YOURLS_VERSION);
}
+
+/**
+ * File include sandbox
+ *
+ * Attempt to include a PHP file, fail with an error message if the file isn't valid PHP code.
+ * This function does not check first if the file exists : depending on use case, you may check first.
+ *
+ * @since 1.9.2
+ * @param string $file filename (full path)
+ * @return string|bool string if error, true if success
+ */
+function yourls_include_file_sandbox($file) {
+ try {
+ if (is_readable( $file )) {
+ include_once $file;
+ yourls_debug_log("loaded $file");
+ return true;
+ }
+ } catch ( \Throwable $e ) {
+ yourls_debug_log("could not load $file");
+ return sprintf("%s (%s : %s)", $e->getMessage() , $e->getFile() , $e->getLine() );
+ }
+}
diff --git a/includes/geo/COPYRIGHT.txt b/includes/geo/COPYRIGHT.txt
index 1f9e44a..6a82b38 100644
--- a/includes/geo/COPYRIGHT.txt
+++ b/includes/geo/COPYRIGHT.txt
@@ -1 +1 @@
-Database and Contents Copyright (c) 2022 MaxMind, Inc.
+Database and Contents Copyright (c) 2023 MaxMind, Inc.
diff --git a/includes/geo/GeoLite2-Country.mmdb b/includes/geo/GeoLite2-Country.mmdb
index 111261e..c818ebc 100644
Binary files a/includes/geo/GeoLite2-Country.mmdb and b/includes/geo/GeoLite2-Country.mmdb differ
diff --git a/includes/vendor/autoload.php b/includes/vendor/autoload.php
index 5659614..4767bb2 100644
--- a/includes/vendor/autoload.php
+++ b/includes/vendor/autoload.php
@@ -3,8 +3,21 @@
// autoload.php @generated by Composer
if (PHP_VERSION_ID < 50600) {
- echo 'Composer 2.3.0 dropped support for autoloading on PHP <5.6 and you are running '.PHP_VERSION.', please upgrade PHP or use Composer 2.2 LTS via "composer self-update --2.2". Aborting.'.PHP_EOL;
- exit(1);
+ if (!headers_sent()) {
+ header('HTTP/1.1 500 Internal Server Error');
+ }
+ $err = 'Composer 2.3.0 dropped support for autoloading on PHP <5.6 and you are running '.PHP_VERSION.', please upgrade PHP or use Composer 2.2 LTS via "composer self-update --2.2". Aborting.'.PHP_EOL;
+ if (!ini_get('display_errors')) {
+ if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') {
+ fwrite(STDERR, $err);
+ } elseif (!headers_sent()) {
+ echo $err;
+ }
+ }
+ trigger_error(
+ $err,
+ E_USER_ERROR
+ );
}
require_once __DIR__ . '/composer/autoload_real.php';
diff --git a/includes/vendor/composer/InstalledVersions.php b/includes/vendor/composer/InstalledVersions.php
index 41bc143..c6b54af 100644
--- a/includes/vendor/composer/InstalledVersions.php
+++ b/includes/vendor/composer/InstalledVersions.php
@@ -28,7 +28,7 @@ class InstalledVersions
{
/**
* @var mixed[]|null
- * @psalm-var array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array}|array{}|null
+ * @psalm-var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array}|array{}|null
*/
private static $installed;
@@ -39,7 +39,7 @@ class InstalledVersions
/**
* @var array[]
- * @psalm-var array}>
+ * @psalm-var array}>
*/
private static $installedByVendor = array();
@@ -243,7 +243,7 @@ class InstalledVersions
/**
* @return array
- * @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}
+ * @psalm-return array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}
*/
public static function getRootPackage()
{
@@ -257,7 +257,7 @@ class InstalledVersions
*
* @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect.
* @return array[]
- * @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array}
+ * @psalm-return array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array}
*/
public static function getRawData()
{
@@ -280,7 +280,7 @@ class InstalledVersions
* Returns the raw data of all installed.php which are currently loaded for custom implementations
*
* @return array[]
- * @psalm-return list}>
+ * @psalm-return list}>
*/
public static function getAllRawData()
{
@@ -303,7 +303,7 @@ class InstalledVersions
* @param array[] $data A vendor/composer/installed.php data set
* @return void
*
- * @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array} $data
+ * @psalm-param array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array} $data
*/
public static function reload($data)
{
@@ -313,7 +313,7 @@ class InstalledVersions
/**
* @return array[]
- * @psalm-return list}>
+ * @psalm-return list}>
*/
private static function getInstalled()
{
diff --git a/includes/vendor/composer/ca-bundle/res/cacert.pem b/includes/vendor/composer/ca-bundle/res/cacert.pem
index 0bf312f..0c69f9f 100644
--- a/includes/vendor/composer/ca-bundle/res/cacert.pem
+++ b/includes/vendor/composer/ca-bundle/res/cacert.pem
@@ -1,7 +1,7 @@
##
## Bundle of CA Root Certificates
##
-## Certificate data from Mozilla as of: Tue Oct 26 03:12:05 2021 GMT
+## Certificate data from Mozilla as of: Tue Oct 11 03:12:05 2022 GMT
##
## This is a bundle of X.509 certificates of public Certificate Authorities
## (CA). These were automatically extracted from Mozilla's root certificates
@@ -13,8 +13,8 @@
## an Apache+mod_ssl webserver for SSL client authentication.
## Just configure this file as the SSLCACertificateFile.
##
-## Conversion done with mk-ca-bundle.pl version 1.28.
-## SHA256: bb36818a81feaa4cca61101e6d6276cd09e972efcb08112dfed846918ca41d7f
+## Conversion done with mk-ca-bundle.pl version 1.29.
+## SHA256: 3ff8bd209b5f2e739b9f2b96eacb694a774114685b02978257824f37ff528f71
##
@@ -39,28 +39,6 @@ hm4qxFYxldBniYUr+WymXUadDKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveC
X4XSQRjbgbMEHMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A==
-----END CERTIFICATE-----
-GlobalSign Root CA - R2
-=======================
------BEGIN CERTIFICATE-----
-MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4GA1UECxMXR2xv
-YmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh
-bFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT
-aWduIFJvb3QgQ0EgLSBSMjETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln
-bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6
-ErPLv4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8eoLrvozp
-s6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklqtTleiDTsvHgMCJiEbKjN
-S7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzdC9XZzPnqJworc5HGnRusyMvo4KD0L5CL
-TfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pazq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6C
-ygPCm48CAwEAAaOBnDCBmTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E
-FgQUm+IHV2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5nbG9i
-YWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG3lm0mi3f3BmGLjAN
-BgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4GsJ0/WwbgcQ3izDJr86iw8bmEbTUsp
-9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu
-01yiPqFbQfXf5WRDLenVOavSot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG7
-9G+dwfCMNYxdAfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7
-TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg==
------END CERTIFICATE-----
-
Entrust.net Premium 2048 Secure Server CA
=========================================
-----BEGIN CERTIFICATE-----
@@ -573,28 +551,6 @@ PBS1xp81HlDQwY9qcEQCYsuuHWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY
WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg==
-----END CERTIFICATE-----
-Cybertrust Global Root
-======================
------BEGIN CERTIFICATE-----
-MIIDoTCCAomgAwIBAgILBAAAAAABD4WqLUgwDQYJKoZIhvcNAQEFBQAwOzEYMBYGA1UEChMPQ3li
-ZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2JhbCBSb290MB4XDTA2MTIxNTA4
-MDAwMFoXDTIxMTIxNTA4MDAwMFowOzEYMBYGA1UEChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQD
-ExZDeWJlcnRydXN0IEdsb2JhbCBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
-+Mi8vRRQZhP/8NN57CPytxrHjoXxEnOmGaoQ25yiZXRadz5RfVb23CO21O1fWLE3TdVJDm71aofW
-0ozSJ8bi/zafmGWgE07GKmSb1ZASzxQG9Dvj1Ci+6A74q05IlG2OlTEQXO2iLb3VOm2yHLtgwEZL
-AfVJrn5GitB0jaEMAs7u/OePuGtm839EAL9mJRQr3RAwHQeWP032a7iPt3sMpTjr3kfb1V05/Iin
-89cqdPHoWqI7n1C6poxFNcJQZZXcY4Lv3b93TZxiyWNzFtApD0mpSPCzqrdsxacwOUBdrsTiXSZT
-8M4cIwhhqJQZugRiQOwfOHB3EgZxpzAYXSUnpQIDAQABo4GlMIGiMA4GA1UdDwEB/wQEAwIBBjAP
-BgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBS2CHsNesysIEyGVjJez6tuhS1wVzA/BgNVHR8EODA2
-MDSgMqAwhi5odHRwOi8vd3d3Mi5wdWJsaWMtdHJ1c3QuY29tL2NybC9jdC9jdHJvb3QuY3JsMB8G
-A1UdIwQYMBaAFLYIew16zKwgTIZWMl7Pq26FLXBXMA0GCSqGSIb3DQEBBQUAA4IBAQBW7wojoFRO
-lZfJ+InaRcHUowAl9B8Tq7ejhVhpwjCt2BWKLePJzYFa+HMjWqd8BfP9IjsO0QbE2zZMcwSO5bAi
-5MXzLqXZI+O4Tkogp24CJJ8iYGd7ix1yCcUxXOl5n4BHPa2hCwcUPUf/A2kaDAtE52Mlp3+yybh2
-hO0j9n0Hq0V+09+zv+mKts2oomcrUtW3ZfA5TGOgkXmTUg9U3YO7n9GPp1Nzw8v/MOx8BLjYRB+T
-X3EJIrduPuocA06dGiBh+4E37F78CkWr1+cXVdCg6mCbpvbjjFspwgZgFJ0tl0ypkxWdYcQBX0jW
-WL1WMRJOEcgh4LMRkWXbtKaIOM5V
------END CERTIFICATE-----
-
ePKI Root Certification Authority
=================================
-----BEGIN CERTIFICATE-----
@@ -1037,60 +993,6 @@ tnRGEmyR7jTV7JqR50S+kDFy1UkC9gLl9B/rfNmWVan/7Ir5mUf/NVoCqgTLiluHcSmRvaS0eg29
mvVXIwAHIRc/SjnRBUkLp7Y3gaVdjKozXoEofKd9J+sAro03
-----END CERTIFICATE-----
-EC-ACC
-======
------BEGIN CERTIFICATE-----
-MIIFVjCCBD6gAwIBAgIQ7is969Qh3hSoYqwE893EATANBgkqhkiG9w0BAQUFADCB8zELMAkGA1UE
-BhMCRVMxOzA5BgNVBAoTMkFnZW5jaWEgQ2F0YWxhbmEgZGUgQ2VydGlmaWNhY2lvIChOSUYgUS0w
-ODAxMTc2LUkpMSgwJgYDVQQLEx9TZXJ2ZWlzIFB1YmxpY3MgZGUgQ2VydGlmaWNhY2lvMTUwMwYD
-VQQLEyxWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbCAoYykwMzE1MDMGA1UE
-CxMsSmVyYXJxdWlhIEVudGl0YXRzIGRlIENlcnRpZmljYWNpbyBDYXRhbGFuZXMxDzANBgNVBAMT
-BkVDLUFDQzAeFw0wMzAxMDcyMzAwMDBaFw0zMTAxMDcyMjU5NTlaMIHzMQswCQYDVQQGEwJFUzE7
-MDkGA1UEChMyQWdlbmNpYSBDYXRhbGFuYSBkZSBDZXJ0aWZpY2FjaW8gKE5JRiBRLTA4MDExNzYt
-SSkxKDAmBgNVBAsTH1NlcnZlaXMgUHVibGljcyBkZSBDZXJ0aWZpY2FjaW8xNTAzBgNVBAsTLFZl
-Z2V1IGh0dHBzOi8vd3d3LmNhdGNlcnQubmV0L3ZlcmFycmVsIChjKTAzMTUwMwYDVQQLEyxKZXJh
-cnF1aWEgRW50aXRhdHMgZGUgQ2VydGlmaWNhY2lvIENhdGFsYW5lczEPMA0GA1UEAxMGRUMtQUND
-MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsyLHT+KXQpWIR4NA9h0X84NzJB5R85iK
-w5K4/0CQBXCHYMkAqbWUZRkiFRfCQ2xmRJoNBD45b6VLeqpjt4pEndljkYRm4CgPukLjbo73FCeT
-ae6RDqNfDrHrZqJyTxIThmV6PttPB/SnCWDaOkKZx7J/sxaVHMf5NLWUhdWZXqBIoH7nF2W4onW4
-HvPlQn2v7fOKSGRdghST2MDk/7NQcvJ29rNdQlB50JQ+awwAvthrDk4q7D7SzIKiGGUzE3eeml0a
-E9jD2z3Il3rucO2n5nzbcc8tlGLfbdb1OL4/pYUKGbio2Al1QnDE6u/LDsg0qBIimAy4E5S2S+zw
-0JDnJwIDAQABo4HjMIHgMB0GA1UdEQQWMBSBEmVjX2FjY0BjYXRjZXJ0Lm5ldDAPBgNVHRMBAf8E
-BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUoMOLRKo3pUW/l4Ba0fF4opvpXY0wfwYD
-VR0gBHgwdjB0BgsrBgEEAfV4AQMBCjBlMCwGCCsGAQUFBwIBFiBodHRwczovL3d3dy5jYXRjZXJ0
-Lm5ldC92ZXJhcnJlbDA1BggrBgEFBQcCAjApGidWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5l
-dC92ZXJhcnJlbCAwDQYJKoZIhvcNAQEFBQADggEBAKBIW4IB9k1IuDlVNZyAelOZ1Vr/sXE7zDkJ
-lF7W2u++AVtd0x7Y/X1PzaBB4DSTv8vihpw3kpBWHNzrKQXlxJ7HNd+KDM3FIUPpqojlNcAZQmNa
-Al6kSBg6hW/cnbw/nZzBh7h6YQjpdwt/cKt63dmXLGQehb+8dJahw3oS7AwaboMMPOhyRp/7SNVe
-l+axofjk70YllJyJ22k4vuxcDlbHZVHlUIiIv0LVKz3l+bqeLrPK9HOSAgu+TGbrIP65y7WZf+a2
-E/rKS03Z7lNGBjvGTq2TWoF+bCpLagVFjPIhpDGQh2xlnJ2lYJU6Un/10asIbvPuW/mIPX64b24D
-5EI=
------END CERTIFICATE-----
-
-Hellenic Academic and Research Institutions RootCA 2011
-=======================================================
------BEGIN CERTIFICATE-----
-MIIEMTCCAxmgAwIBAgIBADANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UEBhMCR1IxRDBCBgNVBAoT
-O0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9y
-aXR5MUAwPgYDVQQDEzdIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z
-IFJvb3RDQSAyMDExMB4XDTExMTIwNjEzNDk1MloXDTMxMTIwMTEzNDk1MlowgZUxCzAJBgNVBAYT
-AkdSMUQwQgYDVQQKEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z
-IENlcnQuIEF1dGhvcml0eTFAMD4GA1UEAxM3SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNo
-IEluc3RpdHV0aW9ucyBSb290Q0EgMjAxMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
-AKlTAOMupvaO+mDYLZU++CwqVE7NuYRhlFhPjz2L5EPzdYmNUeTDN9KKiE15HrcS3UN4SoqS5tdI
-1Q+kOilENbgH9mgdVc04UfCMJDGFr4PJfel3r+0ae50X+bOdOFAPplp5kYCvN66m0zH7tSYJnTxa
-71HFK9+WXesyHgLacEnsbgzImjeN9/E2YEsmLIKe0HjzDQ9jpFEw4fkrJxIH2Oq9GGKYsFk3fb7u
-8yBRQlqD75O6aRXxYp2fmTmCobd0LovUxQt7L/DICto9eQqakxylKHJzkUOap9FNhYS5qXSPFEDH
-3N6sQWRstBmbAmNtJGSPRLIl6s5ddAxjMlyNh+UCAwEAAaOBiTCBhjAPBgNVHRMBAf8EBTADAQH/
-MAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQUppFC/RNhSiOeCKQp5dgTBCPuQSUwRwYDVR0eBEAwPqA8
-MAWCAy5ncjAFggMuZXUwBoIELmVkdTAGggQub3JnMAWBAy5ncjAFgQMuZXUwBoEELmVkdTAGgQQu
-b3JnMA0GCSqGSIb3DQEBBQUAA4IBAQAf73lB4XtuP7KMhjdCSk4cNx6NZrokgclPEg8hwAOXhiVt
-XdMiKahsog2p6z0GW5k6x8zDmjR/qw7IThzh+uTczQ2+vyT+bOdrwg3IBp5OjWEopmr95fZi6hg8
-TqBTnbI6nOulnJEWtk2C4AwFSKls9cz4y51JtPACpf1wA+2KIaWuE4ZJwzNzvoc7dIsXRSZMFpGD
-/md9zU1jZ/rzAxKWeAaNsWftjj++n08C9bMJL/NMh98qy5V8AcysNnq/onN694/BtZqhFLKPM58N
-7yLcZnuEvUUXBj08yrl3NI/K6s8/MT7jiOOASSXIl7WdmplNsDz4SgCbZN2fOUvRJ9e4
------END CERTIFICATE-----
-
Actalis Authentication Root CA
==============================
-----BEGIN CERTIFICATE-----
@@ -1737,20 +1639,6 @@ HU6+4WMBzzuqQhFkoJ2UOQIReVx7Hfpkue4WQrO/isIJxOzksU0CMQDpKmFHjFJKS04YcPbWRNZu
9YO6bVi9JNlWSOrvxKJGgYhqOkbRqZtNyWHa0V1Xahg=
-----END CERTIFICATE-----
-GlobalSign ECC Root CA - R4
-===========================
------BEGIN CERTIFICATE-----
-MIIB4TCCAYegAwIBAgIRKjikHJYKBN5CsiilC+g0mAIwCgYIKoZIzj0EAwIwUDEkMCIGA1UECxMb
-R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI0MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD
-EwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoXDTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMb
-R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI0MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD
-EwpHbG9iYWxTaWduMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEuMZ5049sJQ6fLjkZHAOkrprl
-OQcJFspjsbmG+IpXwVfOQvpzofdlQv8ewQCybnMO/8ch5RikqtlxP6jUuc6MHaNCMEAwDgYDVR0P
-AQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFFSwe61FuOJAf/sKbvu+M8k8o4TV
-MAoGCCqGSM49BAMCA0gAMEUCIQDckqGgE6bPA7DmxCGXkPoUVy0D7O48027KqGx2vKLeuwIgJ6iF
-JzWbVsaj8kfSt24bAgAXqmemFZHe+pTsewv4n4Q=
------END CERTIFICATE-----
-
GlobalSign ECC Root CA - R5
===========================
-----BEGIN CERTIFICATE-----
@@ -2472,96 +2360,6 @@ AwMDaAAwZQIwJsdpW9zV57LnyAyMjMPdeYwbY9XJUpROTYJKcx6ygISpJcBMWm1JKWB4E+J+SOtk
AjEA2zQgMgj/mkkCtojeFK9dbJlxjRo/i9fgojaGHAeCOnZT/cKi7e97sIBPWA9LUzm9
-----END CERTIFICATE-----
-GTS Root R1
-===========
------BEGIN CERTIFICATE-----
-MIIFWjCCA0KgAwIBAgIQbkepxUtHDA3sM9CJuRz04TANBgkqhkiG9w0BAQwFADBHMQswCQYDVQQG
-EwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJv
-b3QgUjEwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAwWjBHMQswCQYDVQQGEwJVUzEiMCAG
-A1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjEwggIi
-MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2EQKLHuOhd5s73L+UPreVp0A8of2C+X0yBoJx
-9vaMf/vo27xqLpeXo4xL+Sv2sfnOhB2x+cWX3u+58qPpvBKJXqeqUqv4IyfLpLGcY9vXmX7wCl7r
-aKb0xlpHDU0QM+NOsROjyBhsS+z8CZDfnWQpJSMHobTSPS5g4M/SCYe7zUjwTcLCeoiKu7rPWRnW
-r4+wB7CeMfGCwcDfLqZtbBkOtdh+JhpFAz2weaSUKK0PfyblqAj+lug8aJRT7oM6iCsVlgmy4HqM
-LnXWnOunVmSPlk9orj2XwoSPwLxAwAtcvfaHszVsrBhQf4TgTM2S0yDpM7xSma8ytSmzJSq0SPly
-4cpk9+aCEI3oncKKiPo4Zor8Y/kB+Xj9e1x3+naH+uzfsQ55lVe0vSbv1gHR6xYKu44LtcXFilWr
-06zqkUspzBmkMiVOKvFlRNACzqrOSbTqn3yDsEB750Orp2yjj32JgfpMpf/VjsPOS+C12LOORc92
-wO1AK/1TD7Cn1TsNsYqiA94xrcx36m97PtbfkSIS5r762DL8EGMUUXLeXdYWk70paDPvOmbsB4om
-3xPXV2V4J95eSRQAogB/mqghtqmxlbCluQ0WEdrHbEg8QOB+DVrNVjzRlwW5y0vtOUucxD/SVRNu
-JLDWcfr0wbrM7Rv1/oFB2ACYPTrIrnqYNxgFlQIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYD
-VR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU5K8rJnEaK0gnhS9SZizv8IkTcT4wDQYJKoZIhvcNAQEM
-BQADggIBADiWCu49tJYeX++dnAsznyvgyv3SjgofQXSlfKqE1OXyHuY3UjKcC9FhHb8owbZEKTV1
-d5iyfNm9dKyKaOOpMQkpAWBz40d8U6iQSifvS9efk+eCNs6aaAyC58/UEBZvXw6ZXPYfcX3v73sv
-fuo21pdwCxXu11xWajOl40k4DLh9+42FpLFZXvRq4d2h9mREruZRgyFmxhE+885H7pwoHyXa/6xm
-ld01D1zvICxi/ZG6qcz8WpyTgYMpl0p8WnK0OdC3d8t5/Wk6kjftbjhlRn7pYL15iJdfOBL07q9b
-gsiG1eGZbYwE8na6SfZu6W0eX6DvJ4J2QPim01hcDyxC2kLGe4g0x8HYRZvBPsVhHdljUEn2NIVq
-4BjFbkerQUIpm/ZgDdIx02OYI5NaAIFItO/Nis3Jz5nu2Z6qNuFoS3FJFDYoOj0dzpqPJeaAcWEr
-tXvM+SUWgeExX6GjfhaknBZqlxi9dnKlC54dNuYvoS++cJEPqOba+MSSQGwlfnuzCdyyF62ARPBo
-pY+Udf90WuioAnwMCeKpSwughQtiue+hMZL77/ZRBIls6Kl0obsXs7X9SQ98POyDGCBDTtWTurQ0
-sR8WNh8M5mQ5Fkzc4P4dyKliPUDqysU0ArSuiYgzNdwsE3PYJ/HQcu51OyLemGhmW/HGY0dVHLql
-CFF1pkgl
------END CERTIFICATE-----
-
-GTS Root R2
-===========
------BEGIN CERTIFICATE-----
-MIIFWjCCA0KgAwIBAgIQbkepxlqz5yDFMJo/aFLybzANBgkqhkiG9w0BAQwFADBHMQswCQYDVQQG
-EwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJv
-b3QgUjIwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAwWjBHMQswCQYDVQQGEwJVUzEiMCAG
-A1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjIwggIi
-MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDO3v2m++zsFDQ8BwZabFn3GTXd98GdVarTzTuk
-k3LvCvptnfbwhYBboUhSnznFt+4orO/LdmgUud+tAWyZH8QiHZ/+cnfgLFuv5AS/T3KgGjSY6Dlo
-7JUle3ah5mm5hRm9iYz+re026nO8/4Piy33B0s5Ks40FnotJk9/BW9BuXvAuMC6C/Pq8tBcKSOWI
-m8Wba96wyrQD8Nr0kLhlZPdcTK3ofmZemde4wj7I0BOdre7kRXuJVfeKH2JShBKzwkCX44ofR5Gm
-dFrS+LFjKBC4swm4VndAoiaYecb+3yXuPuWgf9RhD1FLPD+M2uFwdNjCaKH5wQzpoeJ/u1U8dgbu
-ak7MkogwTZq9TwtImoS1mKPV+3PBV2HdKFZ1E66HjucMUQkQdYhMvI35ezzUIkgfKtzra7tEscsz
-cTJGr61K8YzodDqs5xoic4DSMPclQsciOzsSrZYuxsN2B6ogtzVJV+mSSeh2FnIxZyuWfoqjx5RW
-Ir9qS34BIbIjMt/kmkRtWVtd9QCgHJvGeJeNkP+byKq0rxFROV7Z+2et1VsRnTKaG73Vululycsl
-aVNVJ1zgyjbLiGH7HrfQy+4W+9OmTN6SpdTi3/UGVN4unUu0kzCqgc7dGtxRcw1PcOnlthYhGXmy
-5okLdWTK1au8CcEYof/UVKGFPP0UJAOyh9OktwIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYD
-VR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUu//KjiOfT5nK2+JopqUVJxce2Q4wDQYJKoZIhvcNAQEM
-BQADggIBALZp8KZ3/p7uC4Gt4cCpx/k1HUCCq+YEtN/L9x0Pg/B+E02NjO7jMyLDOfxA325BS0JT
-vhaI8dI4XsRomRyYUpOM52jtG2pzegVATX9lO9ZY8c6DR2Dj/5epnGB3GFW1fgiTz9D2PGcDFWEJ
-+YF59exTpJ/JjwGLc8R3dtyDovUMSRqodt6Sm2T4syzFJ9MHwAiApJiS4wGWAqoC7o87xdFtCjMw
-c3i5T1QWvwsHoaRc5svJXISPD+AVdyx+Jn7axEvbpxZ3B7DNdehyQtaVhJ2Gg/LkkM0JR9SLA3Da
-WsYDQvTtN6LwG1BUSw7YhN4ZKJmBR64JGz9I0cNv4rBgF/XuIwKl2gBbbZCr7qLpGzvpx0QnRY5r
-n/WkhLx3+WuXrD5RRaIRpsyF7gpo8j5QOHokYh4XIDdtak23CZvJ/KRY9bb7nE4Yu5UC56Gtmwfu
-Nmsk0jmGwZODUNKBRqhfYlcsu2xkiAhu7xNUX90txGdj08+JN7+dIPT7eoOboB6BAFDC5AwiWVIQ
-7UNWhwD4FFKnHYuTjKJNRn8nxnGbJN7k2oaLDX5rIMHAnuFl2GqjpuiFizoHCBy69Y9Vmhh1fuXs
-gWbRIXOhNUQLgD1bnF5vKheW0YMjiGZt5obicDIvUiLnyOd/xCxgXS/Dr55FBcOEArf9LAhST4Ld
-o/DUhgkC
------END CERTIFICATE-----
-
-GTS Root R3
-===========
------BEGIN CERTIFICATE-----
-MIICDDCCAZGgAwIBAgIQbkepx2ypcyRAiQ8DVd2NHTAKBggqhkjOPQQDAzBHMQswCQYDVQQGEwJV
-UzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3Qg
-UjMwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UE
-ChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjMwdjAQBgcq
-hkjOPQIBBgUrgQQAIgNiAAQfTzOHMymKoYTey8chWEGJ6ladK0uFxh1MJ7x/JlFyb+Kf1qPKzEUU
-Rout736GjOyxfi//qXGdGIRFBEFVbivqJn+7kAHjSxm65FSWRQmx1WyRRK2EE46ajA2ADDL24Cej
-QjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTB8Sa6oC2uhYHP
-0/EqEr24Cmf9vDAKBggqhkjOPQQDAwNpADBmAjEAgFukfCPAlaUs3L6JbyO5o91lAFJekazInXJ0
-glMLfalAvWhgxeG4VDvBNhcl2MG9AjEAnjWSdIUlUfUk7GRSJFClH9voy8l27OyCbvWFGFPouOOa
-KaqW04MjyaR7YbPMAuhd
------END CERTIFICATE-----
-
-GTS Root R4
-===========
------BEGIN CERTIFICATE-----
-MIICCjCCAZGgAwIBAgIQbkepyIuUtui7OyrYorLBmTAKBggqhkjOPQQDAzBHMQswCQYDVQQGEwJV
-UzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3Qg
-UjQwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UE
-ChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjQwdjAQBgcq
-hkjOPQIBBgUrgQQAIgNiAATzdHOnaItgrkO4NcWBMHtLSZ37wWHO5t5GvWvVYRg1rkDdc/eJkTBa
-6zzuhXyiQHY7qca4R9gq55KRanPpsXI5nymfopjTX15YhmUPoYRlBtHci8nHc8iMai/lxKvRHYqj
-QjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSATNbrdP9JNqPV
-2Py1PsVq8JQdjDAKBggqhkjOPQQDAwNnADBkAjBqUFJ0CMRw3J5QdCHojXohw0+WbhXRIjVhLfoI
-N+4Zba3bssx9BzT1YBkstTTZbyACMANxsbqjYAuG7ZoIapVon+Kz4ZNkfF6Tpt95LY2F45TPI11x
-zPKwTdb+mciUqXWi4w==
------END CERTIFICATE-----
-
UCA Global G2 Root
==================
-----BEGIN CERTIFICATE-----
@@ -3230,3 +3028,479 @@ ECUqqHgtvpBBWJAVcqeht6NCMEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUyRtTgRL+BNUW
rcJRQO9gcS3ujwLEXQNwSaSS6sUUiHCm0w2wqsosQJz76YJumgIwK0eaB8bRwoF8yguWGEEbo/Qw
CZ61IygNnxS2PFOiTAZpffpskcYqSUXm7LcT4Tps
-----END CERTIFICATE-----
+
+Autoridad de Certificacion Firmaprofesional CIF A62634068
+=========================================================
+-----BEGIN CERTIFICATE-----
+MIIGFDCCA/ygAwIBAgIIG3Dp0v+ubHEwDQYJKoZIhvcNAQELBQAwUTELMAkGA1UEBhMCRVMxQjBA
+BgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2
+MjYzNDA2ODAeFw0xNDA5MjMxNTIyMDdaFw0zNjA1MDUxNTIyMDdaMFExCzAJBgNVBAYTAkVTMUIw
+QAYDVQQDDDlBdXRvcmlkYWQgZGUgQ2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBB
+NjI2MzQwNjgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKlmuO6vj78aI14H9M2uDD
+Utd9thDIAl6zQyrET2qyyhxdKJp4ERppWVevtSBC5IsP5t9bpgOSL/UR5GLXMnE42QQMcas9UX4P
+B99jBVzpv5RvwSmCwLTaUbDBPLutN0pcyvFLNg4kq7/DhHf9qFD0sefGL9ItWY16Ck6WaVICqjaY
+7Pz6FIMMNx/Jkjd/14Et5cS54D40/mf0PmbR0/RAz15iNA9wBj4gGFrO93IbJWyTdBSTo3OxDqqH
+ECNZXyAFGUftaI6SEspd/NYrspI8IM/hX68gvqB2f3bl7BqGYTM+53u0P6APjqK5am+5hyZvQWyI
+plD9amML9ZMWGxmPsu2bm8mQ9QEM3xk9Dz44I8kvjwzRAv4bVdZO0I08r0+k8/6vKtMFnXkIoctX
+MbScyJCyZ/QYFpM6/EfY0XiWMR+6KwxfXZmtY4laJCB22N/9q06mIqqdXuYnin1oKaPnirjaEbsX
+LZmdEyRG98Xi2J+Of8ePdG1asuhy9azuJBCtLxTa/y2aRnFHvkLfuwHb9H/TKI8xWVvTyQKmtFLK
+bpf7Q8UIJm+K9Lv9nyiqDdVF8xM6HdjAeI9BZzwelGSuewvF6NkBiDkal4ZkQdU7hwxu+g/GvUgU
+vzlN1J5Bto+WHWOWk9mVBngxaJ43BjuAiUVhOSPHG0SjFeUc+JIwuwIDAQABo4HvMIHsMB0GA1Ud
+DgQWBBRlzeurNR4APn7VdMActHNHDhpkLzASBgNVHRMBAf8ECDAGAQH/AgEBMIGmBgNVHSAEgZ4w
+gZswgZgGBFUdIAAwgY8wLwYIKwYBBQUHAgEWI2h0dHA6Ly93d3cuZmlybWFwcm9mZXNpb25hbC5j
+b20vY3BzMFwGCCsGAQUFBwICMFAeTgBQAGEAcwBlAG8AIABkAGUAIABsAGEAIABCAG8AbgBhAG4A
+bwB2AGEAIAA0ADcAIABCAGEAcgBjAGUAbABvAG4AYQAgADAAOAAwADEANzAOBgNVHQ8BAf8EBAMC
+AQYwDQYJKoZIhvcNAQELBQADggIBAHSHKAIrdx9miWTtj3QuRhy7qPj4Cx2Dtjqn6EWKB7fgPiDL
+4QjbEwj4KKE1soCzC1HA01aajTNFSa9J8OA9B3pFE1r/yJfY0xgsfZb43aJlQ3CTkBW6kN/oGbDb
+LIpgD7dvlAceHabJhfa9NPhAeGIQcDq+fUs5gakQ1JZBu/hfHAsdCPKxsIl68veg4MSPi3i1O1il
+I45PVf42O+AMt8oqMEEgtIDNrvx2ZnOorm7hfNoD6JQg5iKj0B+QXSBTFCZX2lSX3xZEEAEeiGaP
+cjiT3SC3NL7X8e5jjkd5KAb881lFJWAiMxujX6i6KtoaPc1A6ozuBRWV1aUsIC+nmCjuRfzxuIgA
+LI9C2lHVnOUTaHFFQ4ueCyE8S1wF3BqfmI7avSKecs2tCsvMo2ebKHTEm9caPARYpoKdrcd7b/+A
+lun4jWq9GJAd/0kakFI3ky88Al2CdgtR5xbHV/g4+afNmyJU72OwFW1TZQNKXkqgsqeOSQBZONXH
+9IBk9W6VULgRfhVwOEqwf9DEMnDAGf/JOC0ULGb0QkTmVXYbgBVX/8Cnp6o5qtjTcNAuuuuUavpf
+NIbnYrX9ivAwhZTJryQCL2/W3Wf+47BVTwSYT6RBVuKT0Gro1vP7ZeDOdcQxWQzugsgMYDNKGbqE
+ZycPvEJdvSRUDewdcAZfpLz6IHxV
+-----END CERTIFICATE-----
+
+vTrus ECC Root CA
+=================
+-----BEGIN CERTIFICATE-----
+MIICDzCCAZWgAwIBAgIUbmq8WapTvpg5Z6LSa6Q75m0c1towCgYIKoZIzj0EAwMwRzELMAkGA1UE
+BhMCQ04xHDAaBgNVBAoTE2lUcnVzQ2hpbmEgQ28uLEx0ZC4xGjAYBgNVBAMTEXZUcnVzIEVDQyBS
+b290IENBMB4XDTE4MDczMTA3MjY0NFoXDTQzMDczMTA3MjY0NFowRzELMAkGA1UEBhMCQ04xHDAa
+BgNVBAoTE2lUcnVzQ2hpbmEgQ28uLEx0ZC4xGjAYBgNVBAMTEXZUcnVzIEVDQyBSb290IENBMHYw
+EAYHKoZIzj0CAQYFK4EEACIDYgAEZVBKrox5lkqqHAjDo6LN/llWQXf9JpRCux3NCNtzslt188+c
+ToL0v/hhJoVs1oVbcnDS/dtitN9Ti72xRFhiQgnH+n9bEOf+QP3A2MMrMudwpremIFUde4BdS49n
+TPEQo0IwQDAdBgNVHQ4EFgQUmDnNvtiyjPeyq+GtJK97fKHbH88wDwYDVR0TAQH/BAUwAwEB/zAO
+BgNVHQ8BAf8EBAMCAQYwCgYIKoZIzj0EAwMDaAAwZQIwV53dVvHH4+m4SVBrm2nDb+zDfSXkV5UT
+QJtS0zvzQBm8JsctBp61ezaf9SXUY2sAAjEA6dPGnlaaKsyh2j/IZivTWJwghfqrkYpwcBE4YGQL
+YgmRWAD5Tfs0aNoJrSEGGJTO
+-----END CERTIFICATE-----
+
+vTrus Root CA
+=============
+-----BEGIN CERTIFICATE-----
+MIIFVjCCAz6gAwIBAgIUQ+NxE9izWRRdt86M/TX9b7wFjUUwDQYJKoZIhvcNAQELBQAwQzELMAkG
+A1UEBhMCQ04xHDAaBgNVBAoTE2lUcnVzQ2hpbmEgQ28uLEx0ZC4xFjAUBgNVBAMTDXZUcnVzIFJv
+b3QgQ0EwHhcNMTgwNzMxMDcyNDA1WhcNNDMwNzMxMDcyNDA1WjBDMQswCQYDVQQGEwJDTjEcMBoG
+A1UEChMTaVRydXNDaGluYSBDby4sTHRkLjEWMBQGA1UEAxMNdlRydXMgUm9vdCBDQTCCAiIwDQYJ
+KoZIhvcNAQEBBQADggIPADCCAgoCggIBAL1VfGHTuB0EYgWgrmy3cLRB6ksDXhA/kFocizuwZots
+SKYcIrrVQJLuM7IjWcmOvFjai57QGfIvWcaMY1q6n6MLsLOaXLoRuBLpDLvPbmyAhykUAyyNJJrI
+ZIO1aqwTLDPxn9wsYTwaP3BVm60AUn/PBLn+NvqcwBauYv6WTEN+VRS+GrPSbcKvdmaVayqwlHeF
+XgQPYh1jdfdr58tbmnDsPmcF8P4HCIDPKNsFxhQnL4Z98Cfe/+Z+M0jnCx5Y0ScrUw5XSmXX+6KA
+YPxMvDVTAWqXcoKv8R1w6Jz1717CbMdHflqUhSZNO7rrTOiwCcJlwp2dCZtOtZcFrPUGoPc2BX70
+kLJrxLT5ZOrpGgrIDajtJ8nU57O5q4IikCc9Kuh8kO+8T/3iCiSn3mUkpF3qwHYw03dQ+A0Em5Q2
+AXPKBlim0zvc+gRGE1WKyURHuFE5Gi7oNOJ5y1lKCn+8pu8fA2dqWSslYpPZUxlmPCdiKYZNpGvu
+/9ROutW04o5IWgAZCfEF2c6Rsffr6TlP9m8EQ5pV9T4FFL2/s1m02I4zhKOQUqqzApVg+QxMaPnu
+1RcN+HFXtSXkKe5lXa/R7jwXC1pDxaWG6iSe4gUH3DRCEpHWOXSuTEGC2/KmSNGzm/MzqvOmwMVO
+9fSddmPmAsYiS8GVP1BkLFTltvA8Kc9XAgMBAAGjQjBAMB0GA1UdDgQWBBRUYnBj8XWEQ1iO0RYg
+scasGrz2iTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOC
+AgEAKbqSSaet8PFww+SX8J+pJdVrnjT+5hpk9jprUrIQeBqfTNqK2uwcN1LgQkv7bHbKJAs5EhWd
+nxEt/Hlk3ODg9d3gV8mlsnZwUKT+twpw1aA08XXXTUm6EdGz2OyC/+sOxL9kLX1jbhd47F18iMjr
+jld22VkE+rxSH0Ws8HqA7Oxvdq6R2xCOBNyS36D25q5J08FsEhvMKar5CKXiNxTKsbhm7xqC5PD4
+8acWabfbqWE8n/Uxy+QARsIvdLGx14HuqCaVvIivTDUHKgLKeBRtRytAVunLKmChZwOgzoy8sHJn
+xDHO2zTlJQNgJXtxmOTAGytfdELSS8VZCAeHvsXDf+eW2eHcKJfWjwXj9ZtOyh1QRwVTsMo554Wg
+icEFOwE30z9J4nfrI8iIZjs9OXYhRvHsXyO466JmdXTBQPfYaJqT4i2pLr0cox7IdMakLXogqzu4
+sEb9b91fUlV1YvCXoHzXOP0l382gmxDPi7g4Xl7FtKYCNqEeXxzP4padKar9mK5S4fNBUvupLnKW
+nyfjqnN9+BojZns7q2WwMgFLFT49ok8MKzWixtlnEjUwzXYuFrOZnk1PTi07NEPhmg4NpGaXutIc
+SkwsKouLgU9xGqndXHt7CMUADTdA43x7VF8vhV929vensBxXVsFy6K2ir40zSbofitzmdHxghm+H
+l3s=
+-----END CERTIFICATE-----
+
+ISRG Root X2
+============
+-----BEGIN CERTIFICATE-----
+MIICGzCCAaGgAwIBAgIQQdKd0XLq7qeAwSxs6S+HUjAKBggqhkjOPQQDAzBPMQswCQYDVQQGEwJV
+UzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElT
+UkcgUm9vdCBYMjAeFw0yMDA5MDQwMDAwMDBaFw00MDA5MTcxNjAwMDBaME8xCzAJBgNVBAYTAlVT
+MSkwJwYDVQQKEyBJbnRlcm5ldCBTZWN1cml0eSBSZXNlYXJjaCBHcm91cDEVMBMGA1UEAxMMSVNS
+RyBSb290IFgyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEzZvVn4CDCuwJSvMWSj5cz3es3mcFDR0H
+ttwW+1qLFNvicWDEukWVEYmO6gbf9yoWHKS5xcUy4APgHoIYOIvXRdgKam7mAHf7AlF9ItgKbppb
+d9/w+kHsOdx1ymgHDB/qo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNV
+HQ4EFgQUfEKWrt5LSDv6kviejM9ti6lyN5UwCgYIKoZIzj0EAwMDaAAwZQIwe3lORlCEwkSHRhtF
+cP9Ymd70/aTSVaYgLXTWNLxBo1BfASdWtL4ndQavEi51mI38AjEAi/V3bNTIZargCyzuFJ0nN6T5
+U6VR5CmD1/iQMVtCnwr1/q4AaOeMSQ+2b1tbFfLn
+-----END CERTIFICATE-----
+
+HiPKI Root CA - G1
+==================
+-----BEGIN CERTIFICATE-----
+MIIFajCCA1KgAwIBAgIQLd2szmKXlKFD6LDNdmpeYDANBgkqhkiG9w0BAQsFADBPMQswCQYDVQQG
+EwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0ZC4xGzAZBgNVBAMMEkhpUEtJ
+IFJvb3QgQ0EgLSBHMTAeFw0xOTAyMjIwOTQ2MDRaFw0zNzEyMzExNTU5NTlaME8xCzAJBgNVBAYT
+AlRXMSMwIQYDVQQKDBpDaHVuZ2h3YSBUZWxlY29tIENvLiwgTHRkLjEbMBkGA1UEAwwSSGlQS0kg
+Um9vdCBDQSAtIEcxMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA9B5/UnMyDHPkvRN0
+o9QwqNCuS9i233VHZvR85zkEHmpwINJaR3JnVfSl6J3VHiGh8Ge6zCFovkRTv4354twvVcg3Px+k
+wJyz5HdcoEb+d/oaoDjq7Zpy3iu9lFc6uux55199QmQ5eiY29yTw1S+6lZgRZq2XNdZ1AYDgr/SE
+YYwNHl98h5ZeQa/rh+r4XfEuiAU+TCK72h8q3VJGZDnzQs7ZngyzsHeXZJzA9KMuH5UHsBffMNsA
+GJZMoYFL3QRtU6M9/Aes1MU3guvklQgZKILSQjqj2FPseYlgSGDIcpJQ3AOPgz+yQlda22rpEZfd
+hSi8MEyr48KxRURHH+CKFgeW0iEPU8DtqX7UTuybCeyvQqww1r/REEXgphaypcXTT3OUM3ECoWqj
+1jOXTyFjHluP2cFeRXF3D4FdXyGarYPM+l7WjSNfGz1BryB1ZlpK9p/7qxj3ccC2HTHsOyDry+K4
+9a6SsvfhhEvyovKTmiKe0xRvNlS9H15ZFblzqMF8b3ti6RZsR1pl8w4Rm0bZ/W3c1pzAtH2lsN0/
+Vm+h+fbkEkj9Bn8SV7apI09bA8PgcSojt/ewsTu8mL3WmKgMa/aOEmem8rJY5AIJEzypuxC00jBF
+8ez3ABHfZfjcK0NVvxaXxA/VLGGEqnKG/uY6fsI/fe78LxQ+5oXdUG+3Se0CAwEAAaNCMEAwDwYD
+VR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU8ncX+l6o/vY9cdVouslGDDjYr7AwDgYDVR0PAQH/BAQD
+AgGGMA0GCSqGSIb3DQEBCwUAA4ICAQBQUfB13HAE4/+qddRxosuej6ip0691x1TPOhwEmSKsxBHi
+7zNKpiMdDg1H2DfHb680f0+BazVP6XKlMeJ45/dOlBhbQH3PayFUhuaVevvGyuqcSE5XCV0vrPSl
+tJczWNWseanMX/mF+lLFjfiRFOs6DRfQUsJ748JzjkZ4Bjgs6FzaZsT0pPBWGTMpWmWSBUdGSquE
+wx4noR8RkpkndZMPvDY7l1ePJlsMu5wP1G4wB9TcXzZoZjmDlicmisjEOf6aIW/Vcobpf2Lll07Q
+JNBAsNB1CI69aO4I1258EHBGG3zgiLKecoaZAeO/n0kZtCW+VmWuF2PlHt/o/0elv+EmBYTksMCv
+5wiZqAxeJoBF1PhoL5aPruJKHJwWDBNvOIf2u8g0X5IDUXlwpt/L9ZlNec1OvFefQ05rLisY+Gpz
+jLrFNe85akEez3GoorKGB1s6yeHvP2UEgEcyRHCVTjFnanRbEEV16rCf0OY1/k6fi8wrkkVbbiVg
+hUbN0aqwdmaTd5a+g744tiROJgvM7XpWGuDpWsZkrUx6AEhEL7lAuxM+vhV4nYWBSipX3tUZQ9rb
+yltHhoMLP7YNdnhzeSJesYAfz77RP1YQmCuVh6EfnWQUYDksswBVLuT1sw5XxJFBAJw/6KXf6vb/
+yPCtbVKoF6ubYfwSUTXkJf2vqmqGOQ==
+-----END CERTIFICATE-----
+
+GlobalSign ECC Root CA - R4
+===========================
+-----BEGIN CERTIFICATE-----
+MIIB3DCCAYOgAwIBAgINAgPlfvU/k/2lCSGypjAKBggqhkjOPQQDAjBQMSQwIgYDVQQLExtHbG9i
+YWxTaWduIEVDQyBSb290IENBIC0gUjQxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkds
+b2JhbFNpZ24wHhcNMTIxMTEzMDAwMDAwWhcNMzgwMTE5MDMxNDA3WjBQMSQwIgYDVQQLExtHbG9i
+YWxTaWduIEVDQyBSb290IENBIC0gUjQxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkds
+b2JhbFNpZ24wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAS4xnnTj2wlDp8uORkcA6SumuU5BwkW
+ymOxuYb4ilfBV85C+nOh92VC/x7BALJucw7/xyHlGKSq2XE/qNS5zowdo0IwQDAOBgNVHQ8BAf8E
+BAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUVLB7rUW44kB/+wpu+74zyTyjhNUwCgYI
+KoZIzj0EAwIDRwAwRAIgIk90crlgr/HmnKAWBVBfw147bmF0774BxL4YSFlhgjICICadVGNA3jdg
+UM/I2O2dgq43mLyjj0xMqTQrbO/7lZsm
+-----END CERTIFICATE-----
+
+GTS Root R1
+===========
+-----BEGIN CERTIFICATE-----
+MIIFVzCCAz+gAwIBAgINAgPlk28xsBNJiGuiFzANBgkqhkiG9w0BAQwFADBHMQswCQYDVQQGEwJV
+UzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3Qg
+UjEwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UE
+ChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjEwggIiMA0G
+CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2EQKLHuOhd5s73L+UPreVp0A8of2C+X0yBoJx9vaM
+f/vo27xqLpeXo4xL+Sv2sfnOhB2x+cWX3u+58qPpvBKJXqeqUqv4IyfLpLGcY9vXmX7wCl7raKb0
+xlpHDU0QM+NOsROjyBhsS+z8CZDfnWQpJSMHobTSPS5g4M/SCYe7zUjwTcLCeoiKu7rPWRnWr4+w
+B7CeMfGCwcDfLqZtbBkOtdh+JhpFAz2weaSUKK0PfyblqAj+lug8aJRT7oM6iCsVlgmy4HqMLnXW
+nOunVmSPlk9orj2XwoSPwLxAwAtcvfaHszVsrBhQf4TgTM2S0yDpM7xSma8ytSmzJSq0SPly4cpk
+9+aCEI3oncKKiPo4Zor8Y/kB+Xj9e1x3+naH+uzfsQ55lVe0vSbv1gHR6xYKu44LtcXFilWr06zq
+kUspzBmkMiVOKvFlRNACzqrOSbTqn3yDsEB750Orp2yjj32JgfpMpf/VjsPOS+C12LOORc92wO1A
+K/1TD7Cn1TsNsYqiA94xrcx36m97PtbfkSIS5r762DL8EGMUUXLeXdYWk70paDPvOmbsB4om3xPX
+V2V4J95eSRQAogB/mqghtqmxlbCluQ0WEdrHbEg8QOB+DVrNVjzRlwW5y0vtOUucxD/SVRNuJLDW
+cfr0wbrM7Rv1/oFB2ACYPTrIrnqYNxgFlQIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0T
+AQH/BAUwAwEB/zAdBgNVHQ4EFgQU5K8rJnEaK0gnhS9SZizv8IkTcT4wDQYJKoZIhvcNAQEMBQAD
+ggIBAJ+qQibbC5u+/x6Wki4+omVKapi6Ist9wTrYggoGxval3sBOh2Z5ofmmWJyq+bXmYOfg6LEe
+QkEzCzc9zolwFcq1JKjPa7XSQCGYzyI0zzvFIoTgxQ6KfF2I5DUkzps+GlQebtuyh6f88/qBVRRi
+ClmpIgUxPoLW7ttXNLwzldMXG+gnoot7TiYaelpkttGsN/H9oPM47HLwEXWdyzRSjeZ2axfG34ar
+J45JK3VmgRAhpuo+9K4l/3wV3s6MJT/KYnAK9y8JZgfIPxz88NtFMN9iiMG1D53Dn0reWVlHxYci
+NuaCp+0KueIHoI17eko8cdLiA6EfMgfdG+RCzgwARWGAtQsgWSl4vflVy2PFPEz0tv/bal8xa5me
+LMFrUKTX5hgUvYU/Z6tGn6D/Qqc6f1zLXbBwHSs09dR2CQzreExZBfMzQsNhFRAbd03OIozUhfJF
+fbdT6u9AWpQKXCBfTkBdYiJ23//OYb2MI3jSNwLgjt7RETeJ9r/tSQdirpLsQBqvFAnZ0E6yove+
+7u7Y/9waLd64NnHi/Hm3lCXRSHNboTXns5lndcEZOitHTtNCjv0xyBZm2tIMPNuzjsmhDYAPexZ3
+FL//2wmUspO8IFgV6dtxQ/PeEMMA3KgqlbbC1j+Qa3bbbP6MvPJwNQzcmRk13NfIRmPVNnGuV/u3
+gm3c
+-----END CERTIFICATE-----
+
+GTS Root R2
+===========
+-----BEGIN CERTIFICATE-----
+MIIFVzCCAz+gAwIBAgINAgPlrsWNBCUaqxElqjANBgkqhkiG9w0BAQwFADBHMQswCQYDVQQGEwJV
+UzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3Qg
+UjIwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UE
+ChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjIwggIiMA0G
+CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDO3v2m++zsFDQ8BwZabFn3GTXd98GdVarTzTukk3Lv
+CvptnfbwhYBboUhSnznFt+4orO/LdmgUud+tAWyZH8QiHZ/+cnfgLFuv5AS/T3KgGjSY6Dlo7JUl
+e3ah5mm5hRm9iYz+re026nO8/4Piy33B0s5Ks40FnotJk9/BW9BuXvAuMC6C/Pq8tBcKSOWIm8Wb
+a96wyrQD8Nr0kLhlZPdcTK3ofmZemde4wj7I0BOdre7kRXuJVfeKH2JShBKzwkCX44ofR5GmdFrS
++LFjKBC4swm4VndAoiaYecb+3yXuPuWgf9RhD1FLPD+M2uFwdNjCaKH5wQzpoeJ/u1U8dgbuak7M
+kogwTZq9TwtImoS1mKPV+3PBV2HdKFZ1E66HjucMUQkQdYhMvI35ezzUIkgfKtzra7tEscszcTJG
+r61K8YzodDqs5xoic4DSMPclQsciOzsSrZYuxsN2B6ogtzVJV+mSSeh2FnIxZyuWfoqjx5RWIr9q
+S34BIbIjMt/kmkRtWVtd9QCgHJvGeJeNkP+byKq0rxFROV7Z+2et1VsRnTKaG73VululycslaVNV
+J1zgyjbLiGH7HrfQy+4W+9OmTN6SpdTi3/UGVN4unUu0kzCqgc7dGtxRcw1PcOnlthYhGXmy5okL
+dWTK1au8CcEYof/UVKGFPP0UJAOyh9OktwIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0T
+AQH/BAUwAwEB/zAdBgNVHQ4EFgQUu//KjiOfT5nK2+JopqUVJxce2Q4wDQYJKoZIhvcNAQEMBQAD
+ggIBAB/Kzt3HvqGf2SdMC9wXmBFqiN495nFWcrKeGk6c1SuYJF2ba3uwM4IJvd8lRuqYnrYb/oM8
+0mJhwQTtzuDFycgTE1XnqGOtjHsB/ncw4c5omwX4Eu55MaBBRTUoCnGkJE+M3DyCB19m3H0Q/gxh
+swWV7uGugQ+o+MePTagjAiZrHYNSVc61LwDKgEDg4XSsYPWHgJ2uNmSRXbBoGOqKYcl3qJfEycel
+/FVL8/B/uWU9J2jQzGv6U53hkRrJXRqWbTKH7QMgyALOWr7Z6v2yTcQvG99fevX4i8buMTolUVVn
+jWQye+mew4K6Ki3pHrTgSAai/GevHyICc/sgCq+dVEuhzf9gR7A/Xe8bVr2XIZYtCtFenTgCR2y5
+9PYjJbigapordwj6xLEokCZYCDzifqrXPW+6MYgKBesntaFJ7qBFVHvmJ2WZICGoo7z7GJa7Um8M
+7YNRTOlZ4iBgxcJlkoKM8xAfDoqXvneCbT+PHV28SSe9zE8P4c52hgQjxcCMElv924SgJPFI/2R8
+0L5cFtHvma3AH/vLrrw4IgYmZNralw4/KBVEqE8AyvCazM90arQ+POuV7LXTWtiBmelDGDfrs7vR
+WGJB82bSj6p4lVQgw1oudCvV0b4YacCs1aTPObpRhANl6WLAYv7YTVWW4tAR+kg0Eeye7QUd5MjW
+HYbL
+-----END CERTIFICATE-----
+
+GTS Root R3
+===========
+-----BEGIN CERTIFICATE-----
+MIICCTCCAY6gAwIBAgINAgPluILrIPglJ209ZjAKBggqhkjOPQQDAzBHMQswCQYDVQQGEwJVUzEi
+MCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjMw
+HhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZ
+R29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjMwdjAQBgcqhkjO
+PQIBBgUrgQQAIgNiAAQfTzOHMymKoYTey8chWEGJ6ladK0uFxh1MJ7x/JlFyb+Kf1qPKzEUURout
+736GjOyxfi//qXGdGIRFBEFVbivqJn+7kAHjSxm65FSWRQmx1WyRRK2EE46ajA2ADDL24CejQjBA
+MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTB8Sa6oC2uhYHP0/Eq
+Er24Cmf9vDAKBggqhkjOPQQDAwNpADBmAjEA9uEglRR7VKOQFhG/hMjqb2sXnh5GmCCbn9MN2azT
+L818+FsuVbu/3ZL3pAzcMeGiAjEA/JdmZuVDFhOD3cffL74UOO0BzrEXGhF16b0DjyZ+hOXJYKaV
+11RZt+cRLInUue4X
+-----END CERTIFICATE-----
+
+GTS Root R4
+===========
+-----BEGIN CERTIFICATE-----
+MIICCTCCAY6gAwIBAgINAgPlwGjvYxqccpBQUjAKBggqhkjOPQQDAzBHMQswCQYDVQQGEwJVUzEi
+MCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjQw
+HhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZ
+R29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjQwdjAQBgcqhkjO
+PQIBBgUrgQQAIgNiAATzdHOnaItgrkO4NcWBMHtLSZ37wWHO5t5GvWvVYRg1rkDdc/eJkTBa6zzu
+hXyiQHY7qca4R9gq55KRanPpsXI5nymfopjTX15YhmUPoYRlBtHci8nHc8iMai/lxKvRHYqjQjBA
+MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSATNbrdP9JNqPV2Py1
+PsVq8JQdjDAKBggqhkjOPQQDAwNpADBmAjEA6ED/g94D9J+uHXqnLrmvT/aDHQ4thQEd0dlq7A/C
+r8deVl5c1RxYIigL9zC2L7F8AjEA8GE8p/SgguMh1YQdc4acLa/KNJvxn7kjNuK8YAOdgLOaVsjh
+4rsUecrNIdSUtUlD
+-----END CERTIFICATE-----
+
+Telia Root CA v2
+================
+-----BEGIN CERTIFICATE-----
+MIIFdDCCA1ygAwIBAgIPAWdfJ9b+euPkrL4JWwWeMA0GCSqGSIb3DQEBCwUAMEQxCzAJBgNVBAYT
+AkZJMRowGAYDVQQKDBFUZWxpYSBGaW5sYW5kIE95ajEZMBcGA1UEAwwQVGVsaWEgUm9vdCBDQSB2
+MjAeFw0xODExMjkxMTU1NTRaFw00MzExMjkxMTU1NTRaMEQxCzAJBgNVBAYTAkZJMRowGAYDVQQK
+DBFUZWxpYSBGaW5sYW5kIE95ajEZMBcGA1UEAwwQVGVsaWEgUm9vdCBDQSB2MjCCAiIwDQYJKoZI
+hvcNAQEBBQADggIPADCCAgoCggIBALLQPwe84nvQa5n44ndp586dpAO8gm2h/oFlH0wnrI4AuhZ7
+6zBqAMCzdGh+sq/H1WKzej9Qyow2RCRj0jbpDIX2Q3bVTKFgcmfiKDOlyzG4OiIjNLh9vVYiQJ3q
+9HsDrWj8soFPmNB06o3lfc1jw6P23pLCWBnglrvFxKk9pXSW/q/5iaq9lRdU2HhE8Qx3FZLgmEKn
+pNaqIJLNwaCzlrI6hEKNfdWV5Nbb6WLEWLN5xYzTNTODn3WhUidhOPFZPY5Q4L15POdslv5e2QJl
+tI5c0BE0312/UqeBAMN/mUWZFdUXyApT7GPzmX3MaRKGwhfwAZ6/hLzRUssbkmbOpFPlob/E2wnW
+5olWK8jjfN7j/4nlNW4o6GwLI1GpJQXrSPjdscr6bAhR77cYbETKJuFzxokGgeWKrLDiKca5JLNr
+RBH0pUPCTEPlcDaMtjNXepUugqD0XBCzYYP2AgWGLnwtbNwDRm41k9V6lS/eINhbfpSQBGq6WT0E
+BXWdN6IOLj3rwaRSg/7Qa9RmjtzG6RJOHSpXqhC8fF6CfaamyfItufUXJ63RDolUK5X6wK0dmBR4
+M0KGCqlztft0DbcbMBnEWg4cJ7faGND/isgFuvGqHKI3t+ZIpEYslOqodmJHixBTB0hXbOKSTbau
+BcvcwUpej6w9GU7C7WB1K9vBykLVAgMBAAGjYzBhMB8GA1UdIwQYMBaAFHKs5DN5qkWH9v2sHZ7W
+xy+G2CQ5MB0GA1UdDgQWBBRyrOQzeapFh/b9rB2e1scvhtgkOTAOBgNVHQ8BAf8EBAMCAQYwDwYD
+VR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEAoDtZpwmUPjaE0n4vOaWWl/oRrfxn83EJ
+8rKJhGdEr7nv7ZbsnGTbMjBvZ5qsfl+yqwE2foH65IRe0qw24GtixX1LDoJt0nZi0f6X+J8wfBj5
+tFJ3gh1229MdqfDBmgC9bXXYfef6xzijnHDoRnkDry5023X4blMMA8iZGok1GTzTyVR8qPAs5m4H
+eW9q4ebqkYJpCh3DflminmtGFZhb069GHWLIzoBSSRE/yQQSwxN8PzuKlts8oB4KtItUsiRnDe+C
+y748fdHif64W1lZYudogsYMVoe+KTTJvQS8TUoKU1xrBeKJR3Stwbbca+few4GeXVtt8YVMJAygC
+QMez2P2ccGrGKMOF6eLtGpOg3kuYooQ+BXcBlj37tCAPnHICehIv1aO6UXivKitEZU61/Qrowc15
+h2Er3oBXRb9n8ZuRXqWk7FlIEA04x7D6w0RtBPV4UBySllva9bguulvP5fBqnUsvWHMtTy3EHD70
+sz+rFQ47GUGKpMFXEmZxTPpT41frYpUJnlTd0cI8Vzy9OK2YZLe4A5pTVmBds9hCG1xLEooc6+t9
+xnppxyd/pPiL8uSUZodL6ZQHCRJ5irLrdATczvREWeAWysUsWNc8e89ihmpQfTU2Zqf7N+cox9jQ
+raVplI/owd8k+BsHMYeB2F326CjYSlKArBPuUBQemMc=
+-----END CERTIFICATE-----
+
+D-TRUST BR Root CA 1 2020
+=========================
+-----BEGIN CERTIFICATE-----
+MIIC2zCCAmCgAwIBAgIQfMmPK4TX3+oPyWWa00tNljAKBggqhkjOPQQDAzBIMQswCQYDVQQGEwJE
+RTEVMBMGA1UEChMMRC1UcnVzdCBHbWJIMSIwIAYDVQQDExlELVRSVVNUIEJSIFJvb3QgQ0EgMSAy
+MDIwMB4XDTIwMDIxMTA5NDUwMFoXDTM1MDIxMTA5NDQ1OVowSDELMAkGA1UEBhMCREUxFTATBgNV
+BAoTDEQtVHJ1c3QgR21iSDEiMCAGA1UEAxMZRC1UUlVTVCBCUiBSb290IENBIDEgMjAyMDB2MBAG
+ByqGSM49AgEGBSuBBAAiA2IABMbLxyjR+4T1mu9CFCDhQ2tuda38KwOE1HaTJddZO0Flax7mNCq7
+dPYSzuht56vkPE4/RAiLzRZxy7+SmfSk1zxQVFKQhYN4lGdnoxwJGT11NIXe7WB9xwy0QVK5buXu
+QqOCAQ0wggEJMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFHOREKv/VbNafAkl1bK6CKBrqx9t
+MA4GA1UdDwEB/wQEAwIBBjCBxgYDVR0fBIG+MIG7MD6gPKA6hjhodHRwOi8vY3JsLmQtdHJ1c3Qu
+bmV0L2NybC9kLXRydXN0X2JyX3Jvb3RfY2FfMV8yMDIwLmNybDB5oHegdYZzbGRhcDovL2RpcmVj
+dG9yeS5kLXRydXN0Lm5ldC9DTj1ELVRSVVNUJTIwQlIlMjBSb290JTIwQ0ElMjAxJTIwMjAyMCxP
+PUQtVHJ1c3QlMjBHbWJILEM9REU/Y2VydGlmaWNhdGVyZXZvY2F0aW9ubGlzdDAKBggqhkjOPQQD
+AwNpADBmAjEAlJAtE/rhY/hhY+ithXhUkZy4kzg+GkHaQBZTQgjKL47xPoFWwKrY7RjEsK70Pvom
+AjEA8yjixtsrmfu3Ubgko6SUeho/5jbiA1czijDLgsfWFBHVdWNbFJWcHwHP2NVypw87
+-----END CERTIFICATE-----
+
+D-TRUST EV Root CA 1 2020
+=========================
+-----BEGIN CERTIFICATE-----
+MIIC2zCCAmCgAwIBAgIQXwJB13qHfEwDo6yWjfv/0DAKBggqhkjOPQQDAzBIMQswCQYDVQQGEwJE
+RTEVMBMGA1UEChMMRC1UcnVzdCBHbWJIMSIwIAYDVQQDExlELVRSVVNUIEVWIFJvb3QgQ0EgMSAy
+MDIwMB4XDTIwMDIxMTEwMDAwMFoXDTM1MDIxMTA5NTk1OVowSDELMAkGA1UEBhMCREUxFTATBgNV
+BAoTDEQtVHJ1c3QgR21iSDEiMCAGA1UEAxMZRC1UUlVTVCBFViBSb290IENBIDEgMjAyMDB2MBAG
+ByqGSM49AgEGBSuBBAAiA2IABPEL3YZDIBnfl4XoIkqbz52Yv7QFJsnL46bSj8WeeHsxiamJrSc8
+ZRCC/N/DnU7wMyPE0jL1HLDfMxddxfCxivnvubcUyilKwg+pf3VlSSowZ/Rk99Yad9rDwpdhQntJ
+raOCAQ0wggEJMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFH8QARY3OqQo5FD4pPfsazK2/umL
+MA4GA1UdDwEB/wQEAwIBBjCBxgYDVR0fBIG+MIG7MD6gPKA6hjhodHRwOi8vY3JsLmQtdHJ1c3Qu
+bmV0L2NybC9kLXRydXN0X2V2X3Jvb3RfY2FfMV8yMDIwLmNybDB5oHegdYZzbGRhcDovL2RpcmVj
+dG9yeS5kLXRydXN0Lm5ldC9DTj1ELVRSVVNUJTIwRVYlMjBSb290JTIwQ0ElMjAxJTIwMjAyMCxP
+PUQtVHJ1c3QlMjBHbWJILEM9REU/Y2VydGlmaWNhdGVyZXZvY2F0aW9ubGlzdDAKBggqhkjOPQQD
+AwNpADBmAjEAyjzGKnXCXnViOTYAYFqLwZOZzNnbQTs7h5kXO9XMT8oi96CAy/m0sRtW9XLS/BnR
+AjEAkfcwkz8QRitxpNA7RJvAKQIFskF3UfN5Wp6OFKBOQtJbgfM0agPnIjhQW+0ZT0MW
+-----END CERTIFICATE-----
+
+DigiCert TLS ECC P384 Root G5
+=============================
+-----BEGIN CERTIFICATE-----
+MIICGTCCAZ+gAwIBAgIQCeCTZaz32ci5PhwLBCou8zAKBggqhkjOPQQDAzBOMQswCQYDVQQGEwJV
+UzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xJjAkBgNVBAMTHURpZ2lDZXJ0IFRMUyBFQ0MgUDM4
+NCBSb290IEc1MB4XDTIxMDExNTAwMDAwMFoXDTQ2MDExNDIzNTk1OVowTjELMAkGA1UEBhMCVVMx
+FzAVBgNVBAoTDkRpZ2lDZXJ0LCBJbmMuMSYwJAYDVQQDEx1EaWdpQ2VydCBUTFMgRUNDIFAzODQg
+Um9vdCBHNTB2MBAGByqGSM49AgEGBSuBBAAiA2IABMFEoc8Rl1Ca3iOCNQfN0MsYndLxf3c1Tzvd
+lHJS7cI7+Oz6e2tYIOyZrsn8aLN1udsJ7MgT9U7GCh1mMEy7H0cKPGEQQil8pQgO4CLp0zVozptj
+n4S1mU1YoI71VOeVyaNCMEAwHQYDVR0OBBYEFMFRRVBZqz7nLFr6ICISB4CIfBFqMA4GA1UdDwEB
+/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MAoGCCqGSM49BAMDA2gAMGUCMQCJao1H5+z8blUD2Wds
+Jk6Dxv3J+ysTvLd6jLRl0mlpYxNjOyZQLgGheQaRnUi/wr4CMEfDFXuxoJGZSZOoPHzoRgaLLPIx
+AJSdYsiJvRmEFOml+wG4DXZDjC5Ty3zfDBeWUA==
+-----END CERTIFICATE-----
+
+DigiCert TLS RSA4096 Root G5
+============================
+-----BEGIN CERTIFICATE-----
+MIIFZjCCA06gAwIBAgIQCPm0eKj6ftpqMzeJ3nzPijANBgkqhkiG9w0BAQwFADBNMQswCQYDVQQG
+EwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xJTAjBgNVBAMTHERpZ2lDZXJ0IFRMUyBSU0E0
+MDk2IFJvb3QgRzUwHhcNMjEwMTE1MDAwMDAwWhcNNDYwMTE0MjM1OTU5WjBNMQswCQYDVQQGEwJV
+UzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xJTAjBgNVBAMTHERpZ2lDZXJ0IFRMUyBSU0E0MDk2
+IFJvb3QgRzUwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCz0PTJeRGd/fxmgefM1eS8
+7IE+ajWOLrfn3q/5B03PMJ3qCQuZvWxX2hhKuHisOjmopkisLnLlvevxGs3npAOpPxG02C+JFvuU
+AT27L/gTBaF4HI4o4EXgg/RZG5Wzrn4DReW+wkL+7vI8toUTmDKdFqgpwgscONyfMXdcvyej/Ces
+tyu9dJsXLfKB2l2w4SMXPohKEiPQ6s+d3gMXsUJKoBZMpG2T6T867jp8nVid9E6P/DsjyG244gXa
+zOvswzH016cpVIDPRFtMbzCe88zdH5RDnU1/cHAN1DrRN/BsnZvAFJNY781BOHW8EwOVfH/jXOnV
+DdXifBBiqmvwPXbzP6PosMH976pXTayGpxi0KcEsDr9kvimM2AItzVwv8n/vFfQMFawKsPHTDU9q
+TXeXAaDxZre3zu/O7Oyldcqs4+Fj97ihBMi8ez9dLRYiVu1ISf6nL3kwJZu6ay0/nTvEF+cdLvvy
+z6b84xQslpghjLSR6Rlgg/IwKwZzUNWYOwbpx4oMYIwo+FKbbuH2TbsGJJvXKyY//SovcfXWJL5/
+MZ4PbeiPT02jP/816t9JXkGPhvnxd3lLG7SjXi/7RgLQZhNeXoVPzthwiHvOAbWWl9fNff2C+MIk
+wcoBOU+NosEUQB+cZtUMCUbW8tDRSHZWOkPLtgoRObqME2wGtZ7P6wIDAQABo0IwQDAdBgNVHQ4E
+FgQUUTMc7TZArxfTJc1paPKvTiM+s0EwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8w
+DQYJKoZIhvcNAQEMBQADggIBAGCmr1tfV9qJ20tQqcQjNSH/0GEwhJG3PxDPJY7Jv0Y02cEhJhxw
+GXIeo8mH/qlDZJY6yFMECrZBu8RHANmfGBg7sg7zNOok992vIGCukihfNudd5N7HPNtQOa27PShN
+lnx2xlv0wdsUpasZYgcYQF+Xkdycx6u1UQ3maVNVzDl92sURVXLFO4uJ+DQtpBflF+aZfTCIITfN
+MBc9uPK8qHWgQ9w+iUuQrm0D4ByjoJYJu32jtyoQREtGBzRj7TG5BO6jm5qu5jF49OokYTurWGT/
+u4cnYiWB39yhL/btp/96j1EuMPikAdKFOV8BmZZvWltwGUb+hmA+rYAQCd05JS9Yf7vSdPD3Rh9G
+OUrYU9DzLjtxpdRv/PNn5AeP3SYZ4Y1b+qOTEZvpyDrDVWiakuFSdjjo4bq9+0/V77PnSIMx8IIh
+47a+p6tv75/fTM8BuGJqIz3nCU2AG3swpMPdB380vqQmsvZB6Akd4yCYqjdP//fx4ilwMUc/dNAU
+FvohigLVigmUdy7yWSiLfFCSCmZ4OIN1xLVaqBHG5cGdZlXPU8Sv13WFqUITVuwhd4GTWgzqltlJ
+yqEI8pc7bZsEGCREjnwB8twl2F6GmrE52/WRMmrRpnCKovfepEWFJqgejF0pW8hL2JpqA15w8oVP
+bEtoL8pU9ozaMv7Da4M/OMZ+
+-----END CERTIFICATE-----
+
+Certainly Root R1
+=================
+-----BEGIN CERTIFICATE-----
+MIIFRzCCAy+gAwIBAgIRAI4P+UuQcWhlM1T01EQ5t+AwDQYJKoZIhvcNAQELBQAwPTELMAkGA1UE
+BhMCVVMxEjAQBgNVBAoTCUNlcnRhaW5seTEaMBgGA1UEAxMRQ2VydGFpbmx5IFJvb3QgUjEwHhcN
+MjEwNDAxMDAwMDAwWhcNNDYwNDAxMDAwMDAwWjA9MQswCQYDVQQGEwJVUzESMBAGA1UEChMJQ2Vy
+dGFpbmx5MRowGAYDVQQDExFDZXJ0YWlubHkgUm9vdCBSMTCCAiIwDQYJKoZIhvcNAQEBBQADggIP
+ADCCAgoCggIBANA21B/q3avk0bbm+yLA3RMNansiExyXPGhjZjKcA7WNpIGD2ngwEc/csiu+kr+O
+5MQTvqRoTNoCaBZ0vrLdBORrKt03H2As2/X3oXyVtwxwhi7xOu9S98zTm/mLvg7fMbedaFySpvXl
+8wo0tf97ouSHocavFwDvA5HtqRxOcT3Si2yJ9HiG5mpJoM610rCrm/b01C7jcvk2xusVtyWMOvwl
+DbMicyF0yEqWYZL1LwsYpfSt4u5BvQF5+paMjRcCMLT5r3gajLQ2EBAHBXDQ9DGQilHFhiZ5shGI
+XsXwClTNSaa/ApzSRKft43jvRl5tcdF5cBxGX1HpyTfcX35pe0HfNEXgO4T0oYoKNp43zGJS4YkN
+KPl6I7ENPT2a/Z2B7yyQwHtETrtJ4A5KVpK8y7XdeReJkd5hiXSSqOMyhb5OhaRLWcsrxXiOcVTQ
+AjeZjOVJ6uBUcqQRBi8LjMFbvrWhsFNunLhgkR9Za/kt9JQKl7XsxXYDVBtlUrpMklZRNaBA2Cnb
+rlJ2Oy0wQJuK0EJWtLeIAaSHO1OWzaMWj/Nmqhexx2DgwUMFDO6bW2BvBlyHWyf5QBGenDPBt+U1
+VwV/J84XIIwc/PH72jEpSe31C4SnT8H2TsIonPru4K8H+zMReiFPCyEQtkA6qyI6BJyLm4SGcprS
+p6XEtHWRqSsjAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1Ud
+DgQWBBTgqj8ljZ9EXME66C6ud0yEPmcM9DANBgkqhkiG9w0BAQsFAAOCAgEAuVevuBLaV4OPaAsz
+HQNTVfSVcOQrPbA56/qJYv331hgELyE03fFo8NWWWt7CgKPBjcZq91l3rhVkz1t5BXdm6ozTaw3d
+8VkswTOlMIAVRQdFGjEitpIAq5lNOo93r6kiyi9jyhXWx8bwPWz8HA2YEGGeEaIi1wrykXprOQ4v
+MMM2SZ/g6Q8CRFA3lFV96p/2O7qUpUzpvD5RtOjKkjZUbVwlKNrdrRT90+7iIgXr0PK3aBLXWopB
+GsaSpVo7Y0VPv+E6dyIvXL9G+VoDhRNCX8reU9ditaY1BMJH/5n9hN9czulegChB8n3nHpDYT3Y+
+gjwN/KUD+nsa2UUeYNrEjvn8K8l7lcUq/6qJ34IxD3L/DCfXCh5WAFAeDJDBlrXYFIW7pw0WwfgH
+JBu6haEaBQmAupVjyTrsJZ9/nbqkRxWbRHDxakvWOF5D8xh+UG7pWijmZeZ3Gzr9Hb4DJqPb1OG7
+fpYnKx3upPvaJVQTA945xsMfTZDsjxtK0hzthZU4UHlG1sGQUDGpXJpuHfUzVounmdLyyCwzk5Iw
+x06MZTMQZBf9JBeW0Y3COmor6xOLRPIh80oat3df1+2IpHLlOR+Vnb5nwXARPbv0+Em34yaXOp/S
+X3z7wJl8OSngex2/DaeP0ik0biQVy96QXr8axGbqwua6OV+KmalBWQewLK8=
+-----END CERTIFICATE-----
+
+Certainly Root E1
+=================
+-----BEGIN CERTIFICATE-----
+MIIB9zCCAX2gAwIBAgIQBiUzsUcDMydc+Y2aub/M+DAKBggqhkjOPQQDAzA9MQswCQYDVQQGEwJV
+UzESMBAGA1UEChMJQ2VydGFpbmx5MRowGAYDVQQDExFDZXJ0YWlubHkgUm9vdCBFMTAeFw0yMTA0
+MDEwMDAwMDBaFw00NjA0MDEwMDAwMDBaMD0xCzAJBgNVBAYTAlVTMRIwEAYDVQQKEwlDZXJ0YWlu
+bHkxGjAYBgNVBAMTEUNlcnRhaW5seSBSb290IEUxMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE3m/4
+fxzf7flHh4axpMCK+IKXgOqPyEpeKn2IaKcBYhSRJHpcnqMXfYqGITQYUBsQ3tA3SybHGWCA6TS9
+YBk2QNYphwk8kXr2vBMj3VlOBF7PyAIcGFPBMdjaIOlEjeR2o0IwQDAOBgNVHQ8BAf8EBAMCAQYw
+DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU8ygYy2R17ikq6+2uI1g4hevIIgcwCgYIKoZIzj0E
+AwMDaAAwZQIxALGOWiDDshliTd6wT99u0nCK8Z9+aozmut6Dacpps6kFtZaSF4fC0urQe87YQVt8
+rgIwRt7qy12a7DLCZRawTDBcMPPaTnOGBtjOiQRINzf43TNRnXCve1XYAS59BWQOhriR
+-----END CERTIFICATE-----
+
+E-Tugra Global Root CA RSA v3
+=============================
+-----BEGIN CERTIFICATE-----
+MIIF8zCCA9ugAwIBAgIUDU3FzRYilZYIfrgLfxUGNPt5EDQwDQYJKoZIhvcNAQELBQAwgYAxCzAJ
+BgNVBAYTAlRSMQ8wDQYDVQQHEwZBbmthcmExGTAXBgNVBAoTEEUtVHVncmEgRUJHIEEuUy4xHTAb
+BgNVBAsTFEUtVHVncmEgVHJ1c3QgQ2VudGVyMSYwJAYDVQQDEx1FLVR1Z3JhIEdsb2JhbCBSb290
+IENBIFJTQSB2MzAeFw0yMDAzMTgwOTA3MTdaFw00NTAzMTIwOTA3MTdaMIGAMQswCQYDVQQGEwJU
+UjEPMA0GA1UEBxMGQW5rYXJhMRkwFwYDVQQKExBFLVR1Z3JhIEVCRyBBLlMuMR0wGwYDVQQLExRF
+LVR1Z3JhIFRydXN0IENlbnRlcjEmMCQGA1UEAxMdRS1UdWdyYSBHbG9iYWwgUm9vdCBDQSBSU0Eg
+djMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCiZvCJt3J77gnJY9LTQ91ew6aEOErx
+jYG7FL1H6EAX8z3DeEVypi6Q3po61CBxyryfHUuXCscxuj7X/iWpKo429NEvx7epXTPcMHD4QGxL
+sqYxYdE0PD0xesevxKenhOGXpOhL9hd87jwH7eKKV9y2+/hDJVDqJ4GohryPUkqWOmAalrv9c/SF
+/YP9f4RtNGx/ardLAQO/rWm31zLZ9Vdq6YaCPqVmMbMWPcLzJmAy01IesGykNz709a/r4d+ABs8q
+QedmCeFLl+d3vSFtKbZnwy1+7dZ5ZdHPOrbRsV5WYVB6Ws5OUDGAA5hH5+QYfERaxqSzO8bGwzrw
+bMOLyKSRBfP12baqBqG3q+Sx6iEUXIOk/P+2UNOMEiaZdnDpwA+mdPy70Bt4znKS4iicvObpCdg6
+04nmvi533wEKb5b25Y08TVJ2Glbhc34XrD2tbKNSEhhw5oBOM/J+JjKsBY04pOZ2PJ8QaQ5tndLB
+eSBrW88zjdGUdjXnXVXHt6woq0bM5zshtQoK5EpZ3IE1S0SVEgpnpaH/WwAH0sDM+T/8nzPyAPiM
+bIedBi3x7+PmBvrFZhNb/FAHnnGGstpvdDDPk1Po3CLW3iAfYY2jLqN4MpBs3KwytQXk9TwzDdbg
+h3cXTJ2w2AmoDVf3RIXwyAS+XF1a4xeOVGNpf0l0ZAWMowIDAQABo2MwYTAPBgNVHRMBAf8EBTAD
+AQH/MB8GA1UdIwQYMBaAFLK0ruYt9ybVqnUtdkvAG1Mh0EjvMB0GA1UdDgQWBBSytK7mLfcm1ap1
+LXZLwBtTIdBI7zAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQELBQADggIBAImocn+M684uGMQQ
+gC0QDP/7FM0E4BQ8Tpr7nym/Ip5XuYJzEmMmtcyQ6dIqKe6cLcwsmb5FJ+Sxce3kOJUxQfJ9emN4
+38o2Fi+CiJ+8EUdPdk3ILY7r3y18Tjvarvbj2l0Upq7ohUSdBm6O++96SmotKygY/r+QLHUWnw/q
+ln0F7psTpURs+APQ3SPh/QMSEgj0GDSz4DcLdxEBSL9htLX4GdnLTeqjjO/98Aa1bZL0SmFQhO3s
+SdPkvmjmLuMxC1QLGpLWgti2omU8ZgT5Vdps+9u1FGZNlIM7zR6mK7L+d0CGq+ffCsn99t2HVhjY
+sCxVYJb6CH5SkPVLpi6HfMsg2wY+oF0Dd32iPBMbKaITVaA9FCKvb7jQmhty3QUBjYZgv6Rn7rWl
+DdF/5horYmbDB7rnoEgcOMPpRfunf/ztAmgayncSd6YAVSgU7NbHEqIbZULpkejLPoeJVF3Zr52X
+nGnnCv8PWniLYypMfUeUP95L6VPQMPHF9p5J3zugkaOj/s1YzOrfr28oO6Bpm4/srK4rVJ2bBLFH
+IK+WEj5jlB0E5y67hscMmoi/dkfv97ALl2bSRM9gUgfh1SxKOidhd8rXj+eHDjD/DLsE4mHDosiX
+YY60MGo8bcIHX0pzLz/5FooBZu+6kcpSV3uu1OYP3Qt6f4ueJiDPO++BcYNZ
+-----END CERTIFICATE-----
+
+E-Tugra Global Root CA ECC v3
+=============================
+-----BEGIN CERTIFICATE-----
+MIICpTCCAiqgAwIBAgIUJkYZdzHhT28oNt45UYbm1JeIIsEwCgYIKoZIzj0EAwMwgYAxCzAJBgNV
+BAYTAlRSMQ8wDQYDVQQHEwZBbmthcmExGTAXBgNVBAoTEEUtVHVncmEgRUJHIEEuUy4xHTAbBgNV
+BAsTFEUtVHVncmEgVHJ1c3QgQ2VudGVyMSYwJAYDVQQDEx1FLVR1Z3JhIEdsb2JhbCBSb290IENB
+IEVDQyB2MzAeFw0yMDAzMTgwOTQ2NThaFw00NTAzMTIwOTQ2NThaMIGAMQswCQYDVQQGEwJUUjEP
+MA0GA1UEBxMGQW5rYXJhMRkwFwYDVQQKExBFLVR1Z3JhIEVCRyBBLlMuMR0wGwYDVQQLExRFLVR1
+Z3JhIFRydXN0IENlbnRlcjEmMCQGA1UEAxMdRS1UdWdyYSBHbG9iYWwgUm9vdCBDQSBFQ0MgdjMw
+djAQBgcqhkjOPQIBBgUrgQQAIgNiAASOmCm/xxAeJ9urA8woLNheSBkQKczLWYHMjLiSF4mDKpL2
+w6QdTGLVn9agRtwcvHbB40fQWxPa56WzZkjnIZpKT4YKfWzqTTKACrJ6CZtpS5iB4i7sAnCWH/31
+Rs7K3IKjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAU/4Ixcj75xGZsrTie0bBRiKWQ
+zPUwHQYDVR0OBBYEFP+CMXI++cRmbK04ntGwUYilkMz1MA4GA1UdDwEB/wQEAwIBBjAKBggqhkjO
+PQQDAwNpADBmAjEA5gVYaWHlLcoNy/EZCL3W/VGSGn5jVASQkZo1kTmZ+gepZpO6yGjUij/67W4W
+Aie3AjEA3VoXK3YdZUKWpqxdinlW2Iob35reX8dQj7FbcQwm32pAAOwzkSFxvmjkI6TZraE3
+-----END CERTIFICATE-----
+
+Security Communication RootCA3
+==============================
+-----BEGIN CERTIFICATE-----
+MIIFfzCCA2egAwIBAgIJAOF8N0D9G/5nMA0GCSqGSIb3DQEBDAUAMF0xCzAJBgNVBAYTAkpQMSUw
+IwYDVQQKExxTRUNPTSBUcnVzdCBTeXN0ZW1zIENPLixMVEQuMScwJQYDVQQDEx5TZWN1cml0eSBD
+b21tdW5pY2F0aW9uIFJvb3RDQTMwHhcNMTYwNjE2MDYxNzE2WhcNMzgwMTE4MDYxNzE2WjBdMQsw
+CQYDVQQGEwJKUDElMCMGA1UEChMcU0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEnMCUGA1UE
+AxMeU2VjdXJpdHkgQ29tbXVuaWNhdGlvbiBSb290Q0EzMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A
+MIICCgKCAgEA48lySfcw3gl8qUCBWNO0Ot26YQ+TUG5pPDXC7ltzkBtnTCHsXzW7OT4rCmDvu20r
+hvtxosis5FaU+cmvsXLUIKx00rgVrVH+hXShuRD+BYD5UpOzQD11EKzAlrenfna84xtSGc4RHwsE
+NPXY9Wk8d/Nk9A2qhd7gCVAEF5aEt8iKvE1y/By7z/MGTfmfZPd+pmaGNXHIEYBMwXFAWB6+oHP2
+/D5Q4eAvJj1+XCO1eXDe+uDRpdYMQXF79+qMHIjH7Iv10S9VlkZ8WjtYO/u62C21Jdp6Ts9EriGm
+npjKIG58u4iFW/vAEGK78vknR+/RiTlDxN/e4UG/VHMgly1s2vPUB6PmudhvrvyMGS7TZ2crldtY
+XLVqAvO4g160a75BflcJdURQVc1aEWEhCmHCqYj9E7wtiS/NYeCVvsq1e+F7NGcLH7YMx3weGVPK
+p7FKFSBWFHA9K4IsD50VHUeAR/94mQ4xr28+j+2GaR57GIgUssL8gjMunEst+3A7caoreyYn8xrC
+3PsXuKHqy6C0rtOUfnrQq8PsOC0RLoi/1D+tEjtCrI8Cbn3M0V9hvqG8OmpI6iZVIhZdXw3/JzOf
+GAN0iltSIEdrRU0id4xVJ/CvHozJgyJUt5rQT9nO/NkuHJYosQLTA70lUhw0Zk8jq/R3gpYd0Vcw
+CBEF/VfR2ccCAwEAAaNCMEAwHQYDVR0OBBYEFGQUfPxYchamCik0FW8qy7z8r6irMA4GA1UdDwEB
+/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBDAUAA4ICAQDcAiMI4u8hOscNtybS
+YpOnpSNyByCCYN8Y11StaSWSntkUz5m5UoHPrmyKO1o5yGwBQ8IibQLwYs1OY0PAFNr0Y/Dq9HHu
+Tofjcan0yVflLl8cebsjqodEV+m9NU1Bu0soo5iyG9kLFwfl9+qd9XbXv8S2gVj/yP9kaWJ5rW4O
+H3/uHWnlt3Jxs/6lATWUVCvAUm2PVcTJ0rjLyjQIUYWg9by0F1jqClx6vWPGOi//lkkZhOpn2ASx
+YfQAW0q3nHE3GYV5v4GwxxMOdnE+OoAGrgYWp421wsTL/0ClXI2lyTrtcoHKXJg80jQDdwj98ClZ
+XSEIx2C/pHF7uNkegr4Jr2VvKKu/S7XuPghHJ6APbw+LP6yVGPO5DtxnVW5inkYO0QR4ynKudtml
++LLfiAlhi+8kTtFZP1rUPcmTPCtk9YENFpb3ksP+MW/oKjJ0DvRMmEoYDjBU1cXrvMUVnuiZIesn
+KwkK2/HmcBhWuwzkvvnoEKQTkrgc4NtnHVMDpCKn3F2SEDzq//wbEBrD2NCcnWXL0CsnMQMeNuE9
+dnUM/0Umud1RvCPHX9jYhxBAEg09ODfnRDwYwFMJZI//1ZqmfHAuc1Uh6N//g7kdPjIe1qZ9LPFm
+6Vwdp6POXiUyK+OVrCoHzrQoeIY8LaadTdJ0MN1kURXbg4NR16/9M51NZg==
+-----END CERTIFICATE-----
+
+Security Communication ECC RootCA1
+==================================
+-----BEGIN CERTIFICATE-----
+MIICODCCAb6gAwIBAgIJANZdm7N4gS7rMAoGCCqGSM49BAMDMGExCzAJBgNVBAYTAkpQMSUwIwYD
+VQQKExxTRUNPTSBUcnVzdCBTeXN0ZW1zIENPLixMVEQuMSswKQYDVQQDEyJTZWN1cml0eSBDb21t
+dW5pY2F0aW9uIEVDQyBSb290Q0ExMB4XDTE2MDYxNjA1MTUyOFoXDTM4MDExODA1MTUyOFowYTEL
+MAkGA1UEBhMCSlAxJTAjBgNVBAoTHFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xKzApBgNV
+BAMTIlNlY3VyaXR5IENvbW11bmljYXRpb24gRUNDIFJvb3RDQTEwdjAQBgcqhkjOPQIBBgUrgQQA
+IgNiAASkpW9gAwPDvTH00xecK4R1rOX9PVdu12O/5gSJko6BnOPpR27KkBLIE+CnnfdldB9sELLo
+5OnvbYUymUSxXv3MdhDYW72ixvnWQuRXdtyQwjWpS4g8EkdtXP9JTxpKULGjQjBAMB0GA1UdDgQW
+BBSGHOf+LaVKiwj+KBH6vqNm+GBZLzAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAK
+BggqhkjOPQQDAwNoADBlAjAVXUI9/Lbu9zuxNuie9sRGKEkz0FhDKmMpzE2xtHqiuQ04pV1IKv3L
+snNdo4gIxwwCMQDAqy0Obe0YottT6SXbVQjgUMzfRGEWgqtJsLKB7HOHeLRMsmIbEvoWTSVLY70e
+N9k=
+-----END CERTIFICATE-----
diff --git a/includes/vendor/composer/installed.json b/includes/vendor/composer/installed.json
index 88a7e87..9598e03 100644
--- a/includes/vendor/composer/installed.json
+++ b/includes/vendor/composer/installed.json
@@ -62,17 +62,17 @@
},
{
"name": "composer/ca-bundle",
- "version": "1.3.1",
- "version_normalized": "1.3.1.0",
+ "version": "1.3.4",
+ "version_normalized": "1.3.4.0",
"source": {
"type": "git",
"url": "https://github.com/composer/ca-bundle.git",
- "reference": "4c679186f2aca4ab6a0f1b0b9cf9252decb44d0b"
+ "reference": "69098eca243998b53eed7a48d82dedd28b447cd5"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/composer/ca-bundle/zipball/4c679186f2aca4ab6a0f1b0b9cf9252decb44d0b",
- "reference": "4c679186f2aca4ab6a0f1b0b9cf9252decb44d0b",
+ "url": "https://api.github.com/repos/composer/ca-bundle/zipball/69098eca243998b53eed7a48d82dedd28b447cd5",
+ "reference": "69098eca243998b53eed7a48d82dedd28b447cd5",
"shasum": ""
},
"require": {
@@ -86,7 +86,7 @@
"symfony/phpunit-bridge": "^4.2 || ^5",
"symfony/process": "^2.5 || ^3.0 || ^4.0 || ^5.0 || ^6.0"
},
- "time": "2021-10-28T20:44:15+00:00",
+ "time": "2022-10-12T12:08:29+00:00",
"type": "library",
"extra": {
"branch-alias": {
@@ -121,7 +121,7 @@
"support": {
"irc": "irc://irc.freenode.org/composer",
"issues": "https://github.com/composer/ca-bundle/issues",
- "source": "https://github.com/composer/ca-bundle/tree/1.3.1"
+ "source": "https://github.com/composer/ca-bundle/tree/1.3.4"
},
"funding": [
{
@@ -141,17 +141,17 @@
},
{
"name": "geoip2/geoip2",
- "version": "v2.12.2",
- "version_normalized": "2.12.2.0",
+ "version": "v2.13.0",
+ "version_normalized": "2.13.0.0",
"source": {
"type": "git",
- "url": "https://github.com/maxmind/GeoIP2-php.git",
- "reference": "83adb44ac4b9553d36b579a14673ed124583082f"
+ "url": "git@github.com:maxmind/GeoIP2-php.git",
+ "reference": "6a41d8fbd6b90052bc34dff3b4252d0f88067b23"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/maxmind/GeoIP2-php/zipball/83adb44ac4b9553d36b579a14673ed124583082f",
- "reference": "83adb44ac4b9553d36b579a14673ed124583082f",
+ "url": "https://api.github.com/repos/maxmind/GeoIP2-php/zipball/6a41d8fbd6b90052bc34dff3b4252d0f88067b23",
+ "reference": "6a41d8fbd6b90052bc34dff3b4252d0f88067b23",
"shasum": ""
},
"require": {
@@ -166,7 +166,7 @@
"phpunit/phpunit": "^8.0 || ^9.0",
"squizlabs/php_codesniffer": "3.*"
},
- "time": "2021-11-30T18:15:25+00:00",
+ "time": "2022-08-05T20:32:58+00:00",
"type": "library",
"installation-source": "dist",
"autoload": {
@@ -194,10 +194,6 @@
"geolocation",
"maxmind"
],
- "support": {
- "issues": "https://github.com/maxmind/GeoIP2-php/issues",
- "source": "https://github.com/maxmind/GeoIP2-php/tree/v2.12.2"
- },
"install-path": "../geoip2/geoip2"
},
{
@@ -360,23 +356,23 @@
},
{
"name": "ozh/bookmarkletgen",
- "version": "1.2",
- "version_normalized": "1.2.0.0",
+ "version": "1.2.2",
+ "version_normalized": "1.2.2.0",
"source": {
"type": "git",
"url": "https://github.com/ozh/bookmarkletgen.git",
- "reference": "3319b53c493a1474a03d1cc4e087617652284c20"
+ "reference": "65fffa64bb11f70470d398d7baf6d9bb84411cfc"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/ozh/bookmarkletgen/zipball/3319b53c493a1474a03d1cc4e087617652284c20",
- "reference": "3319b53c493a1474a03d1cc4e087617652284c20",
+ "url": "https://api.github.com/repos/ozh/bookmarkletgen/zipball/65fffa64bb11f70470d398d7baf6d9bb84411cfc",
+ "reference": "65fffa64bb11f70470d398d7baf6d9bb84411cfc",
"shasum": ""
},
"require": {
- "php": ">=5.3"
+ "php": ">=7.2"
},
- "time": "2017-05-18T12:46:21+00:00",
+ "time": "2022-05-04T13:05:16+00:00",
"type": "library",
"installation-source": "dist",
"autoload": {
@@ -400,31 +396,35 @@
"bookmarklet",
"javascript"
],
+ "support": {
+ "issues": "https://github.com/ozh/bookmarkletgen/issues",
+ "source": "https://github.com/ozh/bookmarkletgen/tree/1.2.2"
+ },
"install-path": "../ozh/bookmarkletgen"
},
{
"name": "pomo/pomo",
- "version": "v1.4.1",
- "version_normalized": "1.4.1.0",
+ "version": "v1.5.0",
+ "version_normalized": "1.5.0.0",
"source": {
"type": "git",
"url": "https://github.com/LeoColomb/pomo.git",
- "reference": "1594bd1f90c89a45ffc3da2ee6d5d582bfac7542"
+ "reference": "b1e53a997850496369634d574fa6b508091fc353"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/LeoColomb/pomo/zipball/1594bd1f90c89a45ffc3da2ee6d5d582bfac7542",
- "reference": "1594bd1f90c89a45ffc3da2ee6d5d582bfac7542",
+ "url": "https://api.github.com/repos/LeoColomb/pomo/zipball/b1e53a997850496369634d574fa6b508091fc353",
+ "reference": "b1e53a997850496369634d574fa6b508091fc353",
"shasum": ""
},
"require": {
"php": ">=5.3.0"
},
"require-dev": {
- "phpunit/phpunit": ">=4.0",
- "squizlabs/php_codesniffer": "^3.0 || ^2.9.1"
+ "phpunit/phpunit": "^4.0 || ^7.0",
+ "squizlabs/php_codesniffer": "^3.0"
},
- "time": "2018-12-20T14:55:38+00:00",
+ "time": "2023-01-06T01:05:43+00:00",
"type": "library",
"installation-source": "dist",
"autoload": {
@@ -448,7 +448,7 @@
"role": "Maintainer"
}
],
- "description": "Gettext library to translate with I18n",
+ "description": "Gettext library to translate with i18n",
"homepage": "https://github.com/LeoColomb/pomo",
"keywords": [
"gettext",
@@ -457,6 +457,20 @@
"localization",
"translation"
],
+ "support": {
+ "issues": "https://github.com/LeoColomb/pomo/issues",
+ "source": "https://github.com/LeoColomb/pomo/tree/v1.5.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/LeoColomb",
+ "type": "github"
+ },
+ {
+ "url": "https://www.patreon.com/LeoColomb",
+ "type": "patreon"
+ }
+ ],
"install-path": "../pomo/pomo"
},
{
@@ -514,17 +528,17 @@
},
{
"name": "rmccue/requests",
- "version": "2.0.2",
- "version_normalized": "2.0.2.0",
+ "version": "v2.0.5",
+ "version_normalized": "2.0.5.0",
"source": {
"type": "git",
"url": "https://github.com/WordPress/Requests.git",
- "reference": "b01ce7c91657d604f298751686d7f5eec87b9493"
+ "reference": "b717f1d2f4ef7992ec0c127747ed8b7e170c2f49"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/WordPress/Requests/zipball/b01ce7c91657d604f298751686d7f5eec87b9493",
- "reference": "b01ce7c91657d604f298751686d7f5eec87b9493",
+ "url": "https://api.github.com/repos/WordPress/Requests/zipball/b717f1d2f4ef7992ec0c127747ed8b7e170c2f49",
+ "reference": "b717f1d2f4ef7992ec0c127747ed8b7e170c2f49",
"shasum": ""
},
"require": {
@@ -542,7 +556,7 @@
"wp-coding-standards/wpcs": "^2.0",
"yoast/phpunit-polyfills": "^1.0.0"
},
- "time": "2022-03-28T15:37:07+00:00",
+ "time": "2022-10-11T08:15:28+00:00",
"type": "library",
"installation-source": "dist",
"autoload": {
@@ -598,17 +612,17 @@
},
{
"name": "spatie/array-to-xml",
- "version": "2.16.0",
- "version_normalized": "2.16.0.0",
+ "version": "2.17.1",
+ "version_normalized": "2.17.1.0",
"source": {
"type": "git",
"url": "https://github.com/spatie/array-to-xml.git",
- "reference": "db39308c5236b69b89cadc3f44f191704814eae2"
+ "reference": "5cbec9c6ab17e320c58a259f0cebe88bde4a7c46"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/spatie/array-to-xml/zipball/db39308c5236b69b89cadc3f44f191704814eae2",
- "reference": "db39308c5236b69b89cadc3f44f191704814eae2",
+ "url": "https://api.github.com/repos/spatie/array-to-xml/zipball/5cbec9c6ab17e320c58a259f0cebe88bde4a7c46",
+ "reference": "5cbec9c6ab17e320c58a259f0cebe88bde4a7c46",
"shasum": ""
},
"require": {
@@ -617,10 +631,11 @@
},
"require-dev": {
"mockery/mockery": "^1.2",
+ "pestphp/pest": "^1.21",
"phpunit/phpunit": "^9.0",
- "spatie/phpunit-snapshot-assertions": "^4.2"
+ "spatie/pest-plugin-snapshots": "^1.1"
},
- "time": "2020-11-18T22:03:17+00:00",
+ "time": "2022-12-26T08:22:07+00:00",
"type": "library",
"installation-source": "dist",
"autoload": {
@@ -648,8 +663,7 @@
"xml"
],
"support": {
- "issues": "https://github.com/spatie/array-to-xml/issues",
- "source": "https://github.com/spatie/array-to-xml/tree/2.16.0"
+ "source": "https://github.com/spatie/array-to-xml/tree/2.17.1"
},
"funding": [
{
@@ -665,17 +679,17 @@
},
{
"name": "symfony/polyfill-intl-idn",
- "version": "v1.25.0",
- "version_normalized": "1.25.0.0",
+ "version": "v1.27.0",
+ "version_normalized": "1.27.0.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-idn.git",
- "reference": "749045c69efb97c70d25d7463abba812e91f3a44"
+ "reference": "639084e360537a19f9ee352433b84ce831f3d2da"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/749045c69efb97c70d25d7463abba812e91f3a44",
- "reference": "749045c69efb97c70d25d7463abba812e91f3a44",
+ "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/639084e360537a19f9ee352433b84ce831f3d2da",
+ "reference": "639084e360537a19f9ee352433b84ce831f3d2da",
"shasum": ""
},
"require": {
@@ -686,11 +700,11 @@
"suggest": {
"ext-intl": "For best performance"
},
- "time": "2021-09-14T14:02:44+00:00",
+ "time": "2022-11-03T14:55:06+00:00",
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "1.23-dev"
+ "dev-main": "1.27-dev"
},
"thanks": {
"name": "symfony/polyfill",
@@ -735,7 +749,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.25.0"
+ "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.27.0"
},
"funding": [
{
@@ -755,17 +769,17 @@
},
{
"name": "symfony/polyfill-intl-normalizer",
- "version": "v1.25.0",
- "version_normalized": "1.25.0.0",
+ "version": "v1.27.0",
+ "version_normalized": "1.27.0.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-normalizer.git",
- "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8"
+ "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8590a5f561694770bdcd3f9b5c69dde6945028e8",
- "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8",
+ "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/19bd1e4fcd5b91116f14d8533c57831ed00571b6",
+ "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6",
"shasum": ""
},
"require": {
@@ -774,11 +788,11 @@
"suggest": {
"ext-intl": "For best performance"
},
- "time": "2021-02-19T12:13:01+00:00",
+ "time": "2022-11-03T14:55:06+00:00",
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "1.23-dev"
+ "dev-main": "1.27-dev"
},
"thanks": {
"name": "symfony/polyfill",
@@ -822,7 +836,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.25.0"
+ "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.27.0"
},
"funding": [
{
@@ -842,17 +856,17 @@
},
{
"name": "symfony/polyfill-mbstring",
- "version": "v1.25.0",
- "version_normalized": "1.25.0.0",
+ "version": "v1.27.0",
+ "version_normalized": "1.27.0.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-mbstring.git",
- "reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825"
+ "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/0abb51d2f102e00a4eefcf46ba7fec406d245825",
- "reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825",
+ "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/8ad114f6b39e2c98a8b0e3bd907732c207c2b534",
+ "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534",
"shasum": ""
},
"require": {
@@ -864,11 +878,11 @@
"suggest": {
"ext-mbstring": "For best performance"
},
- "time": "2021-11-30T18:21:41+00:00",
+ "time": "2022-11-03T14:55:06+00:00",
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "1.23-dev"
+ "dev-main": "1.27-dev"
},
"thanks": {
"name": "symfony/polyfill",
@@ -908,7 +922,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.25.0"
+ "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.27.0"
},
"funding": [
{
@@ -928,27 +942,27 @@
},
{
"name": "symfony/polyfill-php72",
- "version": "v1.25.0",
- "version_normalized": "1.25.0.0",
+ "version": "v1.27.0",
+ "version_normalized": "1.27.0.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php72.git",
- "reference": "9a142215a36a3888e30d0a9eeea9766764e96976"
+ "reference": "869329b1e9894268a8a61dabb69153029b7a8c97"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/9a142215a36a3888e30d0a9eeea9766764e96976",
- "reference": "9a142215a36a3888e30d0a9eeea9766764e96976",
+ "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/869329b1e9894268a8a61dabb69153029b7a8c97",
+ "reference": "869329b1e9894268a8a61dabb69153029b7a8c97",
"shasum": ""
},
"require": {
"php": ">=7.1"
},
- "time": "2021-05-27T09:17:38+00:00",
+ "time": "2022-11-03T14:55:06+00:00",
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "1.23-dev"
+ "dev-main": "1.27-dev"
},
"thanks": {
"name": "symfony/polyfill",
@@ -987,7 +1001,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-php72/tree/v1.25.0"
+ "source": "https://github.com/symfony/polyfill-php72/tree/v1.27.0"
},
"funding": [
{
diff --git a/includes/vendor/composer/installed.php b/includes/vendor/composer/installed.php
index bbfbb2a..4358d2d 100644
--- a/includes/vendor/composer/installed.php
+++ b/includes/vendor/composer/installed.php
@@ -1,157 +1,157 @@
array(
+ 'name' => 'yourls/yourls',
'pretty_version' => 'dev-master',
'version' => 'dev-master',
+ 'reference' => '9f7806c525ef266bb74bdd501463799e45fe2be5',
'type' => 'project',
'install_path' => __DIR__ . '/../../../',
'aliases' => array(),
- 'reference' => '59464102ee27cb5c808625c92448a48cebefda6f',
- 'name' => 'yourls/yourls',
'dev' => true,
),
'versions' => array(
'aura/sql' => array(
'pretty_version' => '3.1.0',
'version' => '3.1.0.0',
+ 'reference' => '88d8b8ed1bcfd588a649fdc7e7ac89ec047abbca',
'type' => 'library',
'install_path' => __DIR__ . '/../aura/sql',
'aliases' => array(),
- 'reference' => '88d8b8ed1bcfd588a649fdc7e7ac89ec047abbca',
'dev_requirement' => false,
),
'composer/ca-bundle' => array(
- 'pretty_version' => '1.3.1',
- 'version' => '1.3.1.0',
+ 'pretty_version' => '1.3.4',
+ 'version' => '1.3.4.0',
+ 'reference' => '69098eca243998b53eed7a48d82dedd28b447cd5',
'type' => 'library',
'install_path' => __DIR__ . '/./ca-bundle',
'aliases' => array(),
- 'reference' => '4c679186f2aca4ab6a0f1b0b9cf9252decb44d0b',
'dev_requirement' => false,
),
'geoip2/geoip2' => array(
- 'pretty_version' => 'v2.12.2',
- 'version' => '2.12.2.0',
+ 'pretty_version' => 'v2.13.0',
+ 'version' => '2.13.0.0',
+ 'reference' => '6a41d8fbd6b90052bc34dff3b4252d0f88067b23',
'type' => 'library',
'install_path' => __DIR__ . '/../geoip2/geoip2',
'aliases' => array(),
- 'reference' => '83adb44ac4b9553d36b579a14673ed124583082f',
'dev_requirement' => false,
),
'jakeasmith/http_build_url' => array(
'pretty_version' => '1.0.1',
'version' => '1.0.1.0',
+ 'reference' => '93c273e77cb1edead0cf8bcf8cd2003428e74e37',
'type' => 'library',
'install_path' => __DIR__ . '/../jakeasmith/http_build_url',
'aliases' => array(),
- 'reference' => '93c273e77cb1edead0cf8bcf8cd2003428e74e37',
'dev_requirement' => false,
),
'maxmind-db/reader' => array(
'pretty_version' => 'v1.11.0',
'version' => '1.11.0.0',
+ 'reference' => 'b1f3c0699525336d09cc5161a2861268d9f2ae5b',
'type' => 'library',
'install_path' => __DIR__ . '/../maxmind-db/reader',
'aliases' => array(),
- 'reference' => 'b1f3c0699525336d09cc5161a2861268d9f2ae5b',
'dev_requirement' => false,
),
'maxmind/web-service-common' => array(
'pretty_version' => 'v0.9.0',
'version' => '0.9.0.0',
+ 'reference' => '4dc5a3e8df38aea4ca3b1096cee3a038094e9b53',
'type' => 'library',
'install_path' => __DIR__ . '/../maxmind/web-service-common',
'aliases' => array(),
- 'reference' => '4dc5a3e8df38aea4ca3b1096cee3a038094e9b53',
'dev_requirement' => false,
),
'ozh/bookmarkletgen' => array(
- 'pretty_version' => '1.2',
- 'version' => '1.2.0.0',
+ 'pretty_version' => '1.2.2',
+ 'version' => '1.2.2.0',
+ 'reference' => '65fffa64bb11f70470d398d7baf6d9bb84411cfc',
'type' => 'library',
'install_path' => __DIR__ . '/../ozh/bookmarkletgen',
'aliases' => array(),
- 'reference' => '3319b53c493a1474a03d1cc4e087617652284c20',
'dev_requirement' => false,
),
'pomo/pomo' => array(
- 'pretty_version' => 'v1.4.1',
- 'version' => '1.4.1.0',
+ 'pretty_version' => 'v1.5.0',
+ 'version' => '1.5.0.0',
+ 'reference' => 'b1e53a997850496369634d574fa6b508091fc353',
'type' => 'library',
'install_path' => __DIR__ . '/../pomo/pomo',
'aliases' => array(),
- 'reference' => '1594bd1f90c89a45ffc3da2ee6d5d582bfac7542',
'dev_requirement' => false,
),
'psr/log' => array(
'pretty_version' => '1.1.4',
'version' => '1.1.4.0',
+ 'reference' => 'd49695b909c3b7628b6289db5479a1c204601f11',
'type' => 'library',
'install_path' => __DIR__ . '/../psr/log',
'aliases' => array(),
- 'reference' => 'd49695b909c3b7628b6289db5479a1c204601f11',
'dev_requirement' => false,
),
'rmccue/requests' => array(
- 'pretty_version' => '2.0.2',
- 'version' => '2.0.2.0',
+ 'pretty_version' => 'v2.0.5',
+ 'version' => '2.0.5.0',
+ 'reference' => 'b717f1d2f4ef7992ec0c127747ed8b7e170c2f49',
'type' => 'library',
'install_path' => __DIR__ . '/../rmccue/requests',
'aliases' => array(),
- 'reference' => 'b01ce7c91657d604f298751686d7f5eec87b9493',
'dev_requirement' => false,
),
'spatie/array-to-xml' => array(
- 'pretty_version' => '2.16.0',
- 'version' => '2.16.0.0',
+ 'pretty_version' => '2.17.1',
+ 'version' => '2.17.1.0',
+ 'reference' => '5cbec9c6ab17e320c58a259f0cebe88bde4a7c46',
'type' => 'library',
'install_path' => __DIR__ . '/../spatie/array-to-xml',
'aliases' => array(),
- 'reference' => 'db39308c5236b69b89cadc3f44f191704814eae2',
'dev_requirement' => false,
),
'symfony/polyfill-intl-idn' => array(
- 'pretty_version' => 'v1.25.0',
- 'version' => '1.25.0.0',
+ 'pretty_version' => 'v1.27.0',
+ 'version' => '1.27.0.0',
+ 'reference' => '639084e360537a19f9ee352433b84ce831f3d2da',
'type' => 'library',
'install_path' => __DIR__ . '/../symfony/polyfill-intl-idn',
'aliases' => array(),
- 'reference' => '749045c69efb97c70d25d7463abba812e91f3a44',
'dev_requirement' => false,
),
'symfony/polyfill-intl-normalizer' => array(
- 'pretty_version' => 'v1.25.0',
- 'version' => '1.25.0.0',
+ 'pretty_version' => 'v1.27.0',
+ 'version' => '1.27.0.0',
+ 'reference' => '19bd1e4fcd5b91116f14d8533c57831ed00571b6',
'type' => 'library',
'install_path' => __DIR__ . '/../symfony/polyfill-intl-normalizer',
'aliases' => array(),
- 'reference' => '8590a5f561694770bdcd3f9b5c69dde6945028e8',
'dev_requirement' => false,
),
'symfony/polyfill-mbstring' => array(
- 'pretty_version' => 'v1.25.0',
- 'version' => '1.25.0.0',
+ 'pretty_version' => 'v1.27.0',
+ 'version' => '1.27.0.0',
+ 'reference' => '8ad114f6b39e2c98a8b0e3bd907732c207c2b534',
'type' => 'library',
'install_path' => __DIR__ . '/../symfony/polyfill-mbstring',
'aliases' => array(),
- 'reference' => '0abb51d2f102e00a4eefcf46ba7fec406d245825',
'dev_requirement' => false,
),
'symfony/polyfill-php72' => array(
- 'pretty_version' => 'v1.25.0',
- 'version' => '1.25.0.0',
+ 'pretty_version' => 'v1.27.0',
+ 'version' => '1.27.0.0',
+ 'reference' => '869329b1e9894268a8a61dabb69153029b7a8c97',
'type' => 'library',
'install_path' => __DIR__ . '/../symfony/polyfill-php72',
'aliases' => array(),
- 'reference' => '9a142215a36a3888e30d0a9eeea9766764e96976',
'dev_requirement' => false,
),
'yourls/yourls' => array(
'pretty_version' => 'dev-master',
'version' => 'dev-master',
+ 'reference' => '9f7806c525ef266bb74bdd501463799e45fe2be5',
'type' => 'project',
'install_path' => __DIR__ . '/../../../',
'aliases' => array(),
- 'reference' => '59464102ee27cb5c808625c92448a48cebefda6f',
'dev_requirement' => false,
),
),
diff --git a/includes/vendor/geoip2/geoip2/README.md b/includes/vendor/geoip2/geoip2/README.md
index 9d92e6f..ea08e27 100644
--- a/includes/vendor/geoip2/geoip2/README.md
+++ b/includes/vendor/geoip2/geoip2/README.md
@@ -258,6 +258,18 @@ print($record->network . "\n"); // '128.101.101.101/32'
```
+## Database Updates ##
+
+You can keep your databases up to date with our
+[GeoIP Update program](https://github.com/maxmind/geoipupdate/releases).
+[Learn more about GeoIP Update on our developer
+portal.](https://dev.maxmind.com/geoip/updating-databases?lang=en)
+
+There is also a third-party tool for updating databases using PHP and
+Composer. MaxMind does not offer support for this tool or maintain it.
+[Learn more about the Geoip2 Update tool for PHP and Composer on its
+GitHub page.](https://github.com/tronovav/geoip2-update)
+
## Web Service Client ##
### Usage ###
@@ -274,7 +286,8 @@ specifies the language preferences when using the `->name` method on the model
classes that this client creates. The fourth argument is additional options
such as `host` and `timeout`.
-For instance, to call the GeoLite2 web service instead of GeoIP2 Precision:
+For instance, to call the GeoLite2 web service instead of the GeoIP2 web
+service:
```php
$client = new Client(42, 'abcdef123456', ['en'], ['host' => 'geolite.info']);
@@ -305,7 +318,8 @@ use GeoIp2\WebService\Client;
// This creates a Client object that can be reused across requests.
// Replace "42" with your account ID and "license_key" with your license
// key. Set the "host" to "geolite.info" in the fourth argument options
-// array to use the GeoLite2 web service instead of GeoIP2 Precision.
+// array to use the GeoLite2 web service instead of the GeoIP2 web
+// service.
$client = new Client(42, 'abcdef123456');
// Replace "city" with the method corresponding to the web service that
@@ -355,7 +369,7 @@ Because of these factors, it is possible for any end point to return a record
where some or all of the attributes are unpopulated.
See the
-[GeoIP2 Precision web service docs](https://dev.maxmind.com/geoip/docs/web-services?lang=en)
+[GeoIP2 web service docs](https://dev.maxmind.com/geoip/docs/web-services?lang=en)
for details on what data each end point may return.
The only piece of data which is always returned is the `ipAddress`
diff --git a/includes/vendor/geoip2/geoip2/src/Database/Reader.php b/includes/vendor/geoip2/geoip2/src/Database/Reader.php
index 266f7ed..4dabc5d 100644
--- a/includes/vendor/geoip2/geoip2/src/Database/Reader.php
+++ b/includes/vendor/geoip2/geoip2/src/Database/Reader.php
@@ -6,6 +6,14 @@ namespace GeoIp2\Database;
use GeoIp2\Exception\AddressNotFoundException;
use GeoIp2\Model\AbstractModel;
+use GeoIp2\Model\AnonymousIp;
+use GeoIp2\Model\Asn;
+use GeoIp2\Model\City;
+use GeoIp2\Model\ConnectionType;
+use GeoIp2\Model\Country;
+use GeoIp2\Model\Domain;
+use GeoIp2\Model\Enterprise;
+use GeoIp2\Model\Isp;
use GeoIp2\ProviderInterface;
use MaxMind\Db\Reader as DbReader;
use MaxMind\Db\Reader\InvalidDatabaseException;
@@ -40,10 +48,12 @@ class Reader implements ProviderInterface
* @var DbReader
*/
private $dbReader;
+
/**
* @var string
*/
private $dbType;
+
/**
* @var array
*/
@@ -78,10 +88,10 @@ class Reader implements ProviderInterface
* @throws \MaxMind\Db\Reader\InvalidDatabaseException if the database
* is corrupt or invalid
*/
- public function city(string $ipAddress): \GeoIp2\Model\City
+ public function city(string $ipAddress): City
{
// @phpstan-ignore-next-line
- return $this->modelFor('City', 'City', $ipAddress);
+ return $this->modelFor(City::class, 'City', $ipAddress);
}
/**
@@ -94,10 +104,10 @@ class Reader implements ProviderInterface
* @throws \MaxMind\Db\Reader\InvalidDatabaseException if the database
* is corrupt or invalid
*/
- public function country(string $ipAddress): \GeoIp2\Model\Country
+ public function country(string $ipAddress): Country
{
// @phpstan-ignore-next-line
- return $this->modelFor('Country', 'Country', $ipAddress);
+ return $this->modelFor(Country::class, 'Country', $ipAddress);
}
/**
@@ -110,11 +120,11 @@ class Reader implements ProviderInterface
* @throws \MaxMind\Db\Reader\InvalidDatabaseException if the database
* is corrupt or invalid
*/
- public function anonymousIp(string $ipAddress): \GeoIp2\Model\AnonymousIp
+ public function anonymousIp(string $ipAddress): AnonymousIp
{
// @phpstan-ignore-next-line
return $this->flatModelFor(
- 'AnonymousIp',
+ AnonymousIp::class,
'GeoIP2-Anonymous-IP',
$ipAddress
);
@@ -130,11 +140,11 @@ class Reader implements ProviderInterface
* @throws \MaxMind\Db\Reader\InvalidDatabaseException if the database
* is corrupt or invalid
*/
- public function asn(string $ipAddress): \GeoIp2\Model\Asn
+ public function asn(string $ipAddress): Asn
{
// @phpstan-ignore-next-line
return $this->flatModelFor(
- 'Asn',
+ Asn::class,
'GeoLite2-ASN',
$ipAddress
);
@@ -150,11 +160,11 @@ class Reader implements ProviderInterface
* @throws \MaxMind\Db\Reader\InvalidDatabaseException if the database
* is corrupt or invalid
*/
- public function connectionType(string $ipAddress): \GeoIp2\Model\ConnectionType
+ public function connectionType(string $ipAddress): ConnectionType
{
// @phpstan-ignore-next-line
return $this->flatModelFor(
- 'ConnectionType',
+ ConnectionType::class,
'GeoIP2-Connection-Type',
$ipAddress
);
@@ -170,11 +180,11 @@ class Reader implements ProviderInterface
* @throws \MaxMind\Db\Reader\InvalidDatabaseException if the database
* is corrupt or invalid
*/
- public function domain(string $ipAddress): \GeoIp2\Model\Domain
+ public function domain(string $ipAddress): Domain
{
// @phpstan-ignore-next-line
return $this->flatModelFor(
- 'Domain',
+ Domain::class,
'GeoIP2-Domain',
$ipAddress
);
@@ -190,10 +200,10 @@ class Reader implements ProviderInterface
* @throws \MaxMind\Db\Reader\InvalidDatabaseException if the database
* is corrupt or invalid
*/
- public function enterprise(string $ipAddress): \GeoIp2\Model\Enterprise
+ public function enterprise(string $ipAddress): Enterprise
{
// @phpstan-ignore-next-line
- return $this->modelFor('Enterprise', 'Enterprise', $ipAddress);
+ return $this->modelFor(Enterprise::class, 'Enterprise', $ipAddress);
}
/**
@@ -206,11 +216,11 @@ class Reader implements ProviderInterface
* @throws \MaxMind\Db\Reader\InvalidDatabaseException if the database
* is corrupt or invalid
*/
- public function isp(string $ipAddress): \GeoIp2\Model\Isp
+ public function isp(string $ipAddress): Isp
{
// @phpstan-ignore-next-line
return $this->flatModelFor(
- 'Isp',
+ Isp::class,
'GeoIP2-ISP',
$ipAddress
);
@@ -223,8 +233,6 @@ class Reader implements ProviderInterface
$record['traits']['ip_address'] = $ipAddress;
$record['traits']['prefix_len'] = $prefixLen;
- $class = 'GeoIp2\\Model\\' . $class;
-
return new $class($record, $this->locales);
}
@@ -234,7 +242,6 @@ class Reader implements ProviderInterface
$record['ip_address'] = $ipAddress;
$record['prefix_len'] = $prefixLen;
- $class = 'GeoIp2\\Model\\' . $class;
return new $class($record);
}
@@ -242,7 +249,7 @@ class Reader implements ProviderInterface
private function getRecord(string $class, string $type, string $ipAddress): array
{
if (strpos($this->dbType, $type) === false) {
- $method = lcfirst($class);
+ $method = lcfirst((new \ReflectionClass($class))->getShortName());
throw new \BadMethodCallException(
"The $method method cannot be used to open a {$this->dbType} database"
diff --git a/includes/vendor/geoip2/geoip2/src/Model/AnonymousIp.php b/includes/vendor/geoip2/geoip2/src/Model/AnonymousIp.php
index 9cb616b..5586bd0 100644
--- a/includes/vendor/geoip2/geoip2/src/Model/AnonymousIp.php
+++ b/includes/vendor/geoip2/geoip2/src/Model/AnonymousIp.php
@@ -35,30 +35,37 @@ class AnonymousIp extends AbstractModel
* @var bool
*/
protected $isAnonymous;
+
/**
* @var bool
*/
protected $isAnonymousVpn;
+
/**
* @var bool
*/
protected $isHostingProvider;
+
/**
* @var bool
*/
protected $isPublicProxy;
+
/**
* @var bool
*/
protected $isResidentialProxy;
+
/**
* @var bool
*/
protected $isTorExitNode;
+
/**
* @var string
*/
protected $ipAddress;
+
/**
* @var string
*/
diff --git a/includes/vendor/geoip2/geoip2/src/Model/Asn.php b/includes/vendor/geoip2/geoip2/src/Model/Asn.php
index 8b75830..f05177e 100644
--- a/includes/vendor/geoip2/geoip2/src/Model/Asn.php
+++ b/includes/vendor/geoip2/geoip2/src/Model/Asn.php
@@ -26,14 +26,17 @@ class Asn extends AbstractModel
* @var int|null
*/
protected $autonomousSystemNumber;
+
/**
* @var string|null
*/
protected $autonomousSystemOrganization;
+
/**
* @var string
*/
protected $ipAddress;
+
/**
* @var string
*/
diff --git a/includes/vendor/geoip2/geoip2/src/Model/City.php b/includes/vendor/geoip2/geoip2/src/Model/City.php
index 016c195..b2e81dc 100644
--- a/includes/vendor/geoip2/geoip2/src/Model/City.php
+++ b/includes/vendor/geoip2/geoip2/src/Model/City.php
@@ -5,11 +5,11 @@ declare(strict_types=1);
namespace GeoIp2\Model;
/**
- * Model class for the data returned by GeoIP2 City web service and database.
+ * Model class for the data returned by City Plus web service and City
+ * database.
*
- * The only difference between the City and Insights model classes is which
- * fields in each record may be populated. See
- * https://dev.maxmind.com/geoip/docs/web-services?lang=en for more details.
+ * See https://dev.maxmind.com/geoip/docs/web-services?lang=en for more
+ * details.
*
* @property-read \GeoIp2\Record\City $city City data for the requested IP
* address.
@@ -37,18 +37,21 @@ class City extends Country
* @var \GeoIp2\Record\City
*/
protected $city;
+
/**
* @ignore
*
* @var \GeoIp2\Record\Location
*/
protected $location;
+
/**
* @ignore
*
* @var \GeoIp2\Record\Postal
*/
protected $postal;
+
/**
* @ignore
*
diff --git a/includes/vendor/geoip2/geoip2/src/Model/ConnectionType.php b/includes/vendor/geoip2/geoip2/src/Model/ConnectionType.php
index 4f948d8..36d4529 100644
--- a/includes/vendor/geoip2/geoip2/src/Model/ConnectionType.php
+++ b/includes/vendor/geoip2/geoip2/src/Model/ConnectionType.php
@@ -24,10 +24,12 @@ class ConnectionType extends AbstractModel
* @var string|null
*/
protected $connectionType;
+
/**
* @var string
*/
protected $ipAddress;
+
/**
* @var string
*/
diff --git a/includes/vendor/geoip2/geoip2/src/Model/Country.php b/includes/vendor/geoip2/geoip2/src/Model/Country.php
index f76dbe3..fdffc63 100644
--- a/includes/vendor/geoip2/geoip2/src/Model/Country.php
+++ b/includes/vendor/geoip2/geoip2/src/Model/Country.php
@@ -7,9 +7,7 @@ namespace GeoIp2\Model;
/**
* Model class for the data returned by GeoIP2 Country web service and database.
*
- * The only difference between the City and Insights model classes is which
- * fields in each record may be populated. See
- * https://dev.maxmind.com/geoip/docs/web-services?lang=en for more details.
+ * See https://dev.maxmind.com/geoip/docs/web-services?lang=en for more details.
*
* @property-read \GeoIp2\Record\Continent $continent Continent data for the
* requested IP address.
@@ -36,26 +34,32 @@ class Country extends AbstractModel
* @var \GeoIp2\Record\Continent
*/
protected $continent;
+
/**
* @var \GeoIp2\Record\Country
*/
protected $country;
+
/**
* @var array
*/
protected $locales;
+
/**
* @var \GeoIp2\Record\MaxMind
*/
protected $maxmind;
+
/**
* @var \GeoIp2\Record\Country
*/
protected $registeredCountry;
+
/**
* @var \GeoIp2\Record\RepresentedCountry
*/
protected $representedCountry;
+
/**
* @var \GeoIp2\Record\Traits
*/
diff --git a/includes/vendor/geoip2/geoip2/src/Model/Domain.php b/includes/vendor/geoip2/geoip2/src/Model/Domain.php
index dad71ff..067a507 100644
--- a/includes/vendor/geoip2/geoip2/src/Model/Domain.php
+++ b/includes/vendor/geoip2/geoip2/src/Model/Domain.php
@@ -24,10 +24,12 @@ class Domain extends AbstractModel
* @var string|null
*/
protected $domain;
+
/**
* @var string
*/
protected $ipAddress;
+
/**
* @var string
*/
diff --git a/includes/vendor/geoip2/geoip2/src/Model/Enterprise.php b/includes/vendor/geoip2/geoip2/src/Model/Enterprise.php
index 80ad091..c63469b 100644
--- a/includes/vendor/geoip2/geoip2/src/Model/Enterprise.php
+++ b/includes/vendor/geoip2/geoip2/src/Model/Enterprise.php
@@ -7,9 +7,8 @@ namespace GeoIp2\Model;
/**
* Model class for the data returned by GeoIP2 Enterprise database lookups.
*
- * The only difference between the City and Enterprise model classes is which
- * fields in each record may be populated. See
- * https://dev.maxmind.com/geoip/docs/web-services?lang=en for more details.
+ * See https://dev.maxmind.com/geoip/docs/web-services?lang=en for more
+ * details.
*/
class Enterprise extends City
{
diff --git a/includes/vendor/geoip2/geoip2/src/Model/Insights.php b/includes/vendor/geoip2/geoip2/src/Model/Insights.php
index f3813ad..351c7a5 100644
--- a/includes/vendor/geoip2/geoip2/src/Model/Insights.php
+++ b/includes/vendor/geoip2/geoip2/src/Model/Insights.php
@@ -5,11 +5,10 @@ declare(strict_types=1);
namespace GeoIp2\Model;
/**
- * Model class for the data returned by GeoIP2 Precision: Insights web service.
+ * Model class for the data returned by GeoIP2 Insights web service.
*
- * The only difference between the City and Insights model classes is which
- * fields in each record may be populated. See
- * https://dev.maxmind.com/geoip/docs/web-services?lang=en for more details.
+ * See https://dev.maxmind.com/geoip/docs/web-services?lang=en for
+ * more details.
*/
class Insights extends City
{
diff --git a/includes/vendor/geoip2/geoip2/src/Model/Isp.php b/includes/vendor/geoip2/geoip2/src/Model/Isp.php
index 9968f37..f54efd9 100644
--- a/includes/vendor/geoip2/geoip2/src/Model/Isp.php
+++ b/includes/vendor/geoip2/geoip2/src/Model/Isp.php
@@ -36,30 +36,37 @@ class Isp extends AbstractModel
* @var int|null
*/
protected $autonomousSystemNumber;
+
/**
* @var string|null
*/
protected $autonomousSystemOrganization;
+
/**
* @var string|null
*/
protected $isp;
+
/**
* @var string|null
*/
protected $mobileCountryCode;
+
/**
* @var string|null
*/
protected $mobileNetworkCode;
+
/**
* @var string|null
*/
protected $organization;
+
/**
* @var string
*/
protected $ipAddress;
+
/**
* @var string
*/
diff --git a/includes/vendor/geoip2/geoip2/src/Record/AbstractPlaceRecord.php b/includes/vendor/geoip2/geoip2/src/Record/AbstractPlaceRecord.php
index 3f81c44..684ab8c 100644
--- a/includes/vendor/geoip2/geoip2/src/Record/AbstractPlaceRecord.php
+++ b/includes/vendor/geoip2/geoip2/src/Record/AbstractPlaceRecord.php
@@ -57,7 +57,6 @@ abstract class AbstractPlaceRecord extends AbstractRecord
private function firstSetNameLocale(): ?string
{
foreach ($this->locales as $locale) {
- // @phpstan-ignore-next-line
if (isset($this->names[$locale])) {
return $locale;
}
diff --git a/includes/vendor/geoip2/geoip2/src/Record/City.php b/includes/vendor/geoip2/geoip2/src/Record/City.php
index 68b3166..f25dcb3 100644
--- a/includes/vendor/geoip2/geoip2/src/Record/City.php
+++ b/includes/vendor/geoip2/geoip2/src/Record/City.php
@@ -18,7 +18,7 @@ namespace GeoIp2\Record;
* @property-read string|null $name The name of the city based on the locales list
* passed to the constructor. This attribute is returned by all location
* services and databases.
- * @property-read array|null $names A array map where the keys are locale codes
+ * @property-read array|null $names An array map where the keys are locale codes
* and the values are names. This attribute is returned by all location
* services and databases.
*/
diff --git a/includes/vendor/geoip2/geoip2/src/Record/Traits.php b/includes/vendor/geoip2/geoip2/src/Record/Traits.php
index cbe6b59..8000d50 100644
--- a/includes/vendor/geoip2/geoip2/src/Record/Traits.php
+++ b/includes/vendor/geoip2/geoip2/src/Record/Traits.php
@@ -14,13 +14,13 @@ use GeoIp2\Util;
* @property-read int|null $autonomousSystemNumber The autonomous system number
* associated with the IP address. See
* https://en.wikipedia.org/wiki/Autonomous_system_(Internet%29. This attribute
- * is only available from the City and Insights web service and the GeoIP2
- * Enterprise database.
+ * is only available from the City Plus and Insights web services and the
+ * GeoIP2 Enterprise database.
* @property-read string|null $autonomousSystemOrganization The organization
* associated with the registered autonomous system number for the IP address.
* See https://en.wikipedia.org/wiki/Autonomous_system_(Internet%29. This
- * attribute is only available from the City and Insights web service and the
- * GeoIP2 Enterprise database.
+ * attribute is only available from the City Plus and Insights web services and
+ * the GeoIP2 Enterprise database.
* @property-read string|null $connectionType The connection type may take the
* following values: "Dialup", "Cable/DSL", "Corporate", "Cellular".
* Additional values may be added in the future. This attribute is only
@@ -28,7 +28,7 @@ use GeoIp2\Util;
* @property-read string|null $domain The second level domain associated with the
* IP address. This will be something like "example.com" or "example.co.uk",
* not "foo.example.com". This attribute is only available from the
- * City and Insights web service and the GeoIP2 Enterprise
+ * City Plus and Insights web services and the GeoIP2 Enterprise
* database.
* @property-read string $ipAddress The IP address that the data in the model
* is for. If you performed a "me" lookup against the web service, this
@@ -38,7 +38,7 @@ use GeoIp2\Util;
* points.
* @property-read bool $isAnonymous This is true if the IP address belongs to
* any sort of anonymous network. This property is only available from GeoIP2
- * Precision Insights.
+ * Insights.
* @property-read bool $isAnonymousProxy *Deprecated.* Please see our GeoIP2
* Anonymous IP database
* (https://www.maxmind.com/en/geoip2-anonymous-ip-database) to determine
@@ -47,50 +47,49 @@ use GeoIp2\Util;
* registered to an anonymous VPN provider. If a VPN provider does not register
* subnets under names associated with them, we will likely only flag their IP
* ranges using the isHostingProvider property. This property is only available
- * from GeoIP2 Precision Insights.
+ * from GeoIP2 Insights.
* @property-read bool $isHostingProvider This is true if the IP address belongs
* to a hosting or VPN provider (see description of isAnonymousVpn property).
- * This property is only available from GeoIP2 Precision Insights.
+ * This property is only available from GeoIP2 Insights.
* @property-read bool $isLegitimateProxy This attribute is true if MaxMind
* believes this IP address to be a legitimate proxy, such as an internal
* VPN used by a corporation. This attribute is only available in the GeoIP2
* Enterprise database.
* @property-read bool $isPublicProxy This is true if the IP address belongs to
- * a public proxy. This property is only available from GeoIP2 Precision
- * Insights.
+ * a public proxy. This property is only available from GeoIP2 Insights.
* @property-read bool $isResidentialProxy This is true if the IP address is
* on a suspected anonymizing network and belongs to a residential ISP. This
- * property is only available from GeoIP2 Precision Insights.
+ * property is only available from GeoIP2 Insights.
* @property-read bool $isSatelliteProvider *Deprecated.* Due to the
* increased coverage by mobile carriers, very few satellite providers now
* serve multiple countries. As a result, the output does not provide
* sufficiently relevant data for us to maintain it.
* @property-read bool $isTorExitNode This is true if the IP address is a Tor
- * exit node. This property is only available from GeoIP2 Precision Insights.
+ * exit node. This property is only available from GeoIP2 Insights.
* @property-read string|null $isp The name of the ISP associated with the IP
- * address. This attribute is only available from the City and Insights web
- * services and the GeoIP2 Enterprise database.
+ * address. This attribute is only available from the City Plus and Insights
+ * web services and the GeoIP2 Enterprise database.
* @property-read string $network The network in CIDR notation associated with
* the record. In particular, this is the largest network where all of the
* fields besides $ipAddress have the same value.
- * @property-read string|null $organization The name of the organization associated
- * with the IP address. This attribute is only available from the City and
- * Insights web services and the GeoIP2 Enterprise database.
+ * @property-read string|null $organization The name of the organization
+ * associated with the IP address. This attribute is only available from the
+ * City Plus and Insights web services and the GeoIP2 Enterprise database.
* @property-read string|null $mobileCountryCode The [mobile country code
* (MCC)](https://en.wikipedia.org/wiki/Mobile_country_code) associated with
- * the IP address and ISP. This property is available from the City and
+ * the IP address and ISP. This property is available from the City Plus and
* Insights web services and the GeoIP2 Enterprise database.
* @property-read string|null $mobileNetworkCode The [mobile network code
* (MNC)](https://en.wikipedia.org/wiki/Mobile_country_code) associated with
- * the IP address and ISP. This property is available from the City and
+ * the IP address and ISP. This property is available from the City Plus and
* Insights web services and the GeoIP2 Enterprise database.
* @property-read float|null $staticIpScore An indicator of how static or
* dynamic an IP address is. This property is only available from GeoIP2
- * Precision Insights.
+ * Insights.
* @property-read int|null $userCount The estimated number of users sharing
* the IP/network during the past 24 hours. For IPv4, the count is for the
* individual IP. For IPv6, the count is for the /64 network. This property is
- * only available from GeoIP2 Precision Insights.
+ * only available from GeoIP2 Insights.
* @property-read string|null $userType
The user type associated with the IP
* address. This can be one of the following values:
*
@@ -98,6 +97,7 @@ use GeoIp2\Util;
*
cafe
*
cellular
*
college
+ *
consumer_privacy_network
*
content_delivery_network
*
dialup
*
government
diff --git a/includes/vendor/geoip2/geoip2/src/WebService/Client.php b/includes/vendor/geoip2/geoip2/src/WebService/Client.php
index 72c4895..18d979d 100644
--- a/includes/vendor/geoip2/geoip2/src/WebService/Client.php
+++ b/includes/vendor/geoip2/geoip2/src/WebService/Client.php
@@ -17,9 +17,9 @@ use GeoIp2\ProviderInterface;
use MaxMind\WebService\Client as WsClient;
/**
- * This class provides a client API for all the GeoIP2 Precision web services.
- * The services are Country, City, and Insights. Each service returns a
- * different set of data about an IP address, with Country returning the
+ * This class provides a client API for all the GeoIP2 web services.
+ * The services are Country, City Plus, and Insights. Each service returns
+ * a different set of data about an IP address, with Country returning the
* least data and Insights the most.
*
* Each web service is represented by a different model class, and these model
@@ -52,16 +52,18 @@ class Client implements ProviderInterface
* @var array
*/
private $locales;
+
/**
* @var WsClient
*/
private $client;
+
/**
* @var string
*/
private static $basePath = '/geoip/v2.1';
- public const VERSION = 'v2.12.2';
+ public const VERSION = 'v2.13.0';
/**
* Constructor.
@@ -71,9 +73,10 @@ class Client implements ProviderInterface
* @param array $locales list of locale codes to use in name property
* from most preferred to least preferred
* @param array $options array of options. Valid options include:
- * * `host` - The host to use when querying the web service. To
- * query the GeoLite2 web service instead of GeoIP2 Precision,
- * set the host to `geolite.info`.
+ * * `host` - The host to use when querying the web
+ * service. To query the GeoLite2 web service
+ * instead of the GeoIP2 web service, set the
+ * host to `geolite.info`.
* * `timeout` - Timeout in seconds.
* * `connectTimeout` - Initial connection timeout in seconds.
* * `proxy` - The HTTP proxy to use. May include a schema, port,
@@ -110,7 +113,7 @@ class Client implements ProviderInterface
}
/**
- * This method calls the City service.
+ * This method calls the City Plus service.
*
* @param string $ipAddress IPv4 or IPv6 address as a string. If no
* address is provided, the address that the web service is called
@@ -136,7 +139,7 @@ class Client implements ProviderInterface
public function city(string $ipAddress = 'me'): City
{
// @phpstan-ignore-next-line
- return $this->responseFor('city', 'City', $ipAddress);
+ return $this->responseFor('city', City::class, $ipAddress);
}
/**
@@ -165,12 +168,12 @@ class Client implements ProviderInterface
*/
public function country(string $ipAddress = 'me'): Country
{
- return $this->responseFor('country', 'Country', $ipAddress);
+ return $this->responseFor('country', Country::class, $ipAddress);
}
/**
- * This method calls the Insights service. Insights is only supported by GeoIP2
- * Precision. The GeoLite2 web service does not support it.
+ * This method calls the Insights service. Insights is only supported by
+ * the GeoIP2 web service. The GeoLite2 web service does not support it.
*
* @param string $ipAddress IPv4 or IPv6 address as a string. If no
* address is provided, the address that the web service is called
@@ -196,7 +199,7 @@ class Client implements ProviderInterface
public function insights(string $ipAddress = 'me'): Insights
{
// @phpstan-ignore-next-line
- return $this->responseFor('insights', 'Insights', $ipAddress);
+ return $this->responseFor('insights', Insights::class, $ipAddress);
}
private function responseFor(string $endpoint, string $class, string $ipAddress): Country
@@ -204,7 +207,8 @@ class Client implements ProviderInterface
$path = implode('/', [self::$basePath, $endpoint, $ipAddress]);
try {
- $body = $this->client->get('GeoIP2 ' . $class, $path);
+ $service = (new \ReflectionClass($class))->getShortName();
+ $body = $this->client->get('GeoIP2 ' . $service, $path);
} catch (\MaxMind\Exception\IpAddressNotFoundException $ex) {
throw new AddressNotFoundException(
$ex->getMessage(),
@@ -246,8 +250,6 @@ class Client implements ProviderInterface
);
}
- $class = 'GeoIp2\\Model\\' . $class;
-
return new $class($body, $this->locales);
}
}
diff --git a/includes/vendor/pomo/pomo/README.md b/includes/vendor/pomo/pomo/README.md
index eb54264..2ed0786 100644
--- a/includes/vendor/pomo/pomo/README.md
+++ b/includes/vendor/pomo/pomo/README.md
@@ -1,14 +1,15 @@
-POMO
-====
+# POMO
+
+> Gettext library to translate with i18n
+
[![Latest Release](https://img.shields.io/packagist/v/pomo/pomo.svg)](https://packagist.org/packages/pomo/pomo)
-[![Build Status](https://travis-ci.org/LeoColomb/pomo.svg?branch=master)](https://travis-ci.org/LeoColomb/pomo)
-[![Code Climate](https://img.shields.io/codeclimate/github/LeoColomb/pomo.svg)](https://codeclimate.com/github/LeoColomb/pomo)
-**Gettext library to translate with I18n**.
-[Why use it](http://codex.wordpress.org/I18n_for_WordPress_Developers).
+## About
+
+[Why use it](https://codex.wordpress.org/I18n_for_WordPress_Developers).
+
+## Usage
-Usage
------
```php
import_from_file($the_mo_filepath);
$translations->translate($text);
```
-Installation
-------------
-The easiest way to install POMO is via [composer](http://getcomposer.org/).
-Create the following `composer.json` file and run the `php composer.phar install` command to install it.
+## Installation
-```json
-{
- "require": {
- "pomo/pomo": "*"
- }
-}
+The easiest way to install POMO is via [composer](http://getcomposer.org/).
+
+```console
+composer require pomo/pomo
```
```php
is_resource()) {
+
+ if (! $reader->is_resource()) {
return false;
}
@@ -58,18 +64,16 @@ class MO extends GettextTranslations
/**
* @param string $filename
- *
* @return bool
*/
public function export_to_file($filename)
{
$fh = fopen($filename, 'wb');
- if (!$fh) {
+ if (! $fh) {
return false;
}
$res = $this->export_to_file_handle($fh);
fclose($fh);
-
return $res;
}
@@ -79,12 +83,11 @@ class MO extends GettextTranslations
public function export()
{
$tmp_fh = fopen('php://temp', 'r+');
- if (!$tmp_fh) {
+ if (! $tmp_fh) {
return false;
}
$this->export_to_file_handle($tmp_fh);
rewind($tmp_fh);
-
return stream_get_contents($tmp_fh);
}
@@ -99,7 +102,7 @@ class MO extends GettextTranslations
return false;
}
- if (!array_filter($entry->translations)) {
+ if (! array_filter($entry->translations)) {
return false;
}
@@ -108,69 +111,63 @@ class MO extends GettextTranslations
/**
* @param resource $fh
- *
* @return true
*/
public function export_to_file_handle($fh)
{
- $entries = array_filter(
- $this->entries,
- array($this, 'is_entry_good_for_export')
- );
+ $entries = array_filter($this->entries, array($this, 'is_entry_good_for_export'));
ksort($entries);
- $magic = 0x950412de;
- $revision = 0;
- $total = count($entries) + 1; // all the headers are one entry
- $originals_lenghts_addr = 28;
- $translations_lenghts_addr = $originals_lenghts_addr + 8 * $total;
- $size_of_hash = 0;
- $hash_addr = $translations_lenghts_addr + 8 * $total;
- $current_addr = $hash_addr;
- fwrite($fh, pack(
- 'V*',
- $magic,
- $revision,
- $total,
- $originals_lenghts_addr,
- $translations_lenghts_addr,
- $size_of_hash,
- $hash_addr
- ));
- fseek($fh, $originals_lenghts_addr);
+ $magic = 0x950412de;
+ $revision = 0;
+ $total = count($entries) + 1; // All the headers are one entry.
+ $originals_lengths_addr = 28;
+ $translations_lengths_addr = $originals_lengths_addr + 8 * $total;
+ $size_of_hash = 0;
+ $hash_addr = $translations_lengths_addr + 8 * $total;
+ $current_addr = $hash_addr;
+ fwrite(
+ $fh,
+ pack(
+ 'V*',
+ $magic,
+ $revision,
+ $total,
+ $originals_lengths_addr,
+ $translations_lengths_addr,
+ $size_of_hash,
+ $hash_addr
+ )
+ );
+ fseek($fh, $originals_lengths_addr);
- // headers' msgid is an empty string
+ // Headers' msgid is an empty string.
fwrite($fh, pack('VV', 0, $current_addr));
$current_addr++;
- $originals_table = chr(0);
+ $originals_table = "\0";
$reader = new NOOPReader();
foreach ($entries as $entry) {
- $originals_table .= $this->export_original($entry).chr(0);
- $length = $reader->strlen($this->export_original($entry));
+ $originals_table .= $this->export_original($entry) . "\0";
+ $length = $reader->strlen($this->export_original($entry));
fwrite($fh, pack('VV', $length, $current_addr));
- $current_addr += $length + 1; // account for the NULL byte after
+ $current_addr += $length + 1; // Account for the NULL byte after.
}
$exported_headers = $this->export_headers();
- fwrite($fh, pack(
- 'VV',
- $reader->strlen($exported_headers),
- $current_addr
- ));
- $current_addr += strlen($exported_headers) + 1;
- $translations_table = $exported_headers.chr(0);
+ fwrite($fh, pack('VV', $reader->strlen($exported_headers), $current_addr));
+ $current_addr += strlen($exported_headers) + 1;
+ $translations_table = $exported_headers . "\0";
foreach ($entries as $entry) {
- $translations_table .= $this->export_translations($entry).chr(0);
- $length = $reader->strlen($this->export_translations($entry));
+ $translations_table .= $this->export_translations($entry) . "\0";
+ $length = $reader->strlen($this->export_translations($entry));
fwrite($fh, pack('VV', $length, $current_addr));
$current_addr += $length + 1;
}
fwrite($fh, $originals_table);
fwrite($fh, $translations_table);
-
return true;
}
@@ -181,15 +178,14 @@ class MO extends GettextTranslations
*/
public function export_original(EntryTranslations $entry)
{
- //TODO: warnings for control characters
+ // TODO: Warnings for control characters.
$exported = $entry->singular;
if ($entry->is_plural) {
- $exported .= chr(0).$entry->plural;
+ $exported .= "\0" . $entry->plural;
}
- if (!is_null($entry->context)) {
- $exported = $entry->context.chr(4).$exported;
+ if ($entry->context) {
+ $exported = $entry->context . "\4" . $exported;
}
-
return $exported;
}
@@ -200,8 +196,8 @@ class MO extends GettextTranslations
*/
public function export_translations(EntryTranslations $entry)
{
- //TODO: warnings for control characters
- return $entry->is_plural ? implode(chr(0), $entry->translations) : $entry->translations[0];
+ // TODO: Warnings for control characters.
+ return $entry->is_plural ? implode("\0", $entry->translations) : $entry->translations[0];
}
/**
@@ -213,22 +209,22 @@ class MO extends GettextTranslations
foreach ($this->headers as $header => $value) {
$exported .= "$header: $value\n";
}
-
return $exported;
}
/**
* @param int $magic
- *
* @return string|false
*/
public function get_byteorder($magic)
{
- // The magic is 0x950412de
- $magic_little = (int) -1794895138;
+ // The magic is 0x950412de.
+
+ // bug in PHP 5.0.2, see https://savannah.nongnu.org/bugs/?func=detailitem&item_id=10565
+ $magic_little = (int) - 1794895138;
$magic_little_64 = (int) 2500072158;
// 0xde120495
- $magic_big = ((int) -569244523) & 0xFFFFFFFF;
+ $magic_big = ((int) - 569244523) & 0xFFFFFFFF;
if ($magic_little == $magic || $magic_little_64 == $magic) {
return 'little';
} elseif ($magic_big == $magic) {
@@ -240,8 +236,7 @@ class MO extends GettextTranslations
/**
* @param FileReader $reader
- *
- * @return bool
+ * @return bool True if the import was successful, otherwise false.
*/
public function import_from_reader(FileReader $reader)
{
@@ -251,29 +246,29 @@ class MO extends GettextTranslations
}
$reader->setEndian($endian_string);
- $endian = ('big' == $endian_string) ? 'N' : 'V';
+ $endian = ('big' === $endian_string) ? 'N' : 'V';
$header = $reader->read(24);
if ($reader->strlen($header) != 24) {
return false;
}
- // parse header
- $header = unpack("{$endian}revision/{$endian}total/{$endian}originals_lenghts_addr/{$endian}translations_lenghts_addr/{$endian}hash_length/{$endian}hash_addr", $header);
- if (!is_array($header)) {
+ // Parse header.
+ $header = unpack("{$endian}revision/{$endian}total/{$endian}originals_lengths_addr/{$endian}translations_lengths_addr/{$endian}hash_length/{$endian}hash_addr", $header);
+ if (! is_array($header)) {
return false;
}
- // support revision 0 of MO format specs, only
- if ($header['revision'] != 0) {
+ // Support revision 0 of MO format specs, only.
+ if (0 != $header['revision']) {
return false;
}
- // seek to data blocks
- $reader->seekto($header['originals_lenghts_addr']);
+ // Seek to data blocks.
+ $reader->seekto($header['originals_lengths_addr']);
- // read originals' indices
- $originals_lengths_length = $header['translations_lenghts_addr'] - $header['originals_lenghts_addr'];
+ // Read originals' indices.
+ $originals_lengths_length = $header['translations_lengths_addr'] - $header['originals_lengths_addr'];
if ($originals_lengths_length != $header['total'] * 8) {
return false;
}
@@ -283,22 +278,22 @@ class MO extends GettextTranslations
return false;
}
- // read translations' indices
- $translations_lenghts_length = $header['hash_addr'] - $header['translations_lenghts_addr'];
- if ($translations_lenghts_length != $header['total'] * 8) {
+ // Read translations' indices.
+ $translations_lengths_length = $header['hash_addr'] - $header['translations_lengths_addr'];
+ if ($translations_lengths_length != $header['total'] * 8) {
return false;
}
- $translations = $reader->read($translations_lenghts_length);
- if ($reader->strlen($translations) != $translations_lenghts_length) {
+ $translations = $reader->read($translations_lengths_length);
+ if ($reader->strlen($translations) != $translations_lengths_length) {
return false;
}
- // transform raw data into set of indices
- $originals = $reader->str_split($originals, 8);
+ // Transform raw data into set of indices.
+ $originals = $reader->str_split($originals, 8);
$translations = $reader->str_split($translations, 8);
- // skip hash table
+ // Skip hash table.
$strings_addr = $header['hash_addr'] + $header['hash_length'] * 4;
$reader->seekto($strings_addr);
@@ -307,67 +302,63 @@ class MO extends GettextTranslations
$reader->close();
for ($i = 0; $i < $header['total']; $i++) {
- $o = unpack("{$endian}length/{$endian}pos", $originals[$i]);
- $t = unpack("{$endian}length/{$endian}pos", $translations[$i]);
- if (!$o || !$t) {
+ $o = unpack("{$endian}length/{$endian}pos", $originals[ $i ]);
+ $t = unpack("{$endian}length/{$endian}pos", $translations[ $i ]);
+ if (! $o || ! $t) {
return false;
}
- // adjust offset due to reading strings to separate space before
+ // Adjust offset due to reading strings to separate space before.
$o['pos'] -= $strings_addr;
$t['pos'] -= $strings_addr;
- $original = $reader->substr($strings, $o['pos'], $o['length']);
+ $original = $reader->substr($strings, $o['pos'], $o['length']);
$translation = $reader->substr($strings, $t['pos'], $t['length']);
if ('' === $original) {
$this->set_headers($this->make_headers($translation));
} else {
- $entry = &static::make_entry($original, $translation);
- $this->entries[$entry->key()] = &$entry;
+ $entry = &static::make_entry($original, $translation);
+ $this->entries[ $entry->key() ] = &$entry;
}
}
-
return true;
}
/**
- * Build a from original string and translation strings,
- * found in a MO file.
+ * Build a EntryTranslations from original string and translation strings,
+ * found in a MO file
*
- * @param string $original original string to translate from MO file.
- * Might contain 0x04 as context separator or
- * 0x00 as singular/plural separator
- * @param string $translation translation string from MO file.Might contain
- * 0x00 as a plural translations separator
- *
- * @return EntryTranslations New entry
+ * @static
+ * @param string $original original string to translate from MO file. Might contain
+ * 0x04 as context separator or 0x00 as singular/plural separator
+ * @param string $translation translation string from MO file. Might contain
+ * 0x00 as a plural translations separator
+ * @return EntryTranslations Entry instance.
*/
public static function &make_entry($original, $translation)
{
$entry = new EntryTranslations();
- // look for context
- $parts = explode(chr(4), $original);
+ // Look for context, separated by \4.
+ $parts = explode("\4", $original);
if (isset($parts[1])) {
- $original = $parts[1];
+ $original = $parts[1];
$entry->context = $parts[0];
}
- // look for plural original
- $parts = explode(chr(0), $original);
+ // Look for plural original.
+ $parts = explode("\0", $original);
$entry->singular = $parts[0];
if (isset($parts[1])) {
$entry->is_plural = true;
- $entry->plural = $parts[1];
+ $entry->plural = $parts[1];
}
- // plural translations are also separated by \0
- $entry->translations = explode(chr(0), $translation);
-
+ // Plural translations are also separated by \0.
+ $entry->translations = explode("\0", $translation);
return $entry;
}
/**
* @param int $count
- *
* @return string
*/
public function select_plural_form($count)
diff --git a/includes/vendor/pomo/pomo/src/PO.php b/includes/vendor/pomo/pomo/src/PO.php
index 27d7c97..278e065 100644
--- a/includes/vendor/pomo/pomo/src/PO.php
+++ b/includes/vendor/pomo/pomo/src/PO.php
@@ -1,4 +1,5 @@
comments_before_headers) {
- $before_headers = self::prepend_each_line(
- rtrim($this->comments_before_headers)."\n",
- '# '
- );
+ $before_headers = self::prepend_each_line(rtrim($this->comments_before_headers) . "\n", '# ');
} else {
$before_headers = '';
}
-
return rtrim("{$before_headers}msgid \"\"\nmsgstr $poified");
}
/**
- * Exports all entries to PO format.
+ * Exports all entries to PO format
*
- * @return string sequence of mgsgid/msgstr PO strings, doesn't containt
- * newline at the end
+ * @return string sequence of mgsgid/msgstr PO strings, doesn't containt newline at the end
*/
public function export_entries()
{
- //TODO: sorting
- return implode("\n\n", array_map(
- array(__NAMESPACE__.'\PO', 'export_entry'),
- $this->entries
- ));
+ // TODO: Sorting.
+ return implode("\n\n", array_map(array(__NAMESPACE__ . '\PO', 'export_entry'), $this->entries));
}
/**
- * Exports the whole PO file as a string.
+ * Exports the whole PO file as a string
*
- * @param bool $include_headers whether to include the headers in the
- * export
- *
- * @return string ready for inclusion in PO file string for headers and all
- * the enrtries
+ * @param bool $include_headers whether to include the headers in the export
+ * @return string ready for inclusion in PO file string for headers and all the enrtries
*/
public function export($include_headers = true)
{
@@ -79,17 +68,14 @@ class PO extends GettextTranslations
$res .= "\n\n";
}
$res .= $this->export_entries();
-
return $res;
}
/**
- * Same as {@link export}, but writes the result to a file.
- *
- * @param string $filename where to write the PO string
- * @param bool $include_headers whether to include tje headers in the
- * export
+ * Same as {@link export}, but writes the result to a file
*
+ * @param string $filename Where to write the PO string.
+ * @param bool $include_headers Whether to include the headers in the export.
* @return bool true on success, false on error
*/
public function export_to_file($filename, $include_headers = true)
@@ -99,7 +85,7 @@ class PO extends GettextTranslations
return false;
}
$export = $this->export($include_headers);
- $res = fwrite($fh, $export);
+ $res = fwrite($fh, $export);
if (false === $res) {
return false;
}
@@ -108,12 +94,11 @@ class PO extends GettextTranslations
}
/**
- * Text to include as a comment before the start of the PO contents.
+ * Text to include as a comment before the start of the PO contents
*
- * Doesn't need to include # in the beginning of lines, these are added
- * automatically
+ * Doesn't need to include # in the beginning of lines, these are added automatically
*
- * @param string $text Comment text
+ * @param string $text Text to include as a comment.
*/
public function set_comment_before_headers($text)
{
@@ -121,120 +106,114 @@ class PO extends GettextTranslations
}
/**
- * Formats a string in PO-style.
- *
- * @param string $string the string to format
+ * Formats a string in PO-style
*
+ * @param string $input_string the string to format
* @return string the poified string
*/
- public static function poify($string)
+ public static function poify($input_string)
{
- $quote = '"';
- $slash = '\\';
+ $quote = '"';
+ $slash = '\\';
$newline = "\n";
$replaces = array(
- "$slash" => "$slash$slash",
- "$quote" => "$slash$quote",
- "\t" => '\t',
+ "$slash" => "$slash$slash",
+ "$quote" => "$slash$quote",
+ "\t" => '\t',
);
- $string = str_replace(
- array_keys($replaces),
- array_values($replaces),
- $string
- );
+ $input_string = str_replace(array_keys($replaces), array_values($replaces), $input_string);
- $po = $quote.implode(
- "${slash}n$quote$newline$quote",
- explode($newline, $string)
- ).$quote;
- // add empty string on first line for readbility
- if (false !== strpos($string, $newline) &&
- (substr_count($string, $newline) > 1 ||
- !($newline === substr($string, -strlen($newline))))) {
+ $po = $quote . implode("{$slash}n{$quote}{$newline}{$quote}", explode($newline, $input_string)) . $quote;
+ // Add empty string on first line for readbility.
+ if (
+ false !== strpos($input_string, $newline) &&
+ (substr_count($input_string, $newline) > 1 || substr($input_string, -strlen($newline)) !== $newline)
+ ) {
$po = "$quote$quote$newline$po";
}
- // remove empty strings
+ // Remove empty strings.
$po = str_replace("$newline$quote$quote", '', $po);
-
return $po;
}
/**
- * Gives back the original string from a PO-formatted string.
- *
- * @param string $string PO-formatted string
+ * Gives back the original string from a PO-formatted string
*
+ * @param string $input_string PO-formatted string
* @return string enascaped string
*/
- public static function unpoify($string)
+ public static function unpoify($input_string)
{
- $escapes = array('t' => "\t", 'n' => "\n", 'r' => "\r", '\\' => '\\');
- $lines = array_map('trim', explode("\n", $string));
- $lines = array_map(array(__NAMESPACE__.'\PO', 'trim_quotes'), $lines);
- $unpoified = '';
+ $escapes = array(
+ 't' => "\t",
+ 'n' => "\n",
+ 'r' => "\r",
+ '\\' => '\\',
+ );
+ $lines = array_map('trim', explode("\n", $input_string));
+ $lines = array_map(array(__NAMESPACE__ . '\PO', 'trim_quotes'), $lines);
+ $unpoified = '';
$previous_is_backslash = false;
foreach ($lines as $line) {
preg_match_all('/./u', $line, $chars);
$chars = $chars[0];
foreach ($chars as $char) {
- if (!$previous_is_backslash) {
- if ('\\' == $char) {
+ if (! $previous_is_backslash) {
+ if ('\\' === $char) {
$previous_is_backslash = true;
} else {
$unpoified .= $char;
}
} else {
$previous_is_backslash = false;
- $unpoified .= isset($escapes[$char]) ? $escapes[$char] : $char;
+ $unpoified .= isset($escapes[ $char ]) ? $escapes[ $char ] : $char;
}
}
}
- // Standardise the line endings on imported content, technically PO files shouldn't contain \r
+ // Standardize the line endings on imported content, technically PO files shouldn't contain \r.
$unpoified = str_replace(array("\r\n", "\r"), "\n", $unpoified);
return $unpoified;
}
/**
- * Inserts $with in the beginning of every new line of $string and
- * returns the modified string.
+ * Inserts $with in the beginning of every new line of $input_string and
+ * returns the modified string
*
- * @param string $string prepend lines in this string
- * @param string $with prepend lines with this string
- *
- * @return string The modified string
+ * @param string $input_string prepend lines in this string
+ * @param string $with prepend lines with this string
*/
- public static function prepend_each_line($string, $with)
+ public static function prepend_each_line($input_string, $with)
{
- $lines = explode("\n", $string);
+ $lines = explode("\n", $input_string);
$append = '';
- if ("\n" === substr($string, -1) && '' === end($lines)) {
- // Last line might be empty because $string was terminated
- // with a newline, remove it from the $lines array,
- // we'll restore state by re-terminating the string at the end
+ if ("\n" === substr($input_string, -1) && '' === end($lines)) {
+ /*
+ * Last line might be empty because $input_string was terminated
+ * with a newline, remove it from the $lines array,
+ * we'll restore state by re-terminating the string at the end.
+ */
array_pop($lines);
$append = "\n";
}
foreach ($lines as &$line) {
- $line = $with.$line;
+ $line = $with . $line;
}
unset($line);
- return implode("\n", $lines).$append;
+ return implode("\n", $lines) . $append;
}
/**
* Prepare a text as a comment -- wraps the lines and prepends #
- * and a special character to each line.
+ * and a special character to each line
*
* @param string $text the comment text
* @param string $char character to denote a special PO comment,
- * like :, default is a space
- *
- * @return string The modified string
+ * like :, default is a space
*/
private static function comment_block($text, $char = ' ')
{
@@ -244,14 +223,11 @@ class PO extends GettextTranslations
}
/**
- * Builds a string from the entry for inclusion in PO file.
+ * Builds a string from the entry for inclusion in PO file
*
- * @static
- *
- * @param EntryTranslations &$entry the entry to convert to po string
- *
- * @return false|string PO-style formatted string for the entry or
- * false if the entry is empty
+ * @param EntryTranslations $entry the entry to convert to po string.
+ * @return string|false PO-style formatted string for the entry or
+ * false if the entry is empty
*/
public static function export_entry(EntryTranslations &$entry)
{
@@ -259,67 +235,58 @@ class PO extends GettextTranslations
return false;
}
$po = array();
- if (!empty($entry->translator_comments)) {
+ if (! empty($entry->translator_comments)) {
$po[] = self::comment_block($entry->translator_comments);
}
- if (!empty($entry->extracted_comments)) {
+ if (! empty($entry->extracted_comments)) {
$po[] = self::comment_block($entry->extracted_comments, '.');
}
- if (!empty($entry->references)) {
+ if (! empty($entry->references)) {
$po[] = self::comment_block(implode(' ', $entry->references), ':');
}
- if (!empty($entry->flags)) {
+ if (! empty($entry->flags)) {
$po[] = self::comment_block(implode(', ', $entry->flags), ',');
}
- if (!is_null($entry->context)) {
- $po[] = 'msgctxt '.self::poify($entry->context);
+ if ($entry->context) {
+ $po[] = 'msgctxt ' . self::poify($entry->context);
}
- $po[] = 'msgid '.self::poify($entry->singular);
- if (!$entry->is_plural) {
- $translation = empty($entry->translations) ?
- '' :
- $entry->translations[0];
+ $po[] = 'msgid ' . self::poify($entry->singular);
+ if (! $entry->is_plural) {
+ $translation = empty($entry->translations) ? '' : $entry->translations[0];
$translation = self::match_begin_and_end_newlines($translation, $entry->singular);
- $po[] = 'msgstr '.self::poify($translation);
+ $po[] = 'msgstr ' . self::poify($translation);
} else {
- $po[] = 'msgid_plural '.self::poify($entry->plural);
- $translations = empty($entry->translations) ?
- array('', '') :
- $entry->translations;
+ $po[] = 'msgid_plural ' . self::poify($entry->plural);
+ $translations = empty($entry->translations) ? array( '', '' ) : $entry->translations;
foreach ($translations as $i => $translation) {
$translation = self::match_begin_and_end_newlines($translation, $entry->plural);
- $po[] = "msgstr[$i] ".self::poify($translation);
+ $po[] = "msgstr[$i] " . self::poify($translation);
}
}
-
return implode("\n", $po);
}
- /**
- * @param $translation
- * @param $original
- *
- * @return string
- */
public static function match_begin_and_end_newlines($translation, $original)
{
if ('' === $translation) {
return $translation;
}
- $original_begin = "\n" === substr($original, 0, 1);
- $original_end = "\n" === substr($original, -1);
+ $original_begin = "\n" === substr($original, 0, 1);
+ $original_end = "\n" === substr($original, -1);
$translation_begin = "\n" === substr($translation, 0, 1);
- $translation_end = "\n" === substr($translation, -1);
+ $translation_end = "\n" === substr($translation, -1);
+
if ($original_begin) {
- if (!$translation_begin) {
- $translation = "\n".$translation;
+ if (! $translation_begin) {
+ $translation = "\n" . $translation;
}
} elseif ($translation_begin) {
$translation = ltrim($translation, "\n");
}
+
if ($original_end) {
- if (!$translation_end) {
+ if (! $translation_end) {
$translation .= "\n";
}
} elseif ($translation_end) {
@@ -337,20 +304,17 @@ class PO extends GettextTranslations
public function import_from_file($filename)
{
$f = fopen($filename, 'r');
- if (!$f) {
+ if (! $f) {
return false;
}
$lineno = 0;
- $res = false;
while (true) {
$res = $this->read_entry($f, $lineno);
- if (!$res) {
+ if (! $res) {
break;
}
- if ($res['entry']->singular == '') {
- $this->set_headers(
- $this->make_headers($res['entry']->translations[0])
- );
+ if ('' === $res['entry']->singular) {
+ $this->set_headers($this->make_headers($res['entry']->translations[0]));
} else {
$this->add_entry($res['entry']);
}
@@ -359,47 +323,44 @@ class PO extends GettextTranslations
if (false === $res) {
return false;
}
- if (!$this->headers && !$this->entries) {
+ if (! $this->headers && ! $this->entries) {
return false;
}
-
return true;
}
/**
- * Helper function for read_entry.
+ * Helper function for read_entry
*
* @param string $context
- *
* @return bool
*/
protected static function is_final($context)
{
- return ($context === 'msgstr') || ($context === 'msgstr_plural');
+ return ('msgstr' === $context) || ('msgstr_plural' === $context);
}
/**
* @param resource $f
* @param int $lineno
- *
* @return null|false|array
*/
public function read_entry($f, $lineno = 0)
{
$entry = new EntryTranslations();
- // where were we in the last step
- // can be: comment, msgctxt, msgid, msgid_plural, msgstr, msgstr_plural
- $context = '';
+ // Where were we in the last step.
+ // Can be: comment, msgctxt, msgid, msgid_plural, msgstr, msgstr_plural.
+ $context = '';
$msgstr_index = 0;
while (true) {
$lineno++;
$line = self::read_line($f);
- if (!$line) {
+ if (! $line) {
if (feof($f)) {
if (self::is_final($context)) {
break;
- } elseif (!$context) { // we haven't read a line and eof came
- return;
+ } elseif (! $context) { // We haven't read a line and EOF came.
+ return null;
} else {
return false;
}
@@ -407,23 +368,22 @@ class PO extends GettextTranslations
return false;
}
}
- if ($line == "\n") {
+ if ("\n" === $line) {
continue;
}
-
$line = trim($line);
if (preg_match('/^#/', $line, $m)) {
- // the comment is the start of a new entry
+ // The comment is the start of a new entry.
if (self::is_final($context)) {
self::read_line($f, 'put-back');
$lineno--;
break;
}
- // comments have to be at the beginning
- if ($context && $context != 'comment') {
+ // Comments have to be at the beginning.
+ if ($context && 'comment' !== $context) {
return false;
}
- // add comment
+ // Add comment.
$this->add_comment_to_entry($entry, $line);
} elseif (preg_match('/^msgctxt\s+(".*")/', $line, $m)) {
if (self::is_final($context)) {
@@ -431,10 +391,10 @@ class PO extends GettextTranslations
$lineno--;
break;
}
- if ($context && $context != 'comment') {
+ if ($context && 'comment' !== $context) {
return false;
}
- $context = 'msgctxt';
+ $context = 'msgctxt';
$entry->context .= self::unpoify($m[1]);
} elseif (preg_match('/^msgid\s+(".*")/', $line, $m)) {
if (self::is_final($context)) {
@@ -442,32 +402,30 @@ class PO extends GettextTranslations
$lineno--;
break;
}
- if ($context &&
- $context != 'msgctxt' &&
- $context != 'comment') {
+ if ($context && 'msgctxt' !== $context && 'comment' !== $context) {
return false;
}
- $context = 'msgid';
+ $context = 'msgid';
$entry->singular .= self::unpoify($m[1]);
} elseif (preg_match('/^msgid_plural\s+(".*")/', $line, $m)) {
- if ($context != 'msgid') {
+ if ('msgid' !== $context) {
return false;
}
- $context = 'msgid_plural';
+ $context = 'msgid_plural';
$entry->is_plural = true;
- $entry->plural .= self::unpoify($m[1]);
+ $entry->plural .= self::unpoify($m[1]);
} elseif (preg_match('/^msgstr\s+(".*")/', $line, $m)) {
- if ($context != 'msgid') {
+ if ('msgid' !== $context) {
return false;
}
- $context = 'msgstr';
+ $context = 'msgstr';
$entry->translations = array(self::unpoify($m[1]));
} elseif (preg_match('/^msgstr\[(\d+)\]\s+(".*")/', $line, $m)) {
- if ($context != 'msgid_plural' && $context != 'msgstr_plural') {
+ if ('msgid_plural' !== $context && 'msgstr_plural' !== $context) {
return false;
}
- $context = 'msgstr_plural';
- $msgstr_index = $m[1];
+ $context = 'msgstr_plural';
+ $msgstr_index = $m[1];
$entry->translations[$m[1]] = self::unpoify($m[2]);
} elseif (preg_match('/^".*"$/', $line)) {
$unpoified = self::unpoify($line);
@@ -506,36 +464,33 @@ class PO extends GettextTranslations
$entry->translations = array();
}
- return array('entry' => $entry, 'lineno' => $lineno);
+ return array(
+ 'entry' => $entry,
+ 'lineno' => $lineno,
+ );
}
/**
* @param resource $f
* @param string $action
- *
* @return bool
*/
public static function read_line($f, $action = 'read')
{
- static $last_line = '';
+ static $last_line = '';
static $use_last_line = false;
- if ('clear' == $action) {
+ if ('clear' === $action) {
$last_line = '';
-
return true;
}
- if ('put-back' == $action) {
+ if ('put-back' === $action) {
$use_last_line = true;
-
return true;
}
- $line = $use_last_line ? $last_line : fgets($f);
- $line = ("\r\n" == substr($line, -2)) ?
- rtrim($line, "\r\n")."\n" :
- $line;
- $last_line = $line;
+ $line = $use_last_line ? $last_line : fgets($f);
+ $line = ("\r\n" === substr($line, -2)) ? rtrim($line, "\r\n") . "\n" : $line;
+ $last_line = $line;
$use_last_line = false;
-
return $line;
}
@@ -546,42 +501,30 @@ class PO extends GettextTranslations
public function add_comment_to_entry(EntryTranslations &$entry, $po_comment_line)
{
$first_two = substr($po_comment_line, 0, 2);
- $comment = trim(substr($po_comment_line, 2));
- if ('#:' == $first_two) {
- $entry->references = array_merge(
- $entry->references,
- preg_split('/\s+/', $comment)
- );
- } elseif ('#.' == $first_two) {
- $entry->extracted_comments = trim(
- $entry->extracted_comments."\n".$comment
- );
- } elseif ('#,' == $first_two) {
- $entry->flags = array_merge(
- $entry->flags,
- preg_split('/,\s*/', $comment)
- );
+ $comment = trim(substr($po_comment_line, 2));
+ if ('#:' === $first_two) {
+ $entry->references = array_merge($entry->references, preg_split('/\s+/', $comment));
+ } elseif ('#.' === $first_two) {
+ $entry->extracted_comments = trim($entry->extracted_comments . "\n" . $comment);
+ } elseif ('#,' === $first_two) {
+ $entry->flags = array_merge($entry->flags, preg_split('/,\s*/', $comment));
} else {
- $entry->translator_comments = trim(
- $entry->translator_comments."\n".$comment
- );
+ $entry->translator_comments = trim($entry->translator_comments . "\n" . $comment);
}
}
/**
* @param string $s
- *
* @return string
*/
public static function trim_quotes($s)
{
- if (substr($s, 0, 1) == '"') {
+ if ('"' === substr($s, 0, 1)) {
$s = substr($s, 1);
}
- if (substr($s, -1, 1) == '"') {
+ if ('"' === substr($s, -1, 1)) {
$s = substr($s, 0, -1);
}
-
return $s;
}
}
diff --git a/includes/vendor/pomo/pomo/src/Parser/PluralForms.php b/includes/vendor/pomo/pomo/src/Parser/PluralForms.php
index 867ac20..8995196 100644
--- a/includes/vendor/pomo/pomo/src/Parser/PluralForms.php
+++ b/includes/vendor/pomo/pomo/src/Parser/PluralForms.php
@@ -1,4 +1,5 @@
*/
class CachedFileReader extends StringReader implements StreamInterface
{
diff --git a/includes/vendor/pomo/pomo/src/Streams/CachedIntFileReader.php b/includes/vendor/pomo/pomo/src/Streams/CachedIntFileReader.php
index fe6c67a..4817041 100644
--- a/includes/vendor/pomo/pomo/src/Streams/CachedIntFileReader.php
+++ b/includes/vendor/pomo/pomo/src/Streams/CachedIntFileReader.php
@@ -1,4 +1,5 @@
_f = fopen($filename, 'rb');
}
+ /**
+ * @param int $bytes
+ * @return string|false Returns read string, otherwise false.
+ */
public function read($bytes)
{
return fread($this->_f, $bytes);
}
+ /**
+ * @param int $pos
+ * @return bool
+ */
public function seekto($pos)
{
if (-1 == fseek($this->_f, $pos, SEEK_SET)) {
return false;
}
$this->_pos = $pos;
-
return true;
}
+ /**
+ * @return bool
+ */
public function is_resource()
{
return is_resource($this->_f);
@@ -51,18 +69,19 @@ class FileReader extends Reader implements StreamInterface
return feof($this->_f);
}
+ /**
+ * @return bool
+ */
public function close()
{
return fclose($this->_f);
}
+ /**
+ * @return string
+ */
public function read_all()
{
- $all = '';
- while (!$this->feof()) {
- $all .= $this->read(4096);
- }
-
- return $all;
+ return stream_get_contents($this->_f);
}
}
diff --git a/includes/vendor/pomo/pomo/src/Streams/NOOPReader.php b/includes/vendor/pomo/pomo/src/Streams/NOOPReader.php
index 3d9b799..0476c02 100644
--- a/includes/vendor/pomo/pomo/src/Streams/NOOPReader.php
+++ b/includes/vendor/pomo/pomo/src/Streams/NOOPReader.php
@@ -1,4 +1,5 @@
*/
+#[AllowDynamicProperties]
abstract class Reader implements StreamInterface
{
public $endian = 'little';
- public $_post = '';
+ public $_pos;
+ public $is_overloaded;
public function __construct()
{
- $this->is_overloaded = ((ini_get('mbstring.func_overload') & 2) != 0) &&
- function_exists('mb_substr');
+ if (
+ function_exists('mb_substr')
+ && ((int) ini_get('mbstring.func_overload') & 2) // phpcs:ignore PHPCompatibility.IniDirectives.RemovedIniDirectives.mbstring_func_overloadDeprecated
+ ) {
+ $this->is_overloaded = true;
+ } else {
+ $this->is_overloaded = false;
+ }
+
$this->_pos = 0;
}
- public function setEndian($endian)
+ /**
+ * Sets the endianness of the file.
+ *
+ * @param string $endian Set the endianness of the file. Accepts 'big', or 'little'.
+ */
+ public function setEndian($endian) // phpcs:ignore WordPress.NamingConventions.ValidFunctionName.MethodNameInvalid
{
$this->endian = $endian;
}
+ /**
+ * Reads a 32bit Integer from the Stream
+ *
+ * @return mixed The integer, corresponding to the next 32 bits from
+ * the stream of false if there are not enough bytes or on error
+ */
public function readint32()
{
$bytes = $this->read(4);
if (4 != $this->strlen($bytes)) {
return false;
}
- $endian_letter = ('big' == $this->endian) ? 'N' : 'V';
- $int = unpack($endian_letter, $bytes);
-
+ $endian_letter = ('big' === $this->endian) ? 'N' : 'V';
+ $int = unpack($endian_letter, $bytes);
return reset($int);
}
+ /**
+ * Reads an array of 32-bit Integers from the Stream
+ *
+ * @param int $count How many elements should be read
+ * @return mixed Array of integers or false if there isn't
+ * enough data or on error
+ */
public function readint32array($count)
{
$bytes = $this->read(4 * $count);
if (4 * $count != $this->strlen($bytes)) {
return false;
}
- $endian_letter = ('big' == $this->endian) ? 'N' : 'V';
-
- return unpack($endian_letter.$count, $bytes);
+ $endian_letter = ('big' === $this->endian) ? 'N' : 'V';
+ return unpack($endian_letter . $count, $bytes);
}
- public function substr($string, $start, $length)
+ /**
+ * @param string $input_string
+ * @param int $start
+ * @param int $length
+ * @return string
+ */
+ public function substr($input_string, $start, $length)
{
if ($this->is_overloaded) {
- return mb_substr($string, $start, $length, 'ascii');
+ return mb_substr($input_string, $start, $length, 'ascii');
} else {
- return substr($string, $start, $length);
+ return substr($input_string, $start, $length);
}
}
- public function strlen($string)
+ /**
+ * @param string $input_string
+ * @return int
+ */
+ public function strlen($input_string)
{
if ($this->is_overloaded) {
- return mb_strlen($string, 'ascii');
+ return mb_strlen($input_string, 'ascii');
} else {
- return strlen($string);
+ return strlen($input_string);
}
}
- public function str_split($string, $chunk_size)
+ /**
+ * @param string $input_string
+ * @param int $chunk_size
+ * @return array
+ */
+ public function str_split($input_string, $chunk_size)
{
- if (!function_exists('str_split')) {
- $length = $this->strlen($string);
- $out = array();
+ if (! function_exists('str_split')) {
+ $length = $this->strlen($input_string);
+ $out = array();
for ($i = 0; $i < $length; $i += $chunk_size) {
- $out[] = $this->substr($string, $i, $chunk_size);
+ $out[] = $this->substr($input_string, $i, $chunk_size);
}
-
return $out;
} else {
- return str_split($string, $chunk_size);
+ return str_split($input_string, $chunk_size);
}
}
+ /**
+ * @return int
+ */
public function pos()
{
return $this->_pos;
}
+ /**
+ * @return true
+ */
public function is_resource()
{
return true;
}
+ /**
+ * @return true
+ */
public function close()
{
return true;
diff --git a/includes/vendor/pomo/pomo/src/Streams/StreamInterface.php b/includes/vendor/pomo/pomo/src/Streams/StreamInterface.php
index 012b2c4..07f18bf 100644
--- a/includes/vendor/pomo/pomo/src/Streams/StreamInterface.php
+++ b/includes/vendor/pomo/pomo/src/Streams/StreamInterface.php
@@ -1,4 +1,5 @@
- */
+ /**
+ * Provides file-like methods for manipulating a string instead
+ * of a physical file.
+ */
class StringReader extends Reader implements StreamInterface
{
public $_str = '';
@@ -22,24 +21,30 @@ class StringReader extends Reader implements StreamInterface
$this->_pos = 0;
}
+ /**
+ * @param string $bytes
+ * @return string
+ */
public function read($bytes)
{
- $data = $this->substr($this->_str, $this->_pos, $bytes);
+ $data = $this->substr($this->_str, $this->_pos, $bytes);
$this->_pos += $bytes;
if ($this->strlen($this->_str) < $this->_pos) {
$this->_pos = $this->strlen($this->_str);
}
-
return $data;
}
+ /**
+ * @param int $pos
+ * @return int
+ */
public function seekto($pos)
{
$this->_pos = $pos;
if ($this->strlen($this->_str) < $this->_pos) {
$this->_pos = $this->strlen($this->_str);
}
-
return $this->_pos;
}
@@ -51,12 +56,11 @@ class StringReader extends Reader implements StreamInterface
return $this->strlen($this->_str);
}
+ /**
+ * @return string
+ */
public function read_all()
{
- return $this->substr(
- $this->_str,
- $this->_pos,
- $this->strlen($this->_str)
- );
+ return $this->substr($this->_str, $this->_pos, $this->strlen($this->_str));
}
}
diff --git a/includes/vendor/pomo/pomo/src/Translations/EntryTranslations.php b/includes/vendor/pomo/pomo/src/Translations/EntryTranslations.php
index 730df67..1c6c9b8 100644
--- a/includes/vendor/pomo/pomo/src/Translations/EntryTranslations.php
+++ b/includes/vendor/pomo/pomo/src/Translations/EntryTranslations.php
@@ -1,4 +1,5 @@
$value) {
$this->$varname = $value;
}
if (isset($args['plural']) && $args['plural']) {
$this->is_plural = true;
}
- if (!is_array($this->translations)) {
+ if (! is_array($this->translations)) {
$this->translations = array();
}
- if (!is_array($this->references)) {
+ if (! is_array($this->references)) {
$this->references = array();
}
- if (!is_array($this->flags)) {
+ if (! is_array($this->flags)) {
$this->flags = array();
}
}
@@ -68,18 +77,18 @@ class EntryTranslations
/**
* Generates a unique key for this entry.
*
- * @return string|bool the key or false if the entry is empty
+ * @return string|false The key or false if the entry is null.
*/
public function key()
{
- if (null === $this->singular || '' === $this->singular) {
+ if (null === $this->singular) {
return false;
}
- // Prepend context and EOT, like in MO files
- $key = !$this->context ? $this->singular : $this->context.chr(4).$this->singular;
- // Standardize on \n line endings
- $key = str_replace(array("\r\n", "\r"), "\n", $key);
+ // Prepend context and EOT, like in MO files.
+ $key = ! $this->context ? $this->singular : $this->context . "\4" . $this->singular;
+ // Standardize on \n line endings.
+ $key = str_replace(array( "\r\n", "\r" ), "\n", $key);
return $key;
}
@@ -89,7 +98,7 @@ class EntryTranslations
*/
public function merge_with(&$other)
{
- $this->flags = array_unique(array_merge($this->flags, $other->flags));
+ $this->flags = array_unique(array_merge($this->flags, $other->flags));
$this->references = array_unique(array_merge($this->references, $other->references));
if ($this->extracted_comments != $other->extracted_comments) {
$this->extracted_comments .= $other->extracted_comments;
diff --git a/includes/vendor/pomo/pomo/src/Translations/GettextTranslations.php b/includes/vendor/pomo/pomo/src/Translations/GettextTranslations.php
index 11b2a79..dd4ca5a 100644
--- a/includes/vendor/pomo/pomo/src/Translations/GettextTranslations.php
+++ b/includes/vendor/pomo/pomo/src/Translations/GettextTranslations.php
@@ -1,4 +1,5 @@
_gettext_select_plural_form)
- || is_null($this->_gettext_select_plural_form)) {
+ if (
+ !isset($this->_gettext_select_plural_form)
+ || is_null($this->_gettext_select_plural_form)
+ ) {
list($nplurals, $expression) = $this->nplurals_and_expression_from_header($this->get_header('Plural-Forms'));
$this->_nplurals = $nplurals;
$this->_gettext_select_plural_form = $this->make_plural_form_function($nplurals, $expression);
@@ -103,7 +117,7 @@ class GettextTranslations extends Translations implements TranslationsInterface
$res .= ') : (';
break;
case ';':
- $res .= str_repeat(')', $depth).';';
+ $res .= str_repeat(')', $depth) . ';';
$depth = 0;
break;
default:
diff --git a/includes/vendor/pomo/pomo/src/Translations/NOOPTranslations.php b/includes/vendor/pomo/pomo/src/Translations/NOOPTranslations.php
index 2c0d995..90388cf 100644
--- a/includes/vendor/pomo/pomo/src/Translations/NOOPTranslations.php
+++ b/includes/vendor/pomo/pomo/src/Translations/NOOPTranslations.php
@@ -1,4 +1,5 @@
translate_entry($entry);
$index = $this->select_plural_form($count);
$total_plural_forms = $this->get_plural_forms_count();
- if ($translated && 0 <= $index && $index < $total_plural_forms &&
+ if (
+ $translated && 0 <= $index && $index < $total_plural_forms &&
is_array($translated->translations) &&
- isset($translated->translations[$index])) {
+ isset($translated->translations[$index])
+ ) {
return $translated->translations[$index];
} else {
return 1 == $count ? $singular : $plural;
diff --git a/includes/vendor/pomo/pomo/src/Translations/TranslationsInterface.php b/includes/vendor/pomo/pomo/src/Translations/TranslationsInterface.php
index e65c93e..a14aa2f 100644
--- a/includes/vendor/pomo/pomo/src/Translations/TranslationsInterface.php
+++ b/includes/vendor/pomo/pomo/src/Translations/TranslationsInterface.php
@@ -1,4 +1,5 @@
](https://supportukrainenow.org)
+
# Convert an array to xml
[![Latest Version](https://img.shields.io/github/release/spatie/array-to-xml.svg?style=flat-square)](https://github.com/spatie/array-to-xml/releases)
@@ -360,7 +363,7 @@ This will result in:
estacetfirst-tag
- second-tag
+ second-tag
@@ -477,23 +480,43 @@ This will result in:
soap:value
```
+### Adding processing instructions
+
+Call `$arrayToXml->addProcessingInstruction($target, $data)` method on ArrayToXml object to prepend a processing instruction before the root element.
+
+Example:
+
+```php
+$arrayToXml = new ArrayToXml($array);
+$arrayToXml->addProcessingInstruction('xml-stylesheet', 'type="text/xsl" href="base.xsl"');
+$result = $arrayToXml->toXml();
+```
+
+This will result in:
+
+```xml
+
+
+Luke SkywalkerLightsaberSauronEvil Eye
+```
+
## Testing
```bash
vendor/bin/phpunit
```
-### Changelog
+## Changelog
-Please see [CHANGELOG](CHANGELOG.md) for more information what has changed recently.
+Please see [CHANGELOG](CHANGELOG.md) for more information on what has changed recently.
## Contributing
-Please see [CONTRIBUTING](CONTRIBUTING.md) for details.
+Please see [CONTRIBUTING](https://github.com/spatie/.github/blob/main/CONTRIBUTING.md) for details.
-## Security
+## Security Vulnerabilities
-If you discover any security related issues, please email freek@spatie.be instead of using the issue tracker.
+Please review [our security policy](../../security/policy) on how to report security vulnerabilities.
## Postcardware
diff --git a/includes/vendor/spatie/array-to-xml/src/ArrayToXml.php b/includes/vendor/spatie/array-to-xml/src/ArrayToXml.php
index 66eb49e..4a0a457 100644
--- a/includes/vendor/spatie/array-to-xml/src/ArrayToXml.php
+++ b/includes/vendor/spatie/array-to-xml/src/ArrayToXml.php
@@ -26,7 +26,7 @@ class ArrayToXml
$domProperties = [],
$xmlStandalone = null
) {
- $this->document = new DOMDocument($xmlVersion, $xmlEncoding);
+ $this->document = new DOMDocument($xmlVersion, $xmlEncoding ?? '');
if (! is_null($xmlStandalone)) {
$this->document->xmlStandalone = $xmlStandalone;
@@ -38,7 +38,7 @@ class ArrayToXml
$this->replaceSpacesByUnderScoresInKeyNames = $replaceSpacesByUnderScoresInKeyNames;
- if ($this->isArrayAllKeySequential($array) && ! empty($array)) {
+ if (! empty($array) && $this->isArrayAllKeySequential($array)) {
throw new DOMException('Invalid Character Error');
}
@@ -78,11 +78,9 @@ class ArrayToXml
public function toXml(): string
{
- if ($this->addXmlDeclaration === false) {
- return $this->document->saveXml($this->document->documentElement);
- }
-
- return $this->document->saveXML();
+ return $this->addXmlDeclaration
+ ? $this->document->saveXML()
+ : $this->document->saveXml($this->document->documentElement);
}
public function toDom(): DOMDocument
@@ -94,7 +92,7 @@ class ArrayToXml
{
foreach ($domProperties as $key => $value) {
if (! property_exists($this->document, $key)) {
- throw new Exception($key.' is not a valid property of DOMDocument');
+ throw new Exception("{$key} is not a valid property of DOMDocument");
}
}
}
@@ -125,12 +123,25 @@ class ArrayToXml
return $this;
}
+ public function addProcessingInstruction($target, $data)
+ {
+ $elements = $this->document->getElementsByTagName('*');
+
+ $rootElement = $elements->count() > 0 ? $elements->item(0) : null;
+
+ $processingInstruction = $this->document->createProcessingInstruction($target, $data);
+
+ $this->document->insertBefore($processingInstruction, $rootElement);
+
+ return $this;
+ }
+
private function convertElement(DOMElement $element, $value)
{
$sequential = $this->isArrayAllKeySequential($value);
if (! is_array($value)) {
- $value = htmlspecialchars($value);
+ $value = htmlspecialchars($value ?? '');
$value = $this->removeControlCharacters($value);
@@ -205,7 +216,7 @@ class ArrayToXml
return;
}
- $child = new DOMElement($element->tagName);
+ $child = $this->document->createElement($element->tagName);
$child->nodeValue = htmlspecialchars($value);
$element->parentNode->appendChild($child);
}
@@ -230,7 +241,7 @@ class ArrayToXml
protected function addAttributes(DOMElement $element, array $data)
{
foreach ($data as $attrKey => $attrVal) {
- $element->setAttribute($attrKey, $attrVal);
+ $element->setAttribute($attrKey, $attrVal ?? '');
}
}
diff --git a/includes/vendor/symfony/polyfill-intl-idn/Idn.php b/includes/vendor/symfony/polyfill-intl-idn/Idn.php
index fee3026..86710b9 100644
--- a/includes/vendor/symfony/polyfill-intl-idn/Idn.php
+++ b/includes/vendor/symfony/polyfill-intl-idn/Idn.php
@@ -723,7 +723,7 @@ final class Idn
$qMinusT = $q - $t;
$baseMinusT = self::BASE - $t;
- $output .= self::encodeDigit($t + ($qMinusT) % ($baseMinusT), false);
+ $output .= self::encodeDigit($t + $qMinusT % $baseMinusT, false);
++$out;
$q = intdiv($qMinusT, $baseMinusT);
}
diff --git a/includes/vendor/symfony/polyfill-intl-idn/README.md b/includes/vendor/symfony/polyfill-intl-idn/README.md
index 2e75f2e..cae5517 100644
--- a/includes/vendor/symfony/polyfill-intl-idn/README.md
+++ b/includes/vendor/symfony/polyfill-intl-idn/README.md
@@ -4,7 +4,7 @@ Symfony Polyfill / Intl: Idn
This component provides [`idn_to_ascii`](https://php.net/idn-to-ascii) and [`idn_to_utf8`](https://php.net/idn-to-utf8) functions to users who run php versions without the [Intl](https://php.net/intl) extension.
More information can be found in the
-[main Polyfill README](https://github.com/symfony/polyfill/blob/master/README.md).
+[main Polyfill README](https://github.com/symfony/polyfill/blob/main/README.md).
License
=======
diff --git a/includes/vendor/symfony/polyfill-intl-idn/composer.json b/includes/vendor/symfony/polyfill-intl-idn/composer.json
index c5a2a46..105e3d0 100644
--- a/includes/vendor/symfony/polyfill-intl-idn/composer.json
+++ b/includes/vendor/symfony/polyfill-intl-idn/composer.json
@@ -34,7 +34,7 @@
"minimum-stability": "dev",
"extra": {
"branch-alias": {
- "dev-main": "1.23-dev"
+ "dev-main": "1.27-dev"
},
"thanks": {
"name": "symfony/polyfill",
diff --git a/includes/vendor/symfony/polyfill-intl-normalizer/Normalizer.php b/includes/vendor/symfony/polyfill-intl-normalizer/Normalizer.php
index 4443c23..81704ab 100644
--- a/includes/vendor/symfony/polyfill-intl-normalizer/Normalizer.php
+++ b/includes/vendor/symfony/polyfill-intl-normalizer/Normalizer.php
@@ -90,7 +90,7 @@ class Normalizer
self::$cC = self::getData('combiningClass');
}
- if (null !== $mbEncoding = (2 /* MB_OVERLOAD_STRING */ & (int) ini_get('mbstring.func_overload')) ? mb_internal_encoding() : null) {
+ if (null !== $mbEncoding = (2 /* MB_OVERLOAD_STRING */ & (int) \ini_get('mbstring.func_overload')) ? mb_internal_encoding() : null) {
mb_internal_encoding('8bit');
}
diff --git a/includes/vendor/symfony/polyfill-intl-normalizer/README.md b/includes/vendor/symfony/polyfill-intl-normalizer/README.md
index 15060c5..b9b762e 100644
--- a/includes/vendor/symfony/polyfill-intl-normalizer/README.md
+++ b/includes/vendor/symfony/polyfill-intl-normalizer/README.md
@@ -6,7 +6,7 @@ This component provides a fallback implementation for the
by the [Intl](https://php.net/intl) extension.
More information can be found in the
-[main Polyfill README](https://github.com/symfony/polyfill/blob/master/README.md).
+[main Polyfill README](https://github.com/symfony/polyfill/blob/main/README.md).
License
=======
diff --git a/includes/vendor/symfony/polyfill-intl-normalizer/composer.json b/includes/vendor/symfony/polyfill-intl-normalizer/composer.json
index 393edf7..65f72d6 100644
--- a/includes/vendor/symfony/polyfill-intl-normalizer/composer.json
+++ b/includes/vendor/symfony/polyfill-intl-normalizer/composer.json
@@ -29,7 +29,7 @@
"minimum-stability": "dev",
"extra": {
"branch-alias": {
- "dev-main": "1.23-dev"
+ "dev-main": "1.27-dev"
},
"thanks": {
"name": "symfony/polyfill",
diff --git a/includes/vendor/symfony/polyfill-mbstring/Mbstring.php b/includes/vendor/symfony/polyfill-mbstring/Mbstring.php
index b65c54a..bce5c4a 100644
--- a/includes/vendor/symfony/polyfill-mbstring/Mbstring.php
+++ b/includes/vendor/symfony/polyfill-mbstring/Mbstring.php
@@ -80,7 +80,7 @@ final class Mbstring
public static function mb_convert_encoding($s, $toEncoding, $fromEncoding = null)
{
- if (\is_array($fromEncoding) || ($fromEncoding !== null && false !== strpos($fromEncoding, ','))) {
+ if (\is_array($fromEncoding) || (null !== $fromEncoding && false !== strpos($fromEncoding, ','))) {
$fromEncoding = self::mb_detect_encoding($s, $fromEncoding);
} else {
$fromEncoding = self::getEncoding($fromEncoding);
@@ -102,7 +102,7 @@ final class Mbstring
$fromEncoding = 'Windows-1252';
}
if ('UTF-8' !== $fromEncoding) {
- $s = \iconv($fromEncoding, 'UTF-8//IGNORE', $s);
+ $s = iconv($fromEncoding, 'UTF-8//IGNORE', $s);
}
return preg_replace_callback('/[\x80-\xFF]+/', [__CLASS__, 'html_encoding_callback'], $s);
@@ -113,7 +113,7 @@ final class Mbstring
$fromEncoding = 'UTF-8';
}
- return \iconv($fromEncoding, $toEncoding.'//IGNORE', $s);
+ return iconv($fromEncoding, $toEncoding.'//IGNORE', $s);
}
public static function mb_convert_variables($toEncoding, $fromEncoding, &...$vars)
@@ -130,7 +130,7 @@ final class Mbstring
public static function mb_decode_mimeheader($s)
{
- return \iconv_mime_decode($s, 2, self::$internalEncoding);
+ return iconv_mime_decode($s, 2, self::$internalEncoding);
}
public static function mb_encode_mimeheader($s, $charset = null, $transferEncoding = null, $linefeed = null, $indent = null)
@@ -140,7 +140,7 @@ final class Mbstring
public static function mb_decode_numericentity($s, $convmap, $encoding = null)
{
- if (null !== $s && !is_scalar($s) && !(\is_object($s) && method_exists($s, '__toString'))) {
+ if (null !== $s && !\is_scalar($s) && !(\is_object($s) && method_exists($s, '__toString'))) {
trigger_error('mb_decode_numericentity() expects parameter 1 to be string, '.\gettype($s).' given', \E_USER_WARNING);
return null;
@@ -150,7 +150,7 @@ final class Mbstring
return false;
}
- if (null !== $encoding && !is_scalar($encoding)) {
+ if (null !== $encoding && !\is_scalar($encoding)) {
trigger_error('mb_decode_numericentity() expects parameter 3 to be string, '.\gettype($s).' given', \E_USER_WARNING);
return ''; // Instead of null (cf. mb_encode_numericentity).
@@ -166,10 +166,10 @@ final class Mbstring
if ('UTF-8' === $encoding) {
$encoding = null;
if (!preg_match('//u', $s)) {
- $s = @\iconv('UTF-8', 'UTF-8//IGNORE', $s);
+ $s = @iconv('UTF-8', 'UTF-8//IGNORE', $s);
}
} else {
- $s = \iconv($encoding, 'UTF-8//IGNORE', $s);
+ $s = iconv($encoding, 'UTF-8//IGNORE', $s);
}
$cnt = floor(\count($convmap) / 4) * 4;
@@ -195,12 +195,12 @@ final class Mbstring
return $s;
}
- return \iconv('UTF-8', $encoding.'//IGNORE', $s);
+ return iconv('UTF-8', $encoding.'//IGNORE', $s);
}
public static function mb_encode_numericentity($s, $convmap, $encoding = null, $is_hex = false)
{
- if (null !== $s && !is_scalar($s) && !(\is_object($s) && method_exists($s, '__toString'))) {
+ if (null !== $s && !\is_scalar($s) && !(\is_object($s) && method_exists($s, '__toString'))) {
trigger_error('mb_encode_numericentity() expects parameter 1 to be string, '.\gettype($s).' given', \E_USER_WARNING);
return null;
@@ -210,13 +210,13 @@ final class Mbstring
return false;
}
- if (null !== $encoding && !is_scalar($encoding)) {
+ if (null !== $encoding && !\is_scalar($encoding)) {
trigger_error('mb_encode_numericentity() expects parameter 3 to be string, '.\gettype($s).' given', \E_USER_WARNING);
return null; // Instead of '' (cf. mb_decode_numericentity).
}
- if (null !== $is_hex && !is_scalar($is_hex)) {
+ if (null !== $is_hex && !\is_scalar($is_hex)) {
trigger_error('mb_encode_numericentity() expects parameter 4 to be boolean, '.\gettype($s).' given', \E_USER_WARNING);
return null;
@@ -232,10 +232,10 @@ final class Mbstring
if ('UTF-8' === $encoding) {
$encoding = null;
if (!preg_match('//u', $s)) {
- $s = @\iconv('UTF-8', 'UTF-8//IGNORE', $s);
+ $s = @iconv('UTF-8', 'UTF-8//IGNORE', $s);
}
} else {
- $s = \iconv($encoding, 'UTF-8//IGNORE', $s);
+ $s = iconv($encoding, 'UTF-8//IGNORE', $s);
}
static $ulenMask = ["\xC0" => 2, "\xD0" => 2, "\xE0" => 3, "\xF0" => 4];
@@ -265,7 +265,7 @@ final class Mbstring
return $result;
}
- return \iconv('UTF-8', $encoding.'//IGNORE', $result);
+ return iconv('UTF-8', $encoding.'//IGNORE', $result);
}
public static function mb_convert_case($s, $mode, $encoding = null)
@@ -280,10 +280,10 @@ final class Mbstring
if ('UTF-8' === $encoding) {
$encoding = null;
if (!preg_match('//u', $s)) {
- $s = @\iconv('UTF-8', 'UTF-8//IGNORE', $s);
+ $s = @iconv('UTF-8', 'UTF-8//IGNORE', $s);
}
} else {
- $s = \iconv($encoding, 'UTF-8//IGNORE', $s);
+ $s = iconv($encoding, 'UTF-8//IGNORE', $s);
}
if (\MB_CASE_TITLE == $mode) {
@@ -343,7 +343,7 @@ final class Mbstring
return $s;
}
- return \iconv('UTF-8', $encoding.'//IGNORE', $s);
+ return iconv('UTF-8', $encoding.'//IGNORE', $s);
}
public static function mb_internal_encoding($encoding = null)
@@ -354,7 +354,7 @@ final class Mbstring
$normalizedEncoding = self::getEncoding($encoding);
- if ('UTF-8' === $normalizedEncoding || false !== @\iconv($normalizedEncoding, $normalizedEncoding, ' ')) {
+ if ('UTF-8' === $normalizedEncoding || false !== @iconv($normalizedEncoding, $normalizedEncoding, ' ')) {
self::$internalEncoding = $normalizedEncoding;
return true;
@@ -413,7 +413,7 @@ final class Mbstring
$encoding = self::$internalEncoding;
}
- return self::mb_detect_encoding($var, [$encoding]) || false !== @\iconv($encoding, $encoding, $var);
+ return self::mb_detect_encoding($var, [$encoding]) || false !== @iconv($encoding, $encoding, $var);
}
public static function mb_detect_encoding($str, $encodingList = null, $strict = false)
@@ -488,7 +488,7 @@ final class Mbstring
return \strlen($s);
}
- return @\iconv_strlen($s, $encoding);
+ return @iconv_strlen($s, $encoding);
}
public static function mb_strpos($haystack, $needle, $offset = 0, $encoding = null)
@@ -509,7 +509,7 @@ final class Mbstring
return 0;
}
- return \iconv_strpos($haystack, $needle, $offset, $encoding);
+ return iconv_strpos($haystack, $needle, $offset, $encoding);
}
public static function mb_strrpos($haystack, $needle, $offset = 0, $encoding = null)
@@ -533,7 +533,7 @@ final class Mbstring
}
$pos = '' !== $needle || 80000 > \PHP_VERSION_ID
- ? \iconv_strrpos($haystack, $needle, $encoding)
+ ? iconv_strrpos($haystack, $needle, $encoding)
: self::mb_strlen($haystack, $encoding);
return false !== $pos ? $offset + $pos : false;
@@ -541,7 +541,7 @@ final class Mbstring
public static function mb_str_split($string, $split_length = 1, $encoding = null)
{
- if (null !== $string && !is_scalar($string) && !(\is_object($string) && method_exists($string, '__toString'))) {
+ if (null !== $string && !\is_scalar($string) && !(\is_object($string) && method_exists($string, '__toString'))) {
trigger_error('mb_str_split() expects parameter 1 to be string, '.\gettype($string).' given', \E_USER_WARNING);
return null;
@@ -550,6 +550,7 @@ final class Mbstring
if (1 > $split_length = (int) $split_length) {
if (80000 > \PHP_VERSION_ID) {
trigger_error('The length of each segment must be greater than zero', \E_USER_WARNING);
+
return false;
}
@@ -568,7 +569,7 @@ final class Mbstring
}
$rx .= '.{'.$split_length.'})/us';
- return preg_split($rx, $string, null, \PREG_SPLIT_DELIM_CAPTURE | \PREG_SPLIT_NO_EMPTY);
+ return preg_split($rx, $string, -1, \PREG_SPLIT_DELIM_CAPTURE | \PREG_SPLIT_NO_EMPTY);
}
$result = [];
@@ -617,7 +618,7 @@ final class Mbstring
}
if ($start < 0) {
- $start = \iconv_strlen($s, $encoding) + $start;
+ $start = iconv_strlen($s, $encoding) + $start;
if ($start < 0) {
$start = 0;
}
@@ -626,13 +627,13 @@ final class Mbstring
if (null === $length) {
$length = 2147483647;
} elseif ($length < 0) {
- $length = \iconv_strlen($s, $encoding) + $length - $start;
+ $length = iconv_strlen($s, $encoding) + $length - $start;
if ($length < 0) {
return '';
}
}
- return (string) \iconv_substr($s, $start, $length, $encoding);
+ return (string) iconv_substr($s, $start, $length, $encoding);
}
public static function mb_stripos($haystack, $needle, $offset = 0, $encoding = null)
@@ -657,7 +658,7 @@ final class Mbstring
$pos = strrpos($haystack, $needle);
} else {
$needle = self::mb_substr($needle, 0, 1, $encoding);
- $pos = \iconv_strrpos($haystack, $needle, $encoding);
+ $pos = iconv_strrpos($haystack, $needle, $encoding);
}
return self::getSubpart($pos, $part, $haystack, $encoding);
@@ -736,12 +737,12 @@ final class Mbstring
$encoding = self::getEncoding($encoding);
if ('UTF-8' !== $encoding) {
- $s = \iconv($encoding, 'UTF-8//IGNORE', $s);
+ $s = iconv($encoding, 'UTF-8//IGNORE', $s);
}
$s = preg_replace('/[\x{1100}-\x{115F}\x{2329}\x{232A}\x{2E80}-\x{303E}\x{3040}-\x{A4CF}\x{AC00}-\x{D7A3}\x{F900}-\x{FAFF}\x{FE10}-\x{FE19}\x{FE30}-\x{FE6F}\x{FF00}-\x{FF60}\x{FFE0}-\x{FFE6}\x{20000}-\x{2FFFD}\x{30000}-\x{3FFFD}]/u', '', $s, -1, $wide);
- return ($wide << 1) + \iconv_strlen($s, 'UTF-8');
+ return ($wide << 1) + iconv_strlen($s, 'UTF-8');
}
public static function mb_substr_count($haystack, $needle, $encoding = null)
diff --git a/includes/vendor/symfony/polyfill-mbstring/README.md b/includes/vendor/symfony/polyfill-mbstring/README.md
index 4efb599..478b40d 100644
--- a/includes/vendor/symfony/polyfill-mbstring/README.md
+++ b/includes/vendor/symfony/polyfill-mbstring/README.md
@@ -5,7 +5,7 @@ This component provides a partial, native PHP implementation for the
[Mbstring](https://php.net/mbstring) extension.
More information can be found in the
-[main Polyfill README](https://github.com/symfony/polyfill/blob/master/README.md).
+[main Polyfill README](https://github.com/symfony/polyfill/blob/main/README.md).
License
=======
diff --git a/includes/vendor/symfony/polyfill-mbstring/composer.json b/includes/vendor/symfony/polyfill-mbstring/composer.json
index 1fa21ca..4489553 100644
--- a/includes/vendor/symfony/polyfill-mbstring/composer.json
+++ b/includes/vendor/symfony/polyfill-mbstring/composer.json
@@ -31,7 +31,7 @@
"minimum-stability": "dev",
"extra": {
"branch-alias": {
- "dev-main": "1.23-dev"
+ "dev-main": "1.27-dev"
},
"thanks": {
"name": "symfony/polyfill",
diff --git a/includes/vendor/symfony/polyfill-php72/Php72.php b/includes/vendor/symfony/polyfill-php72/Php72.php
index 5e20d5b..7bf96c9 100644
--- a/includes/vendor/symfony/polyfill-php72/Php72.php
+++ b/includes/vendor/symfony/polyfill-php72/Php72.php
@@ -83,7 +83,7 @@ final class Php72
'SunOS' => 'Solaris',
];
- return isset($map[\PHP_OS]) ? $map[\PHP_OS] : 'Unknown';
+ return $map[\PHP_OS] ?? 'Unknown';
}
public static function spl_object_id($object)
@@ -96,7 +96,7 @@ final class Php72
}
// On 32-bit systems, PHP_INT_SIZE is 4,
- return self::$hashMask ^ hexdec(substr($hash, 16 - (\PHP_INT_SIZE * 2 - 1), (\PHP_INT_SIZE * 2 - 1)));
+ return self::$hashMask ^ hexdec(substr($hash, 16 - (\PHP_INT_SIZE * 2 - 1), \PHP_INT_SIZE * 2 - 1));
}
public static function sapi_windows_vt100_support($stream, $enable = null)
@@ -167,7 +167,7 @@ final class Php72
self::$hashMask = (int) substr(ob_get_clean(), 17);
}
- self::$hashMask ^= hexdec(substr(spl_object_hash($obj), 16 - (\PHP_INT_SIZE * 2 - 1), (\PHP_INT_SIZE * 2 - 1)));
+ self::$hashMask ^= hexdec(substr(spl_object_hash($obj), 16 - (\PHP_INT_SIZE * 2 - 1), \PHP_INT_SIZE * 2 - 1));
}
public static function mb_chr($code, $encoding = null)
diff --git a/includes/vendor/symfony/polyfill-php72/README.md b/includes/vendor/symfony/polyfill-php72/README.md
index 59dec8a..ed19050 100644
--- a/includes/vendor/symfony/polyfill-php72/README.md
+++ b/includes/vendor/symfony/polyfill-php72/README.md
@@ -6,6 +6,12 @@ This component provides functions added to PHP 7.2 core:
- [`spl_object_id`](https://php.net/spl_object_id)
- [`stream_isatty`](https://php.net/stream_isatty)
+And also functions added to PHP 7.2 mbstring:
+
+- [`mb_ord`](https://php.net/mb_ord)
+- [`mb_chr`](https://php.net/mb_chr)
+- [`mb_scrub`](https://php.net/mb_scrub)
+
On Windows only:
- [`sapi_windows_vt100_support`](https://php.net/sapi_windows_vt100_support)
@@ -16,11 +22,12 @@ Moved to core since 7.2 (was in the optional XML extension earlier):
- [`utf8_decode`](https://php.net/utf8_decode)
Also, it provides constants added to PHP 7.2:
+
- [`PHP_FLOAT_*`](https://php.net/reserved.constants#constant.php-float-dig)
- [`PHP_OS_FAMILY`](https://php.net/reserved.constants#constant.php-os-family)
More information can be found in the
-[main Polyfill README](https://github.com/symfony/polyfill/blob/master/README.md).
+[main Polyfill README](https://github.com/symfony/polyfill/blob/main/README.md).
License
=======
diff --git a/includes/vendor/symfony/polyfill-php72/composer.json b/includes/vendor/symfony/polyfill-php72/composer.json
index c96c844..5f17af3 100644
--- a/includes/vendor/symfony/polyfill-php72/composer.json
+++ b/includes/vendor/symfony/polyfill-php72/composer.json
@@ -25,7 +25,7 @@
"minimum-stability": "dev",
"extra": {
"branch-alias": {
- "dev-main": "1.23-dev"
+ "dev-main": "1.27-dev"
},
"thanks": {
"name": "symfony/polyfill",
diff --git a/includes/version.php b/includes/version.php
index 48a95e5..7c89903 100644
--- a/includes/version.php
+++ b/includes/version.php
@@ -9,7 +9,7 @@
* MAJOR.MINOR.PATCH-SOMETHING (1.8.1-donotuse)
*
*/
-define( 'YOURLS_VERSION', '1.9.1' );
+define( 'YOURLS_VERSION', '1.9.2' );
/**
* YOURLS DB version. Increments when changes are made to the DB schema, to trigger a DB update
diff --git a/js/insert.js b/js/insert.js
index 8298f7f..03e004e 100644
--- a/js/insert.js
+++ b/js/insert.js
@@ -35,10 +35,11 @@ function add_link() {
return;
}
var keyword = $("#add-keyword").val();
+ var nextid = parseInt($('#main_table tbody tr[id^="id-"]').length) + 1;
add_loading("#add-button");
$.getJSON(
ajaxurl,
- {action:'add', url: newurl, keyword: keyword, nonce: nonce},
+ {action:'add', url: newurl, keyword: keyword, nonce: nonce, rowid: nextid},
function(data){
if(data.status == 'success') {
$('#main_table tbody').prepend( data.html ).trigger("update");