From 73605cbd12e0de252999d09d9cbd42cb38b11f0e Mon Sep 17 00:00:00 2001 From: s4ddly <110701663+s4ddly@users.noreply.github.com> Date: Mon, 12 Feb 2024 10:34:12 +0100 Subject: [PATCH] Upgrade to newest magento, include card payments Co-authored-by: krzGablo <147171777+krzGablo@users.noreply.github.com> Co-authored-by: kGablo Co-authored-by: Karol Wojciechowski --- .dev-tools/.php-cs-fixer.php | 8 +- .dev-tools/composer.json | 9 +- .dev-tools/composer.lock | 1384 +++++++------- .dev-tools/phpstan.neon | 6 - .github/workflows/ci.yaml | 1 - .github/workflows/sca.yaml | 6 +- Api/Sales/OrderRepositoryInterface.php | 12 +- Api/TpayInterface.php | 179 +- Controller/Tpaycom.php | 60 - Controller/tpay/CardPayment.php | 69 + Controller/tpay/Create.php | 115 +- Controller/tpay/Error.php | 2 + Controller/tpay/Notification.php | 152 +- Controller/tpay/Redirect.php | 27 +- Controller/tpay/Refund.php | 96 - Controller/tpay/Success.php | 2 + Model/Api/Data/TokensInterface.php | 18 + .../CardTransaction/CardApiFacade.php | 74 + Model/ApiFacade/CardTransaction/CardOpen.php | 219 +++ .../ApiFacade/CardTransaction/CardOrigin.php | 206 +++ Model/ApiFacade/OpenApi.php | 210 +++ Model/ApiFacade/Refund/RefundApiFacade.php | 67 + .../ApiFacade/Refund/RefundCardOriginApi.php | 37 + Model/ApiFacade/Refund/RefundOriginApi.php | 35 + Model/ApiFacade/TpayConfig/ConfigFacade.php | 71 + Model/ApiFacade/TpayConfig/ConfigOpen.php | 136 ++ Model/ApiFacade/TpayConfig/ConfigOrigin.php | 134 ++ Model/ApiFacade/Transaction/Dto/Channel.php | 57 + .../Transaction/TransactionApiFacade.php | 147 ++ .../Transaction/TransactionOriginApi.php} | 13 +- Model/Config/Source/HashTypes.php | 39 + Model/Config/Source/OnsiteChannels.php | 39 + Model/ConstraintValidator.php | 57 + Model/GenericPaymentPlugin.php | 23 + Model/MethodListPlugin.php | 135 ++ Model/NotificationModel.php | 19 - Model/RefundModel.php | 23 - Model/ResourceModel/Token.php | 13 + Model/ResourceModel/Token/Collection.php | 13 + Model/Sales/OrderRepository.php | 4 +- Model/Tokens.php | 120 ++ Model/Tpay.php | 365 ++-- Model/TpayConfigProvider.php | 109 +- Service/TpayService.php | 216 ++- Service/TpayTokensService.php | 104 ++ Setup/InstallSchema.php | 86 + Setup/Uninstall.php | 20 + Setup/UpgradeSchema.php | 15 + composer.json | 11 +- etc/adminhtml/system.xml | 220 ++- etc/config.xml | 3 +- etc/csp_whitelist.xml | 6 + etc/di.xml | 6 + etc/frontend/di.xml | 7 - etc/module.xml | 2 +- etc/payment.xml | 6 + i18n/pl_PL.csv | 51 +- view/base/web/css/tpay.css | 76 +- view/base/web/css/tpaycards.css | 598 ++++++ view/base/web/images/card.svg | 1 + view/base/web/images/loading.gif | Bin 0 -> 8638 bytes view/base/web/images/logo_tpay.png | Bin 20494 -> 3503 bytes view/base/web/js/custom.js | 5 + view/base/web/js/jquery.formance.min.js | 1600 +++++++++++++++++ view/base/web/js/jquery.payment.min.js | 1 + view/base/web/js/jsencrypt.min.js | 1069 +++++++++++ view/base/web/js/open_render_channels.js | 149 ++ view/base/web/js/renderSavedCards.js | 87 + view/base/web/js/render_channels.js | 82 +- view/base/web/js/string_routines.js | 73 + view/base/web/js/tpayCards.js | 125 ++ view/base/web/js/tpayGeneric.js | 24 + view/frontend/layout/checkout_index_index.xml | 4 + .../method-renderer/tpay-card-method.js | 106 ++ .../method-renderer/tpay-generic-onsite.js | 50 + .../payment/method-renderer/tpay-method.js | 16 +- .../web/js/view/payment/tpay-payments.js | 6 + .../web/template/payment/card-tpay-form.html | 150 ++ .../web/template/payment/tpay-form.html | 62 +- .../template/payment/tpay-generic-onsite.html | 42 + 80 files changed, 8085 insertions(+), 1505 deletions(-) delete mode 100644 Controller/Tpaycom.php create mode 100644 Controller/tpay/CardPayment.php delete mode 100644 Controller/tpay/Refund.php create mode 100644 Model/Api/Data/TokensInterface.php create mode 100755 Model/ApiFacade/CardTransaction/CardApiFacade.php create mode 100755 Model/ApiFacade/CardTransaction/CardOpen.php create mode 100755 Model/ApiFacade/CardTransaction/CardOrigin.php create mode 100755 Model/ApiFacade/OpenApi.php create mode 100755 Model/ApiFacade/Refund/RefundApiFacade.php create mode 100755 Model/ApiFacade/Refund/RefundCardOriginApi.php create mode 100755 Model/ApiFacade/Refund/RefundOriginApi.php create mode 100755 Model/ApiFacade/TpayConfig/ConfigFacade.php create mode 100755 Model/ApiFacade/TpayConfig/ConfigOpen.php create mode 100755 Model/ApiFacade/TpayConfig/ConfigOrigin.php create mode 100644 Model/ApiFacade/Transaction/Dto/Channel.php create mode 100755 Model/ApiFacade/Transaction/TransactionApiFacade.php rename Model/{TransactionModel.php => ApiFacade/Transaction/TransactionOriginApi.php} (57%) mode change 100644 => 100755 create mode 100644 Model/Config/Source/HashTypes.php create mode 100644 Model/Config/Source/OnsiteChannels.php create mode 100644 Model/ConstraintValidator.php create mode 100644 Model/GenericPaymentPlugin.php create mode 100644 Model/MethodListPlugin.php delete mode 100644 Model/NotificationModel.php delete mode 100644 Model/RefundModel.php create mode 100644 Model/ResourceModel/Token.php create mode 100644 Model/ResourceModel/Token/Collection.php create mode 100644 Model/Tokens.php create mode 100644 Service/TpayTokensService.php create mode 100644 Setup/InstallSchema.php create mode 100644 Setup/Uninstall.php create mode 100644 Setup/UpgradeSchema.php create mode 100644 view/base/web/css/tpaycards.css create mode 100644 view/base/web/images/card.svg create mode 100644 view/base/web/images/loading.gif create mode 100644 view/base/web/js/custom.js create mode 100644 view/base/web/js/jquery.formance.min.js create mode 100644 view/base/web/js/jquery.payment.min.js create mode 100644 view/base/web/js/jsencrypt.min.js create mode 100644 view/base/web/js/open_render_channels.js create mode 100644 view/base/web/js/renderSavedCards.js create mode 100644 view/base/web/js/string_routines.js create mode 100644 view/base/web/js/tpayCards.js create mode 100644 view/base/web/js/tpayGeneric.js create mode 100644 view/frontend/web/js/view/payment/method-renderer/tpay-card-method.js create mode 100644 view/frontend/web/js/view/payment/method-renderer/tpay-generic-onsite.js create mode 100644 view/frontend/web/template/payment/card-tpay-form.html create mode 100644 view/frontend/web/template/payment/tpay-generic-onsite.html diff --git a/.dev-tools/.php-cs-fixer.php b/.dev-tools/.php-cs-fixer.php index 8c778bf..31d860b 100644 --- a/.dev-tools/.php-cs-fixer.php +++ b/.dev-tools/.php-cs-fixer.php @@ -2,15 +2,11 @@ require __DIR__.'/vendor/tpay-com/coding-standards/bootstrap.php'; -$config = Tpay\CodingStandards\PhpCsFixerConfigFactory::createWithLegacyRules() +$config = Tpay\CodingStandards\PhpCsFixerConfigFactory::createWithNonRiskyRules() ->setFinder( PhpCsFixer\Finder::create() ->ignoreDotFiles(false) ->in(__DIR__.'/..') ); -$rules = $config->getRules(); - -$rules['nullable_type_declaration_for_default_null_value'] = false; - -return $config->setRules($rules); +return $config; diff --git a/.dev-tools/composer.json b/.dev-tools/composer.json index 958ffd6..f21153f 100644 --- a/.dev-tools/composer.json +++ b/.dev-tools/composer.json @@ -6,6 +6,7 @@ "php-cs-fixer/shim": "^3.23", "phpstan/phpstan": "^1.10.30", "tpay-com/coding-standards": "^1.0.1", + "tpay-com/tpay-openapi-php": "^1.3", "tpay-com/tpay-php": "^2.3.4", "vimeo/psalm": "^5.15.0" }, @@ -15,12 +16,18 @@ "url": "https://github.com/magento/magento2.git" } ], + "scripts": { + "cs:fixer": "./vendor/bin/php-cs-fixer fix -vvv --diff", + "cs:phpstan": "./vendor/bin/phpstan", + "cs:psalm": "./vendor/bin/psalm" + }, "config": { "allow-plugins": { "ergebnis/composer-normalize": true, "kubawerlos/composer-smaller-lock": true, "magento/composer-dependency-version-audit-plugin": false, - "magento/magento-composer-installer": false + "magento/magento-composer-installer": false, + "php-http/discovery": false } } } diff --git a/.dev-tools/composer.lock b/.dev-tools/composer.lock index 54c341e..da69f3e 100644 --- a/.dev-tools/composer.lock +++ b/.dev-tools/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "e7c90031bc10070801e3c6d58404f44a", + "content-hash": "e91ecc8244e34cc4efd5dee7a771c5cd", "packages": [ { "name": "amphp/amp", @@ -80,16 +80,16 @@ }, { "name": "aws/aws-crt-php", - "version": "v1.2.2", + "version": "v1.2.4", "source": { "type": "git", "url": "https://github.com/awslabs/aws-crt-php.git", - "reference": "2f1dc7b7eda080498be96a4a6d683a41583030e9" + "reference": "eb0c6e4e142224a10b08f49ebf87f32611d162b2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/awslabs/aws-crt-php/zipball/2f1dc7b7eda080498be96a4a6d683a41583030e9", - "reference": "2f1dc7b7eda080498be96a4a6d683a41583030e9" + "url": "https://api.github.com/repos/awslabs/aws-crt-php/zipball/eb0c6e4e142224a10b08f49ebf87f32611d162b2", + "reference": "eb0c6e4e142224a10b08f49ebf87f32611d162b2" }, "require": { "php": ">=5.5" @@ -107,19 +107,19 @@ }, { "name": "aws/aws-sdk-php", - "version": "3.279.4", + "version": "3.295.8", "source": { "type": "git", "url": "https://github.com/aws/aws-sdk-php.git", - "reference": "ed0f0f73896c359c5a801ba145f1c0adc5b90047" + "reference": "dc23d1d1e2e0413a3707d5dd90d8c43cb6c7521b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/ed0f0f73896c359c5a801ba145f1c0adc5b90047", - "reference": "ed0f0f73896c359c5a801ba145f1c0adc5b90047" + "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/dc23d1d1e2e0413a3707d5dd90d8c43cb6c7521b", + "reference": "dc23d1d1e2e0413a3707d5dd90d8c43cb6c7521b" }, "require": { - "aws/aws-crt-php": "^1.0.4", + "aws/aws-crt-php": "^1.2.3", "ext-json": "*", "ext-pcre": "*", "ext-simplexml": "*", @@ -178,20 +178,20 @@ }, { "name": "brick/varexporter", - "version": "0.3.8", + "version": "0.4.0", "source": { "type": "git", "url": "https://github.com/brick/varexporter.git", - "reference": "b5853edea6204ff8fa10633c3a4cccc4058410ed" + "reference": "2fd038f7c9d12d468130c6e1b3ce06e4160a7dbb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/brick/varexporter/zipball/b5853edea6204ff8fa10633c3a4cccc4058410ed", - "reference": "b5853edea6204ff8fa10633c3a4cccc4058410ed" + "url": "https://api.github.com/repos/brick/varexporter/zipball/2fd038f7c9d12d468130c6e1b3ce06e4160a7dbb", + "reference": "2fd038f7c9d12d468130c6e1b3ce06e4160a7dbb" }, "require": { "nikic/php-parser": "^4.0", - "php": "^7.2 || ^8.0" + "php": "^7.4 || ^8.0" }, "type": "library", "autoload": { @@ -206,16 +206,16 @@ }, { "name": "colinmollenhour/cache-backend-file", - "version": "v1.4.7", + "version": "v1.4.8", "source": { "type": "git", "url": "https://github.com/colinmollenhour/Cm_Cache_Backend_File.git", - "reference": "a4b5062f6d2a78bdf6885b9b1e3a95dc4039d4fd" + "reference": "8ad24cfa1eccc3a995c4fcb00db00fb07bd02938" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/colinmollenhour/Cm_Cache_Backend_File/zipball/a4b5062f6d2a78bdf6885b9b1e3a95dc4039d4fd", - "reference": "a4b5062f6d2a78bdf6885b9b1e3a95dc4039d4fd" + "url": "https://api.github.com/repos/colinmollenhour/Cm_Cache_Backend_File/zipball/8ad24cfa1eccc3a995c4fcb00db00fb07bd02938", + "reference": "8ad24cfa1eccc3a995c4fcb00db00fb07bd02938" }, "type": "magento-module", "autoload": { @@ -230,16 +230,16 @@ }, { "name": "colinmollenhour/cache-backend-redis", - "version": "1.16.0", + "version": "1.17.1", "source": { "type": "git", "url": "https://github.com/colinmollenhour/Cm_Cache_Backend_Redis.git", - "reference": "3fc3e9149097f67cded1c425088e37d7fa8083ed" + "reference": "d403f4473e1b3cc616fa59d187e817543b6620c1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/colinmollenhour/Cm_Cache_Backend_Redis/zipball/3fc3e9149097f67cded1c425088e37d7fa8083ed", - "reference": "3fc3e9149097f67cded1c425088e37d7fa8083ed" + "url": "https://api.github.com/repos/colinmollenhour/Cm_Cache_Backend_Redis/zipball/d403f4473e1b3cc616fa59d187e817543b6620c1", + "reference": "d403f4473e1b3cc616fa59d187e817543b6620c1" }, "require": { "colinmollenhour/credis": "^1.14" @@ -257,16 +257,16 @@ }, { "name": "colinmollenhour/credis", - "version": "v1.15.0", + "version": "v1.16.0", "source": { "type": "git", "url": "https://github.com/colinmollenhour/credis.git", - "reference": "28810439de1d9597b7ba11794ed9479fb6f3de7c" + "reference": "5641140e14a9679f5a6f66c97268727f9558b881" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/colinmollenhour/credis/zipball/28810439de1d9597b7ba11794ed9479fb6f3de7c", - "reference": "28810439de1d9597b7ba11794ed9479fb6f3de7c" + "url": "https://api.github.com/repos/colinmollenhour/credis/zipball/5641140e14a9679f5a6f66c97268727f9558b881", + "reference": "5641140e14a9679f5a6f66c97268727f9558b881" }, "require": { "php": ">=5.6.0" @@ -287,16 +287,16 @@ }, { "name": "colinmollenhour/php-redis-session-abstract", - "version": "v1.5.1", + "version": "v1.5.4", "source": { "type": "git", "url": "https://github.com/colinmollenhour/php-redis-session-abstract.git", - "reference": "3df52a7247a97fb4ec5bddfb731d1a6cddb5ef99" + "reference": "c2e6ed15eb9cb363c9097fafefa590039fbadcb0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/colinmollenhour/php-redis-session-abstract/zipball/3df52a7247a97fb4ec5bddfb731d1a6cddb5ef99", - "reference": "3df52a7247a97fb4ec5bddfb731d1a6cddb5ef99" + "url": "https://api.github.com/repos/colinmollenhour/php-redis-session-abstract/zipball/c2e6ed15eb9cb363c9097fafefa590039fbadcb0", + "reference": "c2e6ed15eb9cb363c9097fafefa590039fbadcb0" }, "require": { "colinmollenhour/credis": "~1.6", @@ -315,16 +315,16 @@ }, { "name": "composer/ca-bundle", - "version": "1.3.6", + "version": "1.4.0", "source": { "type": "git", "url": "https://github.com/composer/ca-bundle.git", - "reference": "90d087e988ff194065333d16bc5cf649872d9cdb" + "reference": "b66d11b7479109ab547f9405b97205640b17d385" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/ca-bundle/zipball/90d087e988ff194065333d16bc5cf649872d9cdb", - "reference": "90d087e988ff194065333d16bc5cf649872d9cdb" + "url": "https://api.github.com/repos/composer/ca-bundle/zipball/b66d11b7479109ab547f9405b97205640b17d385", + "reference": "b66d11b7479109ab547f9405b97205640b17d385" }, "require": { "ext-openssl": "*", @@ -383,39 +383,39 @@ }, { "name": "composer/composer", - "version": "2.5.8", + "version": "2.6.6", "source": { "type": "git", "url": "https://github.com/composer/composer.git", - "reference": "4c516146167d1392c8b9b269bb7c24115d262164" + "reference": "683557bd2466072777309d039534bb1332d0dda5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/composer/zipball/4c516146167d1392c8b9b269bb7c24115d262164", - "reference": "4c516146167d1392c8b9b269bb7c24115d262164" + "url": "https://api.github.com/repos/composer/composer/zipball/683557bd2466072777309d039534bb1332d0dda5", + "reference": "683557bd2466072777309d039534bb1332d0dda5" }, "require": { "composer/ca-bundle": "^1.0", "composer/class-map-generator": "^1.0", "composer/metadata-minifier": "^1.0", "composer/pcre": "^2.1 || ^3.1", - "composer/semver": "^3.0", + "composer/semver": "^3.2.5", "composer/spdx-licenses": "^1.5.7", "composer/xdebug-handler": "^2.0.2 || ^3.0.3", "justinrainbow/json-schema": "^5.2.11", "php": "^7.2.5 || ^8.0", "psr/log": "^1.0 || ^2.0 || ^3.0", - "react/promise": "^2.8", + "react/promise": "^2.8 || ^3", "seld/jsonlint": "^1.4", "seld/phar-utils": "^1.2", "seld/signal-handler": "^2.0", "symfony/console": "^5.4.11 || ^6.0.11", - "symfony/filesystem": "^5.4 || ^6.0", - "symfony/finder": "^5.4 || ^6.0", + "symfony/filesystem": "^5.4 || ^6.0 || ^7", + "symfony/finder": "^5.4 || ^6.0 || ^7", "symfony/polyfill-php73": "^1.24", "symfony/polyfill-php80": "^1.24", "symfony/polyfill-php81": "^1.24", - "symfony/process": "^5.4 || ^6.0" + "symfony/process": "^5.4 || ^6.0 || ^7" }, "bin": [ "bin/composer" @@ -423,7 +423,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "2.5-dev" + "dev-main": "2.6-dev" }, "phpstan": { "includes": [ @@ -433,7 +433,7 @@ }, "autoload": { "psr-4": { - "Composer\\": "src/Composer" + "Composer\\": "src/Composer/" } }, "license": [ @@ -475,16 +475,16 @@ }, { "name": "composer/pcre", - "version": "3.1.0", + "version": "3.1.1", "source": { "type": "git", "url": "https://github.com/composer/pcre.git", - "reference": "4bff79ddd77851fe3cdd11616ed3f92841ba5bd2" + "reference": "00104306927c7a0919b4ced2aaa6782c1e61a3c9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/pcre/zipball/4bff79ddd77851fe3cdd11616ed3f92841ba5bd2", - "reference": "4bff79ddd77851fe3cdd11616ed3f92841ba5bd2" + "url": "https://api.github.com/repos/composer/pcre/zipball/00104306927c7a0919b4ced2aaa6782c1e61a3c9", + "reference": "00104306927c7a0919b4ced2aaa6782c1e61a3c9" }, "require": { "php": "^7.4 || ^8.0" @@ -507,16 +507,16 @@ }, { "name": "composer/semver", - "version": "3.3.2", + "version": "3.4.0", "source": { "type": "git", "url": "https://github.com/composer/semver.git", - "reference": "3953f23262f2bff1919fc82183ad9acb13ff62c9" + "reference": "35e8d0af4486141bc745f23a29cc2091eb624a32" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/3953f23262f2bff1919fc82183ad9acb13ff62c9", - "reference": "3953f23262f2bff1919fc82183ad9acb13ff62c9" + "url": "https://api.github.com/repos/composer/semver/zipball/35e8d0af4486141bc745f23a29cc2091eb624a32", + "reference": "35e8d0af4486141bc745f23a29cc2091eb624a32" }, "require": { "php": "^5.3.2 || ^7.0 || ^8.0" @@ -539,16 +539,16 @@ }, { "name": "composer/spdx-licenses", - "version": "1.5.7", + "version": "1.5.8", "source": { "type": "git", "url": "https://github.com/composer/spdx-licenses.git", - "reference": "c848241796da2abf65837d51dce1fae55a960149" + "reference": "560bdcf8deb88ae5d611c80a2de8ea9d0358cc0a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/spdx-licenses/zipball/c848241796da2abf65837d51dce1fae55a960149", - "reference": "c848241796da2abf65837d51dce1fae55a960149" + "url": "https://api.github.com/repos/composer/spdx-licenses/zipball/560bdcf8deb88ae5d611c80a2de8ea9d0358cc0a", + "reference": "560bdcf8deb88ae5d611c80a2de8ea9d0358cc0a" }, "require": { "php": "^5.3.2 || ^7.0 || ^8.0" @@ -657,16 +657,16 @@ }, { "name": "doctrine/deprecations", - "version": "v1.1.1", + "version": "1.1.2", "source": { "type": "git", "url": "https://github.com/doctrine/deprecations.git", - "reference": "612a3ee5ab0d5dd97b7cf3874a6efe24325efac3" + "reference": "4f2d4f2836e7ec4e7a8625e75c6aa916004db931" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/deprecations/zipball/612a3ee5ab0d5dd97b7cf3874a6efe24325efac3", - "reference": "612a3ee5ab0d5dd97b7cf3874a6efe24325efac3" + "url": "https://api.github.com/repos/doctrine/deprecations/zipball/4f2d4f2836e7ec4e7a8625e75c6aa916004db931", + "reference": "4f2d4f2836e7ec4e7a8625e75c6aa916004db931" }, "require": { "php": "^7.1 || ^8.0" @@ -710,62 +710,94 @@ ], "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers." }, + { + "name": "elastic/transport", + "version": "v8.8.0", + "source": { + "type": "git", + "url": "git@github.com:elastic/elastic-transport-php.git", + "reference": "cdf9f63a16ec6bfb4c881ab89aa0e2a61fb7c20b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/elastic/elastic-transport-php/zipball/cdf9f63a16ec6bfb4c881ab89aa0e2a61fb7c20b", + "reference": "cdf9f63a16ec6bfb4c881ab89aa0e2a61fb7c20b" + }, + "require": { + "composer-runtime-api": "^2.0", + "php": "^7.4 || ^8.0", + "php-http/discovery": "^1.14", + "php-http/httplug": "^2.3", + "psr/http-client": "^1.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.0 || ^2.0", + "psr/log": "^1 || ^2 || ^3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Elastic\\Transport\\": "src/" + } + }, + "license": [ + "MIT" + ], + "description": "HTTP transport PHP library for Elastic products" + }, { "name": "elasticsearch/elasticsearch", - "version": "v7.17.2", + "version": "v8.5.3", "source": { "type": "git", "url": "git@github.com:elastic/elasticsearch-php.git", - "reference": "2d302233f2bb0926812d82823bb820d405e130fc" + "reference": "9d850932b8ab8129fd4baf597a1172e8f583b436" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/elastic/elasticsearch-php/zipball/2d302233f2bb0926812d82823bb820d405e130fc", - "reference": "2d302233f2bb0926812d82823bb820d405e130fc" + "url": "https://api.github.com/repos/elastic/elasticsearch-php/zipball/9d850932b8ab8129fd4baf597a1172e8f583b436", + "reference": "9d850932b8ab8129fd4baf597a1172e8f583b436" }, "require": { - "ext-json": ">=1.3.7", - "ezimuel/ringphp": "^1.1.2", - "php": "^7.3 || ^8.0", + "elastic/transport": "^8.5", + "guzzlehttp/guzzle": "^7.0", + "php": "^7.4 || ^8.0", + "psr/http-client": "^1.0", + "psr/http-message": "^1.0", "psr/log": "^1|^2|^3" }, "type": "library", "autoload": { - "files": [ - "src/autoload.php" - ], "psr-4": { - "Elasticsearch\\": "src/Elasticsearch/" + "Elastic\\Elasticsearch\\": "src/" } }, "license": [ - "Apache-2.0", - "LGPL-2.1-only" + "MIT" ], "description": "PHP Client for Elasticsearch" }, { "name": "ergebnis/composer-normalize", - "version": "2.35.0", + "version": "2.41.1", "source": { "type": "git", "url": "https://github.com/ergebnis/composer-normalize.git", - "reference": "fe5fab007825cdb2640e27726c17dbcf513af0d6" + "reference": "01eb2d9b8623828ec2264f54d7782a25558d27b2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ergebnis/composer-normalize/zipball/fe5fab007825cdb2640e27726c17dbcf513af0d6", - "reference": "fe5fab007825cdb2640e27726c17dbcf513af0d6" + "url": "https://api.github.com/repos/ergebnis/composer-normalize/zipball/01eb2d9b8623828ec2264f54d7782a25558d27b2", + "reference": "01eb2d9b8623828ec2264f54d7782a25558d27b2" }, "require": { "composer-plugin-api": "^2.0.0", - "ergebnis/json": "^1.0.1", - "ergebnis/json-normalizer": "^4.2.0", - "ergebnis/json-printer": "^3.3.0", + "ergebnis/json": "^1.1.0", + "ergebnis/json-normalizer": "^4.4.1", + "ergebnis/json-printer": "^3.4.0", "ext-json": "*", "justinrainbow/json-schema": "^5.2.12", "localheinz/diff": "^1.1.1", - "php": "~8.1.0 || ~8.2.0" + "php": "~8.1.0 || ~8.2.0 || ~8.3.0" }, "type": "composer-plugin", "extra": { @@ -788,19 +820,19 @@ }, { "name": "ergebnis/json", - "version": "1.0.1", + "version": "1.1.0", "source": { "type": "git", "url": "https://github.com/ergebnis/json.git", - "reference": "d66ea30060856d0729a4aa319a02752519ca63a0" + "reference": "9f2b9086c43b189d7044a5b6215a931fb6e9125d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ergebnis/json/zipball/d66ea30060856d0729a4aa319a02752519ca63a0", - "reference": "d66ea30060856d0729a4aa319a02752519ca63a0" + "url": "https://api.github.com/repos/ergebnis/json/zipball/9f2b9086c43b189d7044a5b6215a931fb6e9125d", + "reference": "9f2b9086c43b189d7044a5b6215a931fb6e9125d" }, "require": { - "php": "^8.0" + "php": "~8.1.0 || ~8.2.0 || ~8.3.0" }, "type": "library", "extra": { @@ -821,25 +853,25 @@ }, { "name": "ergebnis/json-normalizer", - "version": "4.2.0", + "version": "4.4.1", "source": { "type": "git", "url": "https://github.com/ergebnis/json-normalizer.git", - "reference": "7d06355857dc5fad96e8b296996f26150dfab299" + "reference": "d28f36af9763ee6bc4e2a2390c0348963df7881b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ergebnis/json-normalizer/zipball/7d06355857dc5fad96e8b296996f26150dfab299", - "reference": "7d06355857dc5fad96e8b296996f26150dfab299" + "url": "https://api.github.com/repos/ergebnis/json-normalizer/zipball/d28f36af9763ee6bc4e2a2390c0348963df7881b", + "reference": "d28f36af9763ee6bc4e2a2390c0348963df7881b" }, "require": { - "ergebnis/json": "^1.0.1", + "ergebnis/json": "^1.1.0", "ergebnis/json-pointer": "^3.2.0", - "ergebnis/json-printer": "^3.3.0", - "ergebnis/json-schema-validator": "^4.0.0", + "ergebnis/json-printer": "^3.4.0", + "ergebnis/json-schema-validator": "^4.1.0", "ext-json": "*", "justinrainbow/json-schema": "^5.2.12", - "php": "~8.1.0 || ~8.2.0" + "php": "~8.1.0 || ~8.2.0 || ~8.3.0" }, "type": "library", "autoload": { @@ -854,19 +886,19 @@ }, { "name": "ergebnis/json-pointer", - "version": "3.2.0", + "version": "3.3.0", "source": { "type": "git", "url": "https://github.com/ergebnis/json-pointer.git", - "reference": "861516ff5afa1aa8905fdf3361315909523a1bf8" + "reference": "8e517faefc06b7c761eaa041febef51a9375819a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ergebnis/json-pointer/zipball/861516ff5afa1aa8905fdf3361315909523a1bf8", - "reference": "861516ff5afa1aa8905fdf3361315909523a1bf8" + "url": "https://api.github.com/repos/ergebnis/json-pointer/zipball/8e517faefc06b7c761eaa041febef51a9375819a", + "reference": "8e517faefc06b7c761eaa041febef51a9375819a" }, "require": { - "php": "^8.0" + "php": "~8.1.0 || ~8.2.0 || ~8.3.0" }, "type": "library", "extra": { @@ -887,21 +919,21 @@ }, { "name": "ergebnis/json-printer", - "version": "3.3.0", + "version": "3.4.0", "source": { "type": "git", "url": "https://github.com/ergebnis/json-printer.git", - "reference": "18920367473b099633f644f0ca6dc8794345148f" + "reference": "05841593d72499de4f7ce4034a237c77e470558f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ergebnis/json-printer/zipball/18920367473b099633f644f0ca6dc8794345148f", - "reference": "18920367473b099633f644f0ca6dc8794345148f" + "url": "https://api.github.com/repos/ergebnis/json-printer/zipball/05841593d72499de4f7ce4034a237c77e470558f", + "reference": "05841593d72499de4f7ce4034a237c77e470558f" }, "require": { "ext-json": "*", "ext-mbstring": "*", - "php": "^8.0" + "php": "~8.1.0 || ~8.2.0 || ~8.3.0" }, "type": "library", "autoload": { @@ -916,23 +948,23 @@ }, { "name": "ergebnis/json-schema-validator", - "version": "4.0.0", + "version": "4.1.0", "source": { "type": "git", "url": "https://github.com/ergebnis/json-schema-validator.git", - "reference": "a6166272ac5691a9bc791f185841e5f92a6d4723" + "reference": "d568ed85d1cdc2e49d650c2fc234dc2516f3f25b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ergebnis/json-schema-validator/zipball/a6166272ac5691a9bc791f185841e5f92a6d4723", - "reference": "a6166272ac5691a9bc791f185841e5f92a6d4723" + "url": "https://api.github.com/repos/ergebnis/json-schema-validator/zipball/d568ed85d1cdc2e49d650c2fc234dc2516f3f25b", + "reference": "d568ed85d1cdc2e49d650c2fc234dc2516f3f25b" }, "require": { - "ergebnis/json": "^1.0.0", + "ergebnis/json": "^1.0.1", "ergebnis/json-pointer": "^3.2.0", "ext-json": "*", "justinrainbow/json-schema": "^5.2.12", - "php": "^8.0" + "php": "~8.1.0 || ~8.2.0 || ~8.3.0" }, "type": "library", "extra": { @@ -1022,19 +1054,19 @@ }, { "name": "ezyang/htmlpurifier", - "version": "v4.16.0", + "version": "v4.17.0", "source": { "type": "git", "url": "https://github.com/ezyang/htmlpurifier.git", - "reference": "523407fb06eb9e5f3d59889b3978d5bfe94299c8" + "reference": "bbc513d79acf6691fa9cf10f192c90dd2957f18c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/523407fb06eb9e5f3d59889b3978d5bfe94299c8", - "reference": "523407fb06eb9e5f3d59889b3978d5bfe94299c8" + "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/bbc513d79acf6691fa9cf10f192c90dd2957f18c", + "reference": "bbc513d79acf6691fa9cf10f192c90dd2957f18c" }, "require": { - "php": "~5.6.0 || ~7.0.0 || ~7.1.0 || ~7.2.0 || ~7.3.0 || ~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0" + "php": "~5.6.0 || ~7.0.0 || ~7.1.0 || ~7.2.0 || ~7.3.0 || ~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0" }, "type": "library", "autoload": { @@ -1116,16 +1148,16 @@ }, { "name": "fidry/cpu-core-counter", - "version": "0.5.1", + "version": "1.0.0", "source": { "type": "git", "url": "https://github.com/theofidry/cpu-core-counter.git", - "reference": "b58e5a3933e541dc286cc91fc4f3898bbc6f1623" + "reference": "85193c0b0cb5c47894b5eaec906e946f054e7077" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/b58e5a3933e541dc286cc91fc4f3898bbc6f1623", - "reference": "b58e5a3933e541dc286cc91fc4f3898bbc6f1623" + "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/85193c0b0cb5c47894b5eaec906e946f054e7077", + "reference": "85193c0b0cb5c47894b5eaec906e946f054e7077" }, "require": { "php": "^7.2 || ^8.0" @@ -1143,21 +1175,21 @@ }, { "name": "guzzlehttp/guzzle", - "version": "7.7.0", + "version": "7.8.1", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "fb7566caccf22d74d1ab270de3551f72a58399f5" + "reference": "41042bc7ab002487b876a0683fc8dce04ddce104" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/fb7566caccf22d74d1ab270de3551f72a58399f5", - "reference": "fb7566caccf22d74d1ab270de3551f72a58399f5" + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/41042bc7ab002487b876a0683fc8dce04ddce104", + "reference": "41042bc7ab002487b876a0683fc8dce04ddce104" }, "require": { "ext-json": "*", - "guzzlehttp/promises": "^1.5.3 || ^2.0", - "guzzlehttp/psr7": "^1.9.1 || ^2.4.5", + "guzzlehttp/promises": "^1.5.3 || ^2.0.1", + "guzzlehttp/psr7": "^1.9.1 || ^2.5.1", "php": "^7.2.5 || ^8.0", "psr/http-client": "^1.0", "symfony/deprecation-contracts": "^2.2 || ^3.0" @@ -1187,16 +1219,16 @@ }, { "name": "guzzlehttp/promises", - "version": "2.0.1", + "version": "2.0.2", "source": { "type": "git", "url": "https://github.com/guzzle/promises.git", - "reference": "111166291a0f8130081195ac4556a5587d7f1b5d" + "reference": "bbff78d96034045e58e13dedd6ad91b5d1253223" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/111166291a0f8130081195ac4556a5587d7f1b5d", - "reference": "111166291a0f8130081195ac4556a5587d7f1b5d" + "url": "https://api.github.com/repos/guzzle/promises/zipball/bbff78d96034045e58e13dedd6ad91b5d1253223", + "reference": "bbff78d96034045e58e13dedd6ad91b5d1253223" }, "require": { "php": "^7.2.5 || ^8.0" @@ -1220,16 +1252,16 @@ }, { "name": "guzzlehttp/psr7", - "version": "2.6.0", + "version": "2.6.2", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "8bd7c33a0734ae1c5d074360512beb716bef3f77" + "reference": "45b30f99ac27b5ca93cb4831afe16285f57b8221" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/8bd7c33a0734ae1c5d074360512beb716bef3f77", - "reference": "8bd7c33a0734ae1c5d074360512beb716bef3f77" + "url": "https://api.github.com/repos/guzzle/psr7/zipball/45b30f99ac27b5ca93cb4831afe16285f57b8221", + "reference": "45b30f99ac27b5ca93cb4831afe16285f57b8221" }, "require": { "php": "^7.2.5 || ^8.0", @@ -1260,16 +1292,16 @@ }, { "name": "justinrainbow/json-schema", - "version": "5.2.12", + "version": "v5.2.13", "source": { "type": "git", "url": "https://github.com/justinrainbow/json-schema.git", - "reference": "ad87d5a5ca981228e0e205c2bc7dfb8e24559b60" + "reference": "fbbe7e5d79f618997bc3332a6f49246036c45793" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/ad87d5a5ca981228e0e205c2bc7dfb8e24559b60", - "reference": "ad87d5a5ca981228e0e205c2bc7dfb8e24559b60" + "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/fbbe7e5d79f618997bc3332a6f49246036c45793", + "reference": "fbbe7e5d79f618997bc3332a6f49246036c45793" }, "require": { "php": ">=5.3.3" @@ -1327,16 +1359,16 @@ }, { "name": "kubawerlos/php-cs-fixer-custom-fixers", - "version": "v3.16.2", + "version": "v3.18.0", "source": { "type": "git", "url": "https://github.com/kubawerlos/php-cs-fixer-custom-fixers.git", - "reference": "d3f2590069d06ba49ad24cac03f802e8ad0aaeba" + "reference": "e03b07a58e08133c92c9e7a5ccc69e1457f8c98d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/kubawerlos/php-cs-fixer-custom-fixers/zipball/d3f2590069d06ba49ad24cac03f802e8ad0aaeba", - "reference": "d3f2590069d06ba49ad24cac03f802e8ad0aaeba" + "url": "https://api.github.com/repos/kubawerlos/php-cs-fixer-custom-fixers/zipball/e03b07a58e08133c92c9e7a5ccc69e1457f8c98d", + "reference": "e03b07a58e08133c92c9e7a5ccc69e1457f8c98d" }, "require": { "ext-filter": "*", @@ -1357,16 +1389,16 @@ }, { "name": "laminas/laminas-captcha", - "version": "2.16.0", + "version": "2.17.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-captcha.git", - "reference": "8623619b1b634ba3672f91a9fb610deffec9c932" + "reference": "981b3d1e287653b1fc5b71859964508ac0a2d7cb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-captcha/zipball/8623619b1b634ba3672f91a9fb610deffec9c932", - "reference": "8623619b1b634ba3672f91a9fb610deffec9c932" + "url": "https://api.github.com/repos/laminas/laminas-captcha/zipball/981b3d1e287653b1fc5b71859964508ac0a2d7cb", + "reference": "981b3d1e287653b1fc5b71859964508ac0a2d7cb" }, "require": { "laminas/laminas-recaptcha": "^3.4.0", @@ -1374,7 +1406,7 @@ "laminas/laminas-stdlib": "^3.10.1", "laminas/laminas-text": "^2.9.0", "laminas/laminas-validator": "^2.19.0", - "php": "~8.0.0 || ~8.1.0 || ~8.2.0" + "php": "~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0" }, "type": "library", "autoload": { @@ -1389,19 +1421,19 @@ }, { "name": "laminas/laminas-code", - "version": "4.11.0", + "version": "4.13.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-code.git", - "reference": "169123b3ede20a9193480c53de2a8194f8c073ec" + "reference": "7353d4099ad5388e84737dd16994316a04f48dbf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-code/zipball/169123b3ede20a9193480c53de2a8194f8c073ec", - "reference": "169123b3ede20a9193480c53de2a8194f8c073ec" + "url": "https://api.github.com/repos/laminas/laminas-code/zipball/7353d4099ad5388e84737dd16994316a04f48dbf", + "reference": "7353d4099ad5388e84737dd16994316a04f48dbf" }, "require": { - "php": "~8.1.0 || ~8.2.0" + "php": "~8.1.0 || ~8.2.0 || ~8.3.0" }, "type": "library", "autoload": { @@ -1416,21 +1448,21 @@ }, { "name": "laminas/laminas-config", - "version": "3.8.0", + "version": "3.9.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-config.git", - "reference": "46baad58d0b12cf98539e04334eff40a1fdfb9a0" + "reference": "e53717277f6c22b1c697a46473b9a5ec9a438efa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-config/zipball/46baad58d0b12cf98539e04334eff40a1fdfb9a0", - "reference": "46baad58d0b12cf98539e04334eff40a1fdfb9a0" + "url": "https://api.github.com/repos/laminas/laminas-config/zipball/e53717277f6c22b1c697a46473b9a5ec9a438efa", + "reference": "e53717277f6c22b1c697a46473b9a5ec9a438efa" }, "require": { "ext-json": "*", "laminas/laminas-stdlib": "^3.6", - "php": "~8.0.0 || ~8.1.0 || ~8.2.0", + "php": "~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0", "psr/container": "^1.0" }, "type": "library", @@ -1446,23 +1478,23 @@ }, { "name": "laminas/laminas-crypt", - "version": "3.10.0", + "version": "3.11.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-crypt.git", - "reference": "588375caf4d505fee90d1449e9714c912ceb5051" + "reference": "098fc61a895d1ff5d1c2b861525b4428bf6c3240" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-crypt/zipball/588375caf4d505fee90d1449e9714c912ceb5051", - "reference": "588375caf4d505fee90d1449e9714c912ceb5051" + "url": "https://api.github.com/repos/laminas/laminas-crypt/zipball/098fc61a895d1ff5d1c2b861525b4428bf6c3240", + "reference": "098fc61a895d1ff5d1c2b861525b4428bf6c3240" }, "require": { "ext-mbstring": "*", "laminas/laminas-math": "^3.4", "laminas/laminas-servicemanager": "^3.11.2", - "laminas/laminas-stdlib": "^3.6", - "php": "~8.0.0 || ~8.1.0 || ~8.2.0", + "laminas/laminas-stdlib": "^3.8", + "php": "~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0", "psr/container": "^1.1" }, "type": "library", @@ -1512,20 +1544,20 @@ }, { "name": "laminas/laminas-di", - "version": "3.12.0", + "version": "3.13.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-di.git", - "reference": "8d4074b5f51b747a6e4e055995f1bdf2a825d5a6" + "reference": "b7178e66a61cc46f6c5c7ea16009daff59e82154" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-di/zipball/8d4074b5f51b747a6e4e055995f1bdf2a825d5a6", - "reference": "8d4074b5f51b747a6e4e055995f1bdf2a825d5a6" + "url": "https://api.github.com/repos/laminas/laminas-di/zipball/b7178e66a61cc46f6c5c7ea16009daff59e82154", + "reference": "b7178e66a61cc46f6c5c7ea16009daff59e82154" }, "require": { - "laminas/laminas-stdlib": "^3.6", - "php": "~8.0.0 || ~8.1.0 || ~8.2.0", + "laminas/laminas-stdlib": "^3.18.0", + "php": "~8.1.0 || ~8.2.0 || ~8.3.0", "psr/container": "^1.1.1", "psr/log": "^1.1.4 || ^3.0.0" }, @@ -1548,21 +1580,21 @@ }, { "name": "laminas/laminas-escaper", - "version": "2.12.0", + "version": "2.13.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-escaper.git", - "reference": "ee7a4c37bf3d0e8c03635d5bddb5bb3184ead490" + "reference": "af459883f4018d0f8a0c69c7a209daef3bf973ba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-escaper/zipball/ee7a4c37bf3d0e8c03635d5bddb5bb3184ead490", - "reference": "ee7a4c37bf3d0e8c03635d5bddb5bb3184ead490" + "url": "https://api.github.com/repos/laminas/laminas-escaper/zipball/af459883f4018d0f8a0c69c7a209daef3bf973ba", + "reference": "af459883f4018d0f8a0c69c7a209daef3bf973ba" }, "require": { "ext-ctype": "*", "ext-mbstring": "*", - "php": "^7.4 || ~8.0.0 || ~8.1.0 || ~8.2.0" + "php": "~8.1.0 || ~8.2.0 || ~8.3.0" }, "type": "library", "autoload": { @@ -1577,19 +1609,19 @@ }, { "name": "laminas/laminas-eventmanager", - "version": "3.10.0", + "version": "3.13.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-eventmanager.git", - "reference": "5a5114ab2d3fa4424faa46a2fb0a4e49a61f6eba" + "reference": "ce5ba8bde378fca5cb0cd514f01823637215b2f3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-eventmanager/zipball/5a5114ab2d3fa4424faa46a2fb0a4e49a61f6eba", - "reference": "5a5114ab2d3fa4424faa46a2fb0a4e49a61f6eba" + "url": "https://api.github.com/repos/laminas/laminas-eventmanager/zipball/ce5ba8bde378fca5cb0cd514f01823637215b2f3", + "reference": "ce5ba8bde378fca5cb0cd514f01823637215b2f3" }, "require": { - "php": "~8.0.0 || ~8.1.0 || ~8.2.0" + "php": "~8.1.0 || ~8.2.0 || ~8.3.0" }, "type": "library", "autoload": { @@ -1604,23 +1636,23 @@ }, { "name": "laminas/laminas-feed", - "version": "2.21.0", + "version": "2.22.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-feed.git", - "reference": "52918789a417bc292ccd6fbb4b91bd78a65d50ab" + "reference": "669792b819fca7274698147ad7a2ecc1b0a9b141" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-feed/zipball/52918789a417bc292ccd6fbb4b91bd78a65d50ab", - "reference": "52918789a417bc292ccd6fbb4b91bd78a65d50ab" + "url": "https://api.github.com/repos/laminas/laminas-feed/zipball/669792b819fca7274698147ad7a2ecc1b0a9b141", + "reference": "669792b819fca7274698147ad7a2ecc1b0a9b141" }, "require": { "ext-dom": "*", "ext-libxml": "*", "laminas/laminas-escaper": "^2.9", "laminas/laminas-stdlib": "^3.6", - "php": "~8.1.0 || ~8.2.0" + "php": "~8.1.0 || ~8.2.0 || ~8.3.0" }, "type": "library", "autoload": { @@ -1635,20 +1667,20 @@ }, { "name": "laminas/laminas-file", - "version": "2.12.0", + "version": "2.13.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-file.git", - "reference": "9e8ff3a6d7ccaad0865581ef672a7c48260b65d9" + "reference": "54b354bff5dca67af3452b1f73a0ab66e4c4a5e5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-file/zipball/9e8ff3a6d7ccaad0865581ef672a7c48260b65d9", - "reference": "9e8ff3a6d7ccaad0865581ef672a7c48260b65d9" + "url": "https://api.github.com/repos/laminas/laminas-file/zipball/54b354bff5dca67af3452b1f73a0ab66e4c4a5e5", + "reference": "54b354bff5dca67af3452b1f73a0ab66e4c4a5e5" }, "require": { "laminas/laminas-stdlib": "^2.7.7 || ^3.15.0", - "php": "~8.0.0 || ~8.1.0 || ~8.2.0" + "php": "~8.1.0 || ~8.2.0 || ~8.3.0" }, "type": "library", "autoload": { @@ -1663,22 +1695,22 @@ }, { "name": "laminas/laminas-filter", - "version": "2.32.0", + "version": "2.34.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-filter.git", - "reference": "2b7e6b2b26a92412c38336ee3089251164edf141" + "reference": "008923542683d853109af5c71b7e9099de76c3e6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-filter/zipball/2b7e6b2b26a92412c38336ee3089251164edf141", - "reference": "2b7e6b2b26a92412c38336ee3089251164edf141" + "url": "https://api.github.com/repos/laminas/laminas-filter/zipball/008923542683d853109af5c71b7e9099de76c3e6", + "reference": "008923542683d853109af5c71b7e9099de76c3e6" }, "require": { "ext-mbstring": "*", "laminas/laminas-servicemanager": "^3.21.0", "laminas/laminas-stdlib": "^3.13.0", - "php": "~8.1.0 || ~8.2.0" + "php": "~8.1.0 || ~8.2.0 || ~8.3.0" }, "type": "library", "extra": { @@ -1699,23 +1731,23 @@ }, { "name": "laminas/laminas-http", - "version": "2.18.0", + "version": "2.19.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-http.git", - "reference": "76de9008f889bc7088f85a41d0d2b06c2b59c53d" + "reference": "26dd6d1177e25d970058863c2afed12bb9dbff4d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-http/zipball/76de9008f889bc7088f85a41d0d2b06c2b59c53d", - "reference": "76de9008f889bc7088f85a41d0d2b06c2b59c53d" + "url": "https://api.github.com/repos/laminas/laminas-http/zipball/26dd6d1177e25d970058863c2afed12bb9dbff4d", + "reference": "26dd6d1177e25d970058863c2afed12bb9dbff4d" }, "require": { - "laminas/laminas-loader": "^2.8", + "laminas/laminas-loader": "^2.10", "laminas/laminas-stdlib": "^3.6", - "laminas/laminas-uri": "^2.9.1", + "laminas/laminas-uri": "^2.11", "laminas/laminas-validator": "^2.15", - "php": "~8.0.0 || ~8.1.0 || ~8.2.0" + "php": "~8.1.0 || ~8.2.0 || ~8.3.0" }, "type": "library", "autoload": { @@ -1730,22 +1762,22 @@ }, { "name": "laminas/laminas-i18n", - "version": "2.23.0", + "version": "2.26.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-i18n.git", - "reference": "bb844a1141bb6e65d8889f5a08383f761a8270b2" + "reference": "01738410cb263994d1d192861f642387e7e12ace" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-i18n/zipball/bb844a1141bb6e65d8889f5a08383f761a8270b2", - "reference": "bb844a1141bb6e65d8889f5a08383f761a8270b2" + "url": "https://api.github.com/repos/laminas/laminas-i18n/zipball/01738410cb263994d1d192861f642387e7e12ace", + "reference": "01738410cb263994d1d192861f642387e7e12ace" }, "require": { "ext-intl": "*", "laminas/laminas-servicemanager": "^3.21.0", "laminas/laminas-stdlib": "^3.0", - "php": "~8.1.0 || ~8.2.0" + "php": "~8.1.0 || ~8.2.0 || ~8.3.0" }, "type": "library", "extra": { @@ -1766,19 +1798,19 @@ }, { "name": "laminas/laminas-json", - "version": "3.5.0", + "version": "3.6.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-json.git", - "reference": "7a8a1d7bf2d05dd6c1fbd7c0868d3848cf2b57ec" + "reference": "53ff787b20b77197f38680c737e8dfffa846b85b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-json/zipball/7a8a1d7bf2d05dd6c1fbd7c0868d3848cf2b57ec", - "reference": "7a8a1d7bf2d05dd6c1fbd7c0868d3848cf2b57ec" + "url": "https://api.github.com/repos/laminas/laminas-json/zipball/53ff787b20b77197f38680c737e8dfffa846b85b", + "reference": "53ff787b20b77197f38680c737e8dfffa846b85b" }, "require": { - "php": "~8.0.0 || ~8.1.0 || ~8.2.0" + "php": "~8.1.0 || ~8.2.0 || ~8.3.0" }, "type": "library", "autoload": { @@ -1793,19 +1825,19 @@ }, { "name": "laminas/laminas-loader", - "version": "2.9.0", + "version": "2.10.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-loader.git", - "reference": "51ed9c3fa42d1098a9997571730c0cbf42d078d3" + "reference": "e6fe952304ef40ce45cd814751ab35d42afdad12" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-loader/zipball/51ed9c3fa42d1098a9997571730c0cbf42d078d3", - "reference": "51ed9c3fa42d1098a9997571730c0cbf42d078d3" + "url": "https://api.github.com/repos/laminas/laminas-loader/zipball/e6fe952304ef40ce45cd814751ab35d42afdad12", + "reference": "e6fe952304ef40ce45cd814751ab35d42afdad12" }, "require": { - "php": "~8.0.0 || ~8.1.0 || ~8.2.0" + "php": "~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0" }, "type": "library", "autoload": { @@ -1820,16 +1852,16 @@ }, { "name": "laminas/laminas-mail", - "version": "2.23.0", + "version": "2.25.1", "source": { "type": "git", "url": "https://github.com/laminas/laminas-mail.git", - "reference": "3ae64e7cfd505552fbee2e556746c345ccc33cf7" + "reference": "110e04497395123998220e244cceecb167cc6dda" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-mail/zipball/3ae64e7cfd505552fbee2e556746c345ccc33cf7", - "reference": "3ae64e7cfd505552fbee2e556746c345ccc33cf7" + "url": "https://api.github.com/repos/laminas/laminas-mail/zipball/110e04497395123998220e244cceecb167cc6dda", + "reference": "110e04497395123998220e244cceecb167cc6dda" }, "require": { "ext-iconv": "*", @@ -1837,7 +1869,7 @@ "laminas/laminas-mime": "^2.11.0", "laminas/laminas-stdlib": "^3.17.0", "laminas/laminas-validator": "^2.31.0", - "php": "~8.1.0 || ~8.2.0", + "php": "~8.1.0 || ~8.2.0 || ~8.3.0", "symfony/polyfill-intl-idn": "^1.27.0", "symfony/polyfill-mbstring": "^1.27.0", "webmozart/assert": "^1.11.0" @@ -1861,20 +1893,20 @@ }, { "name": "laminas/laminas-math", - "version": "3.6.0", + "version": "3.7.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-math.git", - "reference": "5770fc632a3614f5526632a8b70f41b65130460e" + "reference": "3e90445828fd64308de2a600b48c3df051b3b17a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-math/zipball/5770fc632a3614f5526632a8b70f41b65130460e", - "reference": "5770fc632a3614f5526632a8b70f41b65130460e" + "url": "https://api.github.com/repos/laminas/laminas-math/zipball/3e90445828fd64308de2a600b48c3df051b3b17a", + "reference": "3e90445828fd64308de2a600b48c3df051b3b17a" }, "require": { "ext-mbstring": "*", - "php": "~8.0.0 || ~8.1.0 || ~8.2.0" + "php": "~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0" }, "type": "library", "extra": { @@ -1895,20 +1927,20 @@ }, { "name": "laminas/laminas-mime", - "version": "2.11.0", + "version": "2.12.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-mime.git", - "reference": "60ec04b755821c79c1987ce291b44e69f2c0831f" + "reference": "08cc544778829b7d68d27a097885bd6e7130135e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-mime/zipball/60ec04b755821c79c1987ce291b44e69f2c0831f", - "reference": "60ec04b755821c79c1987ce291b44e69f2c0831f" + "url": "https://api.github.com/repos/laminas/laminas-mime/zipball/08cc544778829b7d68d27a097885bd6e7130135e", + "reference": "08cc544778829b7d68d27a097885bd6e7130135e" }, "require": { "laminas/laminas-stdlib": "^2.7 || ^3.0", - "php": "~8.0.0 || ~8.1.0 || ~8.2.0" + "php": "~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0" }, "type": "library", "autoload": { @@ -1923,23 +1955,23 @@ }, { "name": "laminas/laminas-modulemanager", - "version": "2.14.0", + "version": "2.15.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-modulemanager.git", - "reference": "fb0a2c34423f7d3321dd7c42dc5fc4db905a99ac" + "reference": "4c4e6f29f0b1a770c8ce4f30dd3a48eb45ed7d3b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-modulemanager/zipball/fb0a2c34423f7d3321dd7c42dc5fc4db905a99ac", - "reference": "fb0a2c34423f7d3321dd7c42dc5fc4db905a99ac" + "url": "https://api.github.com/repos/laminas/laminas-modulemanager/zipball/4c4e6f29f0b1a770c8ce4f30dd3a48eb45ed7d3b", + "reference": "4c4e6f29f0b1a770c8ce4f30dd3a48eb45ed7d3b" }, "require": { - "brick/varexporter": "^0.3.2", + "brick/varexporter": "^0.3.2 || ^0.4", "laminas/laminas-config": "^3.7", "laminas/laminas-eventmanager": "^3.4", "laminas/laminas-stdlib": "^3.6", - "php": "~8.0.0 || ~8.1.0 || ~8.2.0", + "php": "~8.1.0 || ~8.2.0|| ~8.3.0", "webimpress/safe-writer": "^1.0.2 || ^2.1" }, "type": "library", @@ -1955,16 +1987,16 @@ }, { "name": "laminas/laminas-mvc", - "version": "3.6.1", + "version": "3.7.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-mvc.git", - "reference": "f12e801c31c04a4b35017354ff84070f5573879f" + "reference": "3f65447addf487189000e54dc1525cd952951da4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-mvc/zipball/f12e801c31c04a4b35017354ff84070f5573879f", - "reference": "f12e801c31c04a4b35017354ff84070f5573879f" + "url": "https://api.github.com/repos/laminas/laminas-mvc/zipball/3f65447addf487189000e54dc1525cd952951da4", + "reference": "3f65447addf487189000e54dc1525cd952951da4" }, "require": { "container-interop/container-interop": "^1.2", @@ -1975,7 +2007,7 @@ "laminas/laminas-servicemanager": "^3.20.0", "laminas/laminas-stdlib": "^3.6", "laminas/laminas-view": "^2.14", - "php": "~8.0.0 || ~8.1.0 || ~8.2.0" + "php": "~8.1.0 || ~8.2.0 || ~8.3.0" }, "type": "library", "autoload": { @@ -1990,16 +2022,16 @@ }, { "name": "laminas/laminas-oauth", - "version": "2.5.0", + "version": "2.6.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-oauth.git", - "reference": "882daa922f3d4f3c1a4282d5c0afeddabefaadb9" + "reference": "7c82c5c0fc5d7bffb5524ca053988455db0e2ac9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-oauth/zipball/882daa922f3d4f3c1a4282d5c0afeddabefaadb9", - "reference": "882daa922f3d4f3c1a4282d5c0afeddabefaadb9" + "url": "https://api.github.com/repos/laminas/laminas-oauth/zipball/7c82c5c0fc5d7bffb5524ca053988455db0e2ac9", + "reference": "7c82c5c0fc5d7bffb5524ca053988455db0e2ac9" }, "require": { "laminas/laminas-config": "^3.7", @@ -2010,7 +2042,7 @@ "laminas/laminas-math": "^3.5", "laminas/laminas-stdlib": "^3.10", "laminas/laminas-uri": "^2.9", - "php": "~8.0.0 || ~8.1.0 || ~8.2.0" + "php": "~8.1.0 || ~8.2.0 || ~8.3.0" }, "type": "library", "autoload": { @@ -2024,19 +2056,19 @@ }, { "name": "laminas/laminas-permissions-acl", - "version": "2.15.0", + "version": "2.16.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-permissions-acl.git", - "reference": "ea9f6643a624b3e847f7d637eb828498654f492e" + "reference": "9f85ee3b1940cd5a1c4151ca16fdb738c162480b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-permissions-acl/zipball/ea9f6643a624b3e847f7d637eb828498654f492e", - "reference": "ea9f6643a624b3e847f7d637eb828498654f492e" + "url": "https://api.github.com/repos/laminas/laminas-permissions-acl/zipball/9f85ee3b1940cd5a1c4151ca16fdb738c162480b", + "reference": "9f85ee3b1940cd5a1c4151ca16fdb738c162480b" }, "require": { - "php": "~8.1.0 || ~8.2.0" + "php": "~8.1.0 || ~8.2.0 || ~8.3.0" }, "type": "library", "autoload": { @@ -2051,22 +2083,22 @@ }, { "name": "laminas/laminas-recaptcha", - "version": "3.6.0", + "version": "3.7.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-recaptcha.git", - "reference": "ead14136a0ded44d1a72f4885df0f3333065d919" + "reference": "9cb3a9e3ca7af64205590adc649e107bc6ce2bfc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-recaptcha/zipball/ead14136a0ded44d1a72f4885df0f3333065d919", - "reference": "ead14136a0ded44d1a72f4885df0f3333065d919" + "url": "https://api.github.com/repos/laminas/laminas-recaptcha/zipball/9cb3a9e3ca7af64205590adc649e107bc6ce2bfc", + "reference": "9cb3a9e3ca7af64205590adc649e107bc6ce2bfc" }, "require": { "ext-json": "*", "laminas/laminas-http": "^2.15", "laminas/laminas-stdlib": "^3.10.1", - "php": "~8.0.0 || ~8.1.0 || ~8.2.0" + "php": "~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0" }, "type": "library", "autoload": { @@ -2081,22 +2113,22 @@ }, { "name": "laminas/laminas-router", - "version": "3.11.1", + "version": "3.12.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-router.git", - "reference": "3512c28cb4ffd64a62bc9e8b685a50a6547b0a11" + "reference": "e8f1a9ecd63d123c38de3519fe7ca9013da4f8d2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-router/zipball/3512c28cb4ffd64a62bc9e8b685a50a6547b0a11", - "reference": "3512c28cb4ffd64a62bc9e8b685a50a6547b0a11" + "url": "https://api.github.com/repos/laminas/laminas-router/zipball/e8f1a9ecd63d123c38de3519fe7ca9013da4f8d2", + "reference": "e8f1a9ecd63d123c38de3519fe7ca9013da4f8d2" }, "require": { "laminas/laminas-http": "^2.15", "laminas/laminas-servicemanager": "^3.14.0", "laminas/laminas-stdlib": "^3.10.1", - "php": "~8.0.0 || ~8.1.0 || ~8.2.0" + "php": "~8.1.0 || ~8.2.0 || ~8.3.0" }, "type": "library", "extra": { @@ -2117,22 +2149,22 @@ }, { "name": "laminas/laminas-server", - "version": "2.15.0", + "version": "2.16.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-server.git", - "reference": "7f4862913ab95ea5decd08e6c3717edbb398fde8" + "reference": "659a56f69fc27e787385f3d713c81bc1eae01eb0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-server/zipball/7f4862913ab95ea5decd08e6c3717edbb398fde8", - "reference": "7f4862913ab95ea5decd08e6c3717edbb398fde8" + "url": "https://api.github.com/repos/laminas/laminas-server/zipball/659a56f69fc27e787385f3d713c81bc1eae01eb0", + "reference": "659a56f69fc27e787385f3d713c81bc1eae01eb0" }, "require": { "laminas/laminas-code": "^4.7.1", "laminas/laminas-stdlib": "^3.3.1", "laminas/laminas-zendframework-bridge": "^1.2.0", - "php": "~8.0.0 || ~8.1.0 || ~8.2.0" + "php": "~8.1.0 || ~8.2.0 || ~8.3.0" }, "replace": { "zendframework/zend-server": "^2.8.1" @@ -2150,20 +2182,20 @@ }, { "name": "laminas/laminas-servicemanager", - "version": "3.21.0", + "version": "3.22.1", "source": { "type": "git", "url": "https://github.com/laminas/laminas-servicemanager.git", - "reference": "625f2aa3bc6dd02688b2da5155b3a69870812bda" + "reference": "de98d297d4743956a0558a6d71616979ff779328" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-servicemanager/zipball/625f2aa3bc6dd02688b2da5155b3a69870812bda", - "reference": "625f2aa3bc6dd02688b2da5155b3a69870812bda" + "url": "https://api.github.com/repos/laminas/laminas-servicemanager/zipball/de98d297d4743956a0558a6d71616979ff779328", + "reference": "de98d297d4743956a0558a6d71616979ff779328" }, "require": { "laminas/laminas-stdlib": "^3.17", - "php": "~8.1.0 || ~8.2.0", + "php": "~8.1.0 || ~8.2.0 || ~8.3.0", "psr/container": "^1.0" }, "provide": { @@ -2192,22 +2224,22 @@ }, { "name": "laminas/laminas-session", - "version": "2.16.0", + "version": "2.17.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-session.git", - "reference": "9c845a0361625d5775cad6f043716196201ad41f" + "reference": "2f255f1b4349a9f330ba1a26dcf4e2773a6a8226" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-session/zipball/9c845a0361625d5775cad6f043716196201ad41f", - "reference": "9c845a0361625d5775cad6f043716196201ad41f" + "url": "https://api.github.com/repos/laminas/laminas-session/zipball/2f255f1b4349a9f330ba1a26dcf4e2773a6a8226", + "reference": "2f255f1b4349a9f330ba1a26dcf4e2773a6a8226" }, "require": { - "laminas/laminas-eventmanager": "^3.5", - "laminas/laminas-servicemanager": "^3.15.1", - "laminas/laminas-stdlib": "^3.10.1", - "php": "~8.0.0 || ~8.1.0 || ~8.2.0" + "laminas/laminas-eventmanager": "^3.12", + "laminas/laminas-servicemanager": "^3.22", + "laminas/laminas-stdlib": "^3.18", + "php": "~8.1.0 || ~8.2.0 || ~8.3.0" }, "type": "library", "extra": { @@ -2228,16 +2260,16 @@ }, { "name": "laminas/laminas-soap", - "version": "2.12.0", + "version": "2.13.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-soap.git", - "reference": "127de3d876b992a6327c274b15df6de26d7aa712" + "reference": "68fdb11ec50eb8cf73ca266643c681d36c884b7f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-soap/zipball/127de3d876b992a6327c274b15df6de26d7aa712", - "reference": "127de3d876b992a6327c274b15df6de26d7aa712" + "url": "https://api.github.com/repos/laminas/laminas-soap/zipball/68fdb11ec50eb8cf73ca266643c681d36c884b7f", + "reference": "68fdb11ec50eb8cf73ca266643c681d36c884b7f" }, "require": { "ext-dom": "*", @@ -2245,7 +2277,7 @@ "laminas/laminas-server": "^2.15", "laminas/laminas-stdlib": "^3.16", "laminas/laminas-uri": "^2.10", - "php": "~8.0.0 || ~8.1.0 || ~8.2.0" + "php": "~8.1.0 || ~8.2.0 || ~8.3.0" }, "type": "library", "autoload": { @@ -2259,19 +2291,19 @@ }, { "name": "laminas/laminas-stdlib", - "version": "3.17.0", + "version": "3.18.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-stdlib.git", - "reference": "dd35c868075bad80b6718959740913e178eb4274" + "reference": "e85b29076c6216e7fc98e72b42dbe1bbc3b95ecf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-stdlib/zipball/dd35c868075bad80b6718959740913e178eb4274", - "reference": "dd35c868075bad80b6718959740913e178eb4274" + "url": "https://api.github.com/repos/laminas/laminas-stdlib/zipball/e85b29076c6216e7fc98e72b42dbe1bbc3b95ecf", + "reference": "e85b29076c6216e7fc98e72b42dbe1bbc3b95ecf" }, "require": { - "php": "~8.1.0 || ~8.2.0" + "php": "~8.1.0 || ~8.2.0 || ~8.3.0" }, "type": "library", "autoload": { @@ -2286,21 +2318,21 @@ }, { "name": "laminas/laminas-text", - "version": "2.10.0", + "version": "2.11.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-text.git", - "reference": "40f7acdb284d41553d32db811e704d6e15e415b4" + "reference": "d799f3ccb3547e9e6ab313447138bae7009c7cc7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-text/zipball/40f7acdb284d41553d32db811e704d6e15e415b4", - "reference": "40f7acdb284d41553d32db811e704d6e15e415b4" + "url": "https://api.github.com/repos/laminas/laminas-text/zipball/d799f3ccb3547e9e6ab313447138bae7009c7cc7", + "reference": "d799f3ccb3547e9e6ab313447138bae7009c7cc7" }, "require": { - "laminas/laminas-servicemanager": "^3.19.0", + "laminas/laminas-servicemanager": "^3.22.0", "laminas/laminas-stdlib": "^3.7.1", - "php": "~8.0.0 || ~8.1.0 || ~8.2.0" + "php": "~8.1.0 || ~8.2.0 || ~8.3.0" }, "type": "library", "autoload": { @@ -2315,21 +2347,21 @@ }, { "name": "laminas/laminas-uri", - "version": "2.10.0", + "version": "2.11.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-uri.git", - "reference": "663b050294945c7345cc3a61f3ca661d5f9e1f80" + "reference": "e662c685125061d3115906e5eb30f966842cc226" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-uri/zipball/663b050294945c7345cc3a61f3ca661d5f9e1f80", - "reference": "663b050294945c7345cc3a61f3ca661d5f9e1f80" + "url": "https://api.github.com/repos/laminas/laminas-uri/zipball/e662c685125061d3115906e5eb30f966842cc226", + "reference": "e662c685125061d3115906e5eb30f966842cc226" }, "require": { "laminas/laminas-escaper": "^2.9", - "laminas/laminas-validator": "^2.15", - "php": "~8.0.0 || ~8.1.0 || ~8.2.0" + "laminas/laminas-validator": "^2.39", + "php": "~8.1.0 || ~8.2.0 || ~8.3.0" }, "type": "library", "autoload": { @@ -2344,21 +2376,21 @@ }, { "name": "laminas/laminas-validator", - "version": "2.38.0", + "version": "2.46.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-validator.git", - "reference": "5fafe1ec4cc23e4bb4dfe6b4cd96c28e1c7f48a3" + "reference": "98330256f8d8a1357a93f6f7f1a987036aff6329" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-validator/zipball/5fafe1ec4cc23e4bb4dfe6b4cd96c28e1c7f48a3", - "reference": "5fafe1ec4cc23e4bb4dfe6b4cd96c28e1c7f48a3" + "url": "https://api.github.com/repos/laminas/laminas-validator/zipball/98330256f8d8a1357a93f6f7f1a987036aff6329", + "reference": "98330256f8d8a1357a93f6f7f1a987036aff6329" }, "require": { "laminas/laminas-servicemanager": "^3.21.0", "laminas/laminas-stdlib": "^3.13", - "php": "~8.1.0 || ~8.2.0", + "php": "~8.1.0 || ~8.2.0 || ~8.3.0", "psr/http-message": "^1.0.1 || ^2.0.0" }, "type": "library", @@ -2380,16 +2412,16 @@ }, { "name": "laminas/laminas-view", - "version": "2.30.0", + "version": "2.33.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-view.git", - "reference": "055623fd0634f2ab2a51defa03c22ddee4e89df7" + "reference": "9b34f34eb69e839f4cbd64495c199c593565f166" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-view/zipball/055623fd0634f2ab2a51defa03c22ddee4e89df7", - "reference": "055623fd0634f2ab2a51defa03c22ddee4e89df7" + "url": "https://api.github.com/repos/laminas/laminas-view/zipball/9b34f34eb69e839f4cbd64495c199c593565f166", + "reference": "9b34f34eb69e839f4cbd64495c199c593565f166" }, "require": { "ext-dom": "*", @@ -2400,7 +2432,7 @@ "laminas/laminas-json": "^3.3", "laminas/laminas-servicemanager": "^3.21.0", "laminas/laminas-stdlib": "^3.10.1", - "php": "~8.1.0 || ~8.2.0", + "php": "~8.1.0 || ~8.2.0 || ~8.3.0", "psr/container": "^1 || ^2" }, "bin": [ @@ -2419,19 +2451,19 @@ }, { "name": "laminas/laminas-zendframework-bridge", - "version": "1.7.0", + "version": "1.8.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-zendframework-bridge.git", - "reference": "5ef52e26392777a26dbb8f20fe24f91b406459f6" + "reference": "eb0d96c708b92177a92bc2239543d3ed523452c6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-zendframework-bridge/zipball/5ef52e26392777a26dbb8f20fe24f91b406459f6", - "reference": "5ef52e26392777a26dbb8f20fe24f91b406459f6" + "url": "https://api.github.com/repos/laminas/laminas-zendframework-bridge/zipball/eb0d96c708b92177a92bc2239543d3ed523452c6", + "reference": "eb0d96c708b92177a92bc2239543d3ed523452c6" }, "require": { - "php": "~8.0.0 || ~8.1.0 || ~8.2.0" + "php": "~8.1.0 || ~8.2.0 || ~8.3.0" }, "type": "library", "extra": { @@ -2513,16 +2545,16 @@ }, { "name": "league/mime-type-detection", - "version": "1.13.0", + "version": "1.14.0", "source": { "type": "git", "url": "https://github.com/thephpleague/mime-type-detection.git", - "reference": "a6dfb1194a2946fcdc1f38219445234f65b35c96" + "reference": "b6a5854368533df0295c5761a0253656a2e52d9e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/a6dfb1194a2946fcdc1f38219445234f65b35c96", - "reference": "a6dfb1194a2946fcdc1f38219445234f65b35c96" + "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/b6a5854368533df0295c5761a0253656a2e52d9e", + "reference": "b6a5854368533df0295c5761a0253656a2e52d9e" }, "require": { "ext-fileinfo": "*", @@ -2667,16 +2699,16 @@ }, { "name": "magento/magento2ce", - "version": "2.4.6-p2", + "version": "2.4.6-p3", "source": { "type": "git", "url": "https://github.com/magento/magento2.git", - "reference": "37861a4025ef7f18016d3ab149e006da46821784" + "reference": "6cc0d28cf66074adebc261e981eb35811601f813" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/magento/magento2/zipball/37861a4025ef7f18016d3ab149e006da46821784", - "reference": "37861a4025ef7f18016d3ab149e006da46821784" + "url": "https://api.github.com/repos/magento/magento2/zipball/6cc0d28cf66074adebc261e981eb35811601f813", + "reference": "6cc0d28cf66074adebc261e981eb35811601f813" }, "require": { "colinmollenhour/cache-backend-file": "^1.4", @@ -2757,7 +2789,7 @@ "blueimp/jquery-file-upload": "5.6.14", "components/jquery": "1.11.0", "components/jqueryui": "1.10.4", - "magento/framework": "103.0.6-p2", + "magento/framework": "103.0.6-p3", "magento/framework-amqp": "100.4.4", "magento/framework-bulk": "101.0.2", "magento/framework-message-queue": "100.4.6", @@ -2785,7 +2817,7 @@ "magento/module-cache-invalidate": "100.4.4", "magento/module-captcha": "100.4.6-p2", "magento/module-cardinal-commerce": "100.4.4", - "magento/module-catalog": "104.0.6-p2", + "magento/module-catalog": "104.0.6-p3", "magento/module-catalog-analytics": "100.4.3", "magento/module-catalog-cms-graph-ql": "100.4.2", "magento/module-catalog-customer-graph-ql": "100.4.5", @@ -2800,7 +2832,7 @@ "magento/module-catalog-url-rewrite": "100.4.6", "magento/module-catalog-url-rewrite-graph-ql": "100.4.4", "magento/module-catalog-widget": "100.4.6", - "magento/module-checkout": "100.4.6-p2", + "magento/module-checkout": "100.4.6-p3", "magento/module-checkout-agreements": "100.4.5-p2", "magento/module-checkout-agreements-graph-ql": "100.4.2", "magento/module-cms": "104.0.6-p2", @@ -2817,8 +2849,8 @@ "magento/module-cookie": "100.4.6", "magento/module-cron": "100.4.6", "magento/module-csp": "100.4.5", - "magento/module-currency-symbol": "100.4.4-p2", - "magento/module-customer": "103.0.6-p2", + "magento/module-currency-symbol": "100.4.4-p3", + "magento/module-customer": "103.0.6-p3", "magento/module-customer-analytics": "100.4.3", "magento/module-customer-downloadable-graph-ql": "100.4.2", "magento/module-customer-graph-ql": "100.4.6", @@ -2828,7 +2860,7 @@ "magento/module-dhl": "100.4.5", "magento/module-directory": "100.4.6", "magento/module-directory-graph-ql": "100.4.4", - "magento/module-downloadable": "100.4.6-p2", + "magento/module-downloadable": "100.4.6-p3", "magento/module-downloadable-graph-ql": "100.4.6", "magento/module-downloadable-import-export": "100.4.5", "magento/module-eav": "102.1.6", @@ -2905,13 +2937,13 @@ "magento/module-offline-payments": "100.4.4", "magento/module-offline-shipping": "100.4.5", "magento/module-open-search": "100.4.0", - "magento/module-page-cache": "100.4.6", + "magento/module-page-cache": "100.4.6-p3", "magento/module-payment": "100.4.6", "magento/module-payment-graph-ql": "100.4.1", "magento/module-paypal": "101.0.6-p2", "magento/module-paypal-captcha": "100.4.3", "magento/module-paypal-graph-ql": "100.4.4", - "magento/module-persistent": "100.4.6-p2", + "magento/module-persistent": "100.4.6-p3", "magento/module-product-alert": "100.4.5", "magento/module-product-video": "100.4.6", "magento/module-quote": "101.2.6-p1", @@ -2931,7 +2963,7 @@ "magento/module-robots": "101.1.2", "magento/module-rss": "100.4.4", "magento/module-rule": "100.4.5", - "magento/module-sales": "103.0.6-p2", + "magento/module-sales": "103.0.6-p3", "magento/module-sales-analytics": "100.4.3", "magento/module-sales-graph-ql": "100.4.6", "magento/module-sales-inventory": "100.4.3", @@ -2942,7 +2974,7 @@ "magento/module-security": "100.4.6", "magento/module-send-friend": "100.4.4", "magento/module-send-friend-graph-ql": "100.4.2", - "magento/module-shipping": "100.4.6-p2", + "magento/module-shipping": "100.4.6-p3", "magento/module-sitemap": "100.4.5", "magento/module-store": "101.1.6", "magento/module-store-graph-ql": "100.4.4", @@ -2960,10 +2992,10 @@ "magento/module-translation": "100.4.6", "magento/module-ui": "101.2.6", "magento/module-ups": "100.4.6", - "magento/module-url-rewrite": "102.0.5-p2", + "magento/module-url-rewrite": "102.0.5-p3", "magento/module-url-rewrite-graph-ql": "100.4.5", "magento/module-user": "101.2.6", - "magento/module-usps": "100.4.5-p1", + "magento/module-usps": "100.4.5-p3", "magento/module-variable": "100.4.4", "magento/module-vault": "101.2.6", "magento/module-vault-graph-ql": "100.4.2", @@ -3069,16 +3101,16 @@ }, { "name": "magento/zend-db", - "version": "1.16.0", + "version": "1.16.1", "source": { "type": "git", "url": "https://github.com/magento/magento-zend-db.git", - "reference": "def36bc00e49cf0056a59192e52f2e83077b933c" + "reference": "475addb06c0a417b2fd18effe5966bd3aa929b7b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/magento/magento-zend-db/zipball/def36bc00e49cf0056a59192e52f2e83077b933c", - "reference": "def36bc00e49cf0056a59192e52f2e83077b933c" + "url": "https://api.github.com/repos/magento/magento-zend-db/zipball/475addb06c0a417b2fd18effe5966bd3aa929b7b", + "reference": "475addb06c0a417b2fd18effe5966bd3aa929b7b" }, "require": { "magento/zend-exception": "^1.16", @@ -3143,16 +3175,16 @@ }, { "name": "magento/zend-loader", - "version": "1.16.0", + "version": "1.16.1", "source": { "type": "git", "url": "https://github.com/magento/magento-zend-loader.git", - "reference": "200786c8009d668917a42250ed72ebf8c4c958d2" + "reference": "7eca22970a6b7cdaa3d3a6a6d117e4c0d3bef5e9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/magento/magento-zend-loader/zipball/200786c8009d668917a42250ed72ebf8c4c958d2", - "reference": "200786c8009d668917a42250ed72ebf8c4c958d2" + "url": "https://api.github.com/repos/magento/magento-zend-loader/zipball/7eca22970a6b7cdaa3d3a6a6d117e4c0d3bef5e9", + "reference": "7eca22970a6b7cdaa3d3a6a6d117e4c0d3bef5e9" }, "require": { "magento/zend-exception": "^1.16.0", @@ -3255,16 +3287,16 @@ }, { "name": "magento/zend-pdf", - "version": "1.16.2", + "version": "1.16.3", "source": { "type": "git", "url": "https://github.com/magento/magento-zend-pdf.git", - "reference": "120ad9e854231431e3a5837f00158a91885b3fbe" + "reference": "4426cdf87d10ad9a45e21da1468665a97d01ef79" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/magento/magento-zend-pdf/zipball/120ad9e854231431e3a5837f00158a91885b3fbe", - "reference": "120ad9e854231431e3a5837f00158a91885b3fbe" + "url": "https://api.github.com/repos/magento/magento-zend-pdf/zipball/4426cdf87d10ad9a45e21da1468665a97d01ef79", + "reference": "4426cdf87d10ad9a45e21da1468665a97d01ef79" }, "require": { "ext-ctype": "*", @@ -3298,16 +3330,16 @@ }, { "name": "monolog/monolog", - "version": "2.9.1", + "version": "2.9.2", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "f259e2b15fb95494c83f52d3caad003bbf5ffaa1" + "reference": "437cb3628f4cf6042cc10ae97fc2b8472e48ca1f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/f259e2b15fb95494c83f52d3caad003bbf5ffaa1", - "reference": "f259e2b15fb95494c83f52d3caad003bbf5ffaa1" + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/437cb3628f4cf6042cc10ae97fc2b8472e48ca1f", + "reference": "437cb3628f4cf6042cc10ae97fc2b8472e48ca1f" }, "require": { "php": ">=7.2", @@ -3334,19 +3366,19 @@ }, { "name": "mtdowling/jmespath.php", - "version": "2.6.1", + "version": "2.7.0", "source": { "type": "git", "url": "https://github.com/jmespath/jmespath.php.git", - "reference": "9b87907a81b87bc76d19a7fb2d61e61486ee9edb" + "reference": "bbb69a935c2cbb0c03d7f481a238027430f6440b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/jmespath/jmespath.php/zipball/9b87907a81b87bc76d19a7fb2d61e61486ee9edb", - "reference": "9b87907a81b87bc76d19a7fb2d61e61486ee9edb" + "url": "https://api.github.com/repos/jmespath/jmespath.php/zipball/bbb69a935c2cbb0c03d7f481a238027430f6440b", + "reference": "bbb69a935c2cbb0c03d7f481a238027430f6440b" }, "require": { - "php": "^5.4 || ^7.0 || ^8.0", + "php": "^7.2.5 || ^8.0", "symfony/polyfill-mbstring": "^1.17" }, "bin": [ @@ -3355,7 +3387,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.6-dev" + "dev-master": "2.7-dev" } }, "autoload": { @@ -3404,16 +3436,16 @@ }, { "name": "nikic/php-parser", - "version": "v4.17.1", + "version": "v4.18.0", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d" + "reference": "1bcbb2179f97633e98bbbc87044ee2611c7d7999" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d", - "reference": "a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d" + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/1bcbb2179f97633e98bbbc87044ee2611c7d7999", + "reference": "1bcbb2179f97633e98bbbc87044ee2611c7d7999" }, "require": { "ext-tokenizer": "*", @@ -3521,23 +3553,23 @@ }, { "name": "pelago/emogrifier", - "version": "v7.0.0", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/MyIntervals/emogrifier.git", - "reference": "547b8c814794aec871e3c98b1c712f416755f4eb" + "reference": "727bdf7255b51798307f17dec52ff8a91f1c7de3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/MyIntervals/emogrifier/zipball/547b8c814794aec871e3c98b1c712f416755f4eb", - "reference": "547b8c814794aec871e3c98b1c712f416755f4eb" + "url": "https://api.github.com/repos/MyIntervals/emogrifier/zipball/727bdf7255b51798307f17dec52ff8a91f1c7de3", + "reference": "727bdf7255b51798307f17dec52ff8a91f1c7de3" }, "require": { "ext-dom": "*", "ext-libxml": "*", - "php": "~7.3.0 || ~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0", + "php": "~7.3.0 || ~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0", "sabberworm/php-css-parser": "^8.4.0", - "symfony/css-selector": "^4.4.23 || ^5.4.0 || ^6.0.0" + "symfony/css-selector": "^4.4.23 || ^5.4.0 || ^6.0.0 || ^7.0.0" }, "type": "library", "extra": { @@ -3557,21 +3589,21 @@ }, { "name": "php-amqplib/php-amqplib", - "version": "v3.5.4", + "version": "v3.6.0", "source": { "type": "git", "url": "https://github.com/php-amqplib/php-amqplib.git", - "reference": "1aecbd182b35eb039667c50d7d92d71f105be779" + "reference": "fb84e99589de0904a25861451b0552f806284ee5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-amqplib/php-amqplib/zipball/1aecbd182b35eb039667c50d7d92d71f105be779", - "reference": "1aecbd182b35eb039667c50d7d92d71f105be779" + "url": "https://api.github.com/repos/php-amqplib/php-amqplib/zipball/fb84e99589de0904a25861451b0552f806284ee5", + "reference": "fb84e99589de0904a25861451b0552f806284ee5" }, "require": { "ext-mbstring": "*", "ext-sockets": "*", - "php": "^7.1||^8.0", + "php": "^7.2||^8.0", "phpseclib/phpseclib": "^2.0|^3.0" }, "replace": { @@ -3595,16 +3627,16 @@ }, { "name": "php-cs-fixer/shim", - "version": "v3.23.0", + "version": "v3.46.0", "source": { "type": "git", "url": "https://github.com/PHP-CS-Fixer/shim.git", - "reference": "ddca9b342374087121e44cca3b7d8aca8f121fa7" + "reference": "e9fc76796f284c050615937b9bd2df7688452c33" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHP-CS-Fixer/shim/zipball/ddca9b342374087121e44cca3b7d8aca8f121fa7", - "reference": "ddca9b342374087121e44cca3b7d8aca8f121fa7" + "url": "https://api.github.com/repos/PHP-CS-Fixer/shim/zipball/e9fc76796f284c050615937b9bd2df7688452c33", + "reference": "e9fc76796f284c050615937b9bd2df7688452c33" }, "require": { "ext-json": "*", @@ -3624,6 +3656,105 @@ ], "description": "A tool to automatically fix PHP code style" }, + { + "name": "php-http/discovery", + "version": "1.19.2", + "source": { + "type": "git", + "url": "https://github.com/php-http/discovery.git", + "reference": "61e1a1eb69c92741f5896d9e05fb8e9d7e8bb0cb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/discovery/zipball/61e1a1eb69c92741f5896d9e05fb8e9d7e8bb0cb", + "reference": "61e1a1eb69c92741f5896d9e05fb8e9d7e8bb0cb" + }, + "require": { + "composer-plugin-api": "^1.0|^2.0", + "php": "^7.1 || ^8.0" + }, + "provide": { + "php-http/async-client-implementation": "*", + "php-http/client-implementation": "*", + "psr/http-client-implementation": "*", + "psr/http-factory-implementation": "*", + "psr/http-message-implementation": "*" + }, + "type": "composer-plugin", + "extra": { + "class": "Http\\Discovery\\Composer\\Plugin", + "plugin-optional": true + }, + "autoload": { + "psr-4": { + "Http\\Discovery\\": "src/" + }, + "exclude-from-classmap": [ + "src/Composer/Plugin.php" + ] + }, + "license": [ + "MIT" + ], + "description": "Finds and installs PSR-7, PSR-17, PSR-18 and HTTPlug implementations" + }, + { + "name": "php-http/httplug", + "version": "2.4.0", + "source": { + "type": "git", + "url": "https://github.com/php-http/httplug.git", + "reference": "625ad742c360c8ac580fcc647a1541d29e257f67" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/httplug/zipball/625ad742c360c8ac580fcc647a1541d29e257f67", + "reference": "625ad742c360c8ac580fcc647a1541d29e257f67" + }, + "require": { + "php": "^7.1 || ^8.0", + "php-http/promise": "^1.1", + "psr/http-client": "^1.0", + "psr/http-message": "^1.0 || ^2.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Http\\Client\\": "src/" + } + }, + "license": [ + "MIT" + ], + "description": "HTTPlug, the HTTP client abstraction for PHP" + }, + { + "name": "php-http/promise", + "version": "1.3.0", + "source": { + "type": "git", + "url": "https://github.com/php-http/promise.git", + "reference": "2916a606d3b390f4e9e8e2b8dd68581508be0f07" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/promise/zipball/2916a606d3b390f4e9e8e2b8dd68581508be0f07", + "reference": "2916a606d3b390f4e9e8e2b8dd68581508be0f07" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Http\\Promise\\": "src/" + } + }, + "license": [ + "MIT" + ], + "description": "Promise used for asynchronous HTTP requests" + }, { "name": "phpdocumentor/reflection-common", "version": "2.2.0", @@ -3760,16 +3891,16 @@ }, { "name": "phpseclib/phpseclib", - "version": "3.0.21", + "version": "3.0.35", "source": { "type": "git", "url": "https://github.com/phpseclib/phpseclib.git", - "reference": "4580645d3fc05c189024eb3b834c6c1e4f0f30a1" + "reference": "4b1827beabce71953ca479485c0ae9c51287f2fe" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/4580645d3fc05c189024eb3b834c6c1e4f0f30a1", - "reference": "4580645d3fc05c189024eb3b834c6c1e4f0f30a1" + "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/4b1827beabce71953ca479485c0ae9c51287f2fe", + "reference": "4b1827beabce71953ca479485c0ae9c51287f2fe" }, "require": { "paragonie/constant_time_encoding": "^1|^2", @@ -3792,16 +3923,16 @@ }, { "name": "phpstan/phpdoc-parser", - "version": "1.23.1", + "version": "1.25.0", "source": { "type": "git", "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "846ae76eef31c6d7790fac9bc399ecee45160b26" + "reference": "bd84b629c8de41aa2ae82c067c955e06f1b00240" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/846ae76eef31c6d7790fac9bc399ecee45160b26", - "reference": "846ae76eef31c6d7790fac9bc399ecee45160b26" + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/bd84b629c8de41aa2ae82c067c955e06f1b00240", + "reference": "bd84b629c8de41aa2ae82c067c955e06f1b00240" }, "require": { "php": "^7.2 || ^8.0" @@ -3821,16 +3952,16 @@ }, { "name": "phpstan/phpstan", - "version": "1.10.30", + "version": "1.10.55", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan.git", - "reference": "2910afdd3fe33e5afd71c09f3fb0d0845b48c410" + "reference": "9a88f9d18ddf4cf54c922fbeac16c4cb164c5949" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/2910afdd3fe33e5afd71c09f3fb0d0845b48c410", - "reference": "2910afdd3fe33e5afd71c09f3fb0d0845b48c410" + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/9a88f9d18ddf4cf54c922fbeac16c4cb164c5949", + "reference": "9a88f9d18ddf4cf54c922fbeac16c4cb164c5949" }, "require": { "php": "^7.2|^8.0" @@ -3970,16 +4101,16 @@ }, { "name": "psr/http-client", - "version": "1.0.2", + "version": "1.0.3", "source": { "type": "git", "url": "https://github.com/php-fig/http-client.git", - "reference": "0955afe48220520692d2d09f7ab7e0f93ffd6a31" + "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-client/zipball/0955afe48220520692d2d09f7ab7e0f93ffd6a31", - "reference": "0955afe48220520692d2d09f7ab7e0f93ffd6a31" + "url": "https://api.github.com/repos/php-fig/http-client/zipball/bb5906edc1c324c9a05aa0873d40117941e5fa90", + "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90" }, "require": { "php": "^7.0 || ^8.0", @@ -4036,16 +4167,16 @@ }, { "name": "psr/http-message", - "version": "2.0", + "version": "1.1", "source": { "type": "git", "url": "https://github.com/php-fig/http-message.git", - "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71" + "reference": "cb6ce4845ce34a8ad9e68117c10ee90a29919eba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-message/zipball/402d35bcb92c70c026d1a6a9883f06b2ead23d71", - "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71" + "url": "https://api.github.com/repos/php-fig/http-message/zipball/cb6ce4845ce34a8ad9e68117c10ee90a29919eba", + "reference": "cb6ce4845ce34a8ad9e68117c10ee90a29919eba" }, "require": { "php": "^7.2 || ^8.0" @@ -4053,7 +4184,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-master": "1.1.x-dev" } }, "autoload": { @@ -4162,16 +4293,16 @@ }, { "name": "ramsey/uuid", - "version": "4.7.4", + "version": "4.7.5", "source": { "type": "git", "url": "https://github.com/ramsey/uuid.git", - "reference": "60a4c63ab724854332900504274f6150ff26d286" + "reference": "5f0df49ae5ad6efb7afa69e6bfab4e5b1e080d8e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/uuid/zipball/60a4c63ab724854332900504274f6150ff26d286", - "reference": "60a4c63ab724854332900504274f6150ff26d286" + "url": "https://api.github.com/repos/ramsey/uuid/zipball/5f0df49ae5ad6efb7afa69e6bfab4e5b1e080d8e", + "reference": "5f0df49ae5ad6efb7afa69e6bfab4e5b1e080d8e" }, "require": { "brick/math": "^0.8.8 || ^0.9 || ^0.10 || ^0.11", @@ -4203,16 +4334,16 @@ }, { "name": "react/promise", - "version": "v2.10.0", + "version": "v2.11.0", "source": { "type": "git", "url": "https://github.com/reactphp/promise.git", - "reference": "f913fb8cceba1e6644b7b90c4bfb678ed8a3ef38" + "reference": "1a8460931ea36dc5c76838fec5734d55c88c6831" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/reactphp/promise/zipball/f913fb8cceba1e6644b7b90c4bfb678ed8a3ef38", - "reference": "f913fb8cceba1e6644b7b90c4bfb678ed8a3ef38" + "url": "https://api.github.com/repos/reactphp/promise/zipball/1a8460931ea36dc5c76838fec5734d55c88c6831", + "reference": "1a8460931ea36dc5c76838fec5734d55c88c6831" }, "require": { "php": ">=5.4.0" @@ -4261,16 +4392,16 @@ }, { "name": "sebastian/diff", - "version": "5.0.3", + "version": "5.1.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "912dc2fbe3e3c1e7873313cc801b100b6c68c87b" + "reference": "fbf413a49e54f6b9b17e12d900ac7f6101591b7f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/912dc2fbe3e3c1e7873313cc801b100b6c68c87b", - "reference": "912dc2fbe3e3c1e7873313cc801b100b6c68c87b" + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/fbf413a49e54f6b9b17e12d900ac7f6101591b7f", + "reference": "fbf413a49e54f6b9b17e12d900ac7f6101591b7f" }, "require": { "php": ">=8.1" @@ -4278,7 +4409,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "5.0-dev" + "dev-main": "5.1-dev" } }, "autoload": { @@ -4293,16 +4424,16 @@ }, { "name": "seld/jsonlint", - "version": "1.10.0", + "version": "1.10.1", "source": { "type": "git", "url": "https://github.com/Seldaek/jsonlint.git", - "reference": "594fd6462aad8ecee0b45ca5045acea4776667f1" + "reference": "76d449a358ece77d6f1d6331c68453e657172202" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/594fd6462aad8ecee0b45ca5045acea4776667f1", - "reference": "594fd6462aad8ecee0b45ca5045acea4776667f1" + "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/76d449a358ece77d6f1d6331c68453e657172202", + "reference": "76d449a358ece77d6f1d6331c68453e657172202" }, "require": { "php": "^5.3 || ^7.0 || ^8.0" @@ -4355,16 +4486,16 @@ }, { "name": "seld/signal-handler", - "version": "2.0.1", + "version": "2.0.2", "source": { "type": "git", "url": "https://github.com/Seldaek/signal-handler.git", - "reference": "f69d119511dc0360440cdbdaa71829c149b7be75" + "reference": "04a6112e883ad76c0ada8e4a9f7520bbfdb6bb98" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/signal-handler/zipball/f69d119511dc0360440cdbdaa71829c149b7be75", - "reference": "f69d119511dc0360440cdbdaa71829c149b7be75" + "url": "https://api.github.com/repos/Seldaek/signal-handler/zipball/04a6112e883ad76c0ada8e4a9f7520bbfdb6bb98", + "reference": "04a6112e883ad76c0ada8e4a9f7520bbfdb6bb98" }, "require": { "php": ">=7.2.0" @@ -4387,16 +4518,16 @@ }, { "name": "spatie/array-to-xml", - "version": "3.2.0", + "version": "3.2.2", "source": { "type": "git", "url": "https://github.com/spatie/array-to-xml.git", - "reference": "f9ab39c808500c347d5a8b6b13310bd5221e39e7" + "reference": "96be97e664c87613121d073ea39af4c74e57a7f8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/array-to-xml/zipball/f9ab39c808500c347d5a8b6b13310bd5221e39e7", - "reference": "f9ab39c808500c347d5a8b6b13310bd5221e39e7" + "url": "https://api.github.com/repos/spatie/array-to-xml/zipball/96be97e664c87613121d073ea39af4c74e57a7f8", + "reference": "96be97e664c87613121d073ea39af4c74e57a7f8" }, "require": { "ext-dom": "*", @@ -4473,21 +4604,21 @@ }, { "name": "symfony/config", - "version": "v6.3.2", + "version": "v7.0.0", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "b47ca238b03e7b0d7880ffd1cf06e8d637ca1467" + "reference": "8789646600f4e7e451dde9e1dc81cfa429f3857a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/b47ca238b03e7b0d7880ffd1cf06e8d637ca1467", - "reference": "b47ca238b03e7b0d7880ffd1cf06e8d637ca1467" + "url": "https://api.github.com/repos/symfony/config/zipball/8789646600f4e7e451dde9e1dc81cfa429f3857a", + "reference": "8789646600f4e7e451dde9e1dc81cfa429f3857a" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/deprecation-contracts": "^2.5|^3", - "symfony/filesystem": "^5.4|^6.0", + "symfony/filesystem": "^6.4|^7.0", "symfony/polyfill-ctype": "~1.8" }, "type": "library", @@ -4506,16 +4637,16 @@ }, { "name": "symfony/console", - "version": "v5.4.26", + "version": "v5.4.34", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "b504a3d266ad2bb632f196c0936ef2af5ff6e273" + "reference": "4b4d8cd118484aa604ec519062113dd87abde18c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/b504a3d266ad2bb632f196c0936ef2af5ff6e273", - "reference": "b504a3d266ad2bb632f196c0936ef2af5ff6e273" + "url": "https://api.github.com/repos/symfony/console/zipball/4b4d8cd118484aa604ec519062113dd87abde18c", + "reference": "4b4d8cd118484aa604ec519062113dd87abde18c" }, "require": { "php": ">=7.2.5", @@ -4545,19 +4676,19 @@ }, { "name": "symfony/css-selector", - "version": "v6.3.2", + "version": "v7.0.0", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "883d961421ab1709877c10ac99451632a3d6fa57" + "reference": "bb51d46e53ef8d50d523f0c5faedba056a27943e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/883d961421ab1709877c10ac99451632a3d6fa57", - "reference": "883d961421ab1709877c10ac99451632a3d6fa57" + "url": "https://api.github.com/repos/symfony/css-selector/zipball/bb51d46e53ef8d50d523f0c5faedba056a27943e", + "reference": "bb51d46e53ef8d50d523f0c5faedba056a27943e" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "type": "library", "autoload": { @@ -4575,23 +4706,23 @@ }, { "name": "symfony/dependency-injection", - "version": "v6.3.2", + "version": "v7.0.2", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "474cfbc46aba85a1ca11a27db684480d0db64ba7" + "reference": "bd25ef7c937b9da12510bdc4f1c66728f19620e3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/474cfbc46aba85a1ca11a27db684480d0db64ba7", - "reference": "474cfbc46aba85a1ca11a27db684480d0db64ba7" + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/bd25ef7c937b9da12510bdc4f1c66728f19620e3", + "reference": "bd25ef7c937b9da12510bdc4f1c66728f19620e3" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "psr/container": "^1.1|^2.0", "symfony/deprecation-contracts": "^2.5|^3", - "symfony/service-contracts": "^2.5|^3.0", - "symfony/var-exporter": "^6.2.10" + "symfony/service-contracts": "^3.3", + "symfony/var-exporter": "^6.4|^7.0" }, "provide": { "psr/container-implementation": "1.1|2.0", @@ -4613,7 +4744,7 @@ }, { "name": "symfony/deprecation-contracts", - "version": "v3.3.0", + "version": "v3.4.0", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", @@ -4649,21 +4780,21 @@ }, { "name": "symfony/error-handler", - "version": "v6.3.2", + "version": "v7.0.0", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "85fd65ed295c4078367c784e8a5a6cee30348b7a" + "reference": "80b1258be1b84c12a345d0ec3881bbf2e5270cc2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/85fd65ed295c4078367c784e8a5a6cee30348b7a", - "reference": "85fd65ed295c4078367c784e8a5a6cee30348b7a" + "url": "https://api.github.com/repos/symfony/error-handler/zipball/80b1258be1b84c12a345d0ec3881bbf2e5270cc2", + "reference": "80b1258be1b84c12a345d0ec3881bbf2e5270cc2" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "psr/log": "^1|^2|^3", - "symfony/var-dumper": "^5.4|^6.0" + "symfony/var-dumper": "^6.4|^7.0" }, "bin": [ "Resources/bin/patch-type-declarations" @@ -4684,19 +4815,19 @@ }, { "name": "symfony/event-dispatcher", - "version": "v6.3.2", + "version": "v7.0.2", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "adb01fe097a4ee930db9258a3cc906b5beb5cf2e" + "reference": "098b62ae81fdd6cbf941f355059f617db28f4f9a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/adb01fe097a4ee930db9258a3cc906b5beb5cf2e", - "reference": "adb01fe097a4ee930db9258a3cc906b5beb5cf2e" + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/098b62ae81fdd6cbf941f355059f617db28f4f9a", + "reference": "098b62ae81fdd6cbf941f355059f617db28f4f9a" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/event-dispatcher-contracts": "^2.5|^3" }, "provide": { @@ -4719,7 +4850,7 @@ }, { "name": "symfony/event-dispatcher-contracts", - "version": "v3.3.0", + "version": "v3.4.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", @@ -4756,19 +4887,19 @@ }, { "name": "symfony/filesystem", - "version": "v6.3.1", + "version": "v7.0.0", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "edd36776956f2a6fcf577edb5b05eb0e3bdc52ae" + "reference": "7da8ea2362a283771478c5f7729cfcb43a76b8b7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/edd36776956f2a6fcf577edb5b05eb0e3bdc52ae", - "reference": "edd36776956f2a6fcf577edb5b05eb0e3bdc52ae" + "url": "https://api.github.com/repos/symfony/filesystem/zipball/7da8ea2362a283771478c5f7729cfcb43a76b8b7", + "reference": "7da8ea2362a283771478c5f7729cfcb43a76b8b7" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-mbstring": "~1.8" }, @@ -4788,19 +4919,19 @@ }, { "name": "symfony/finder", - "version": "v6.3.3", + "version": "v7.0.0", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "9915db259f67d21eefee768c1abcf1cc61b1fc9e" + "reference": "6e5688d69f7cfc4ed4a511e96007e06c2d34ce56" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/9915db259f67d21eefee768c1abcf1cc61b1fc9e", - "reference": "9915db259f67d21eefee768c1abcf1cc61b1fc9e" + "url": "https://api.github.com/repos/symfony/finder/zipball/6e5688d69f7cfc4ed4a511e96007e06c2d34ce56", + "reference": "6e5688d69f7cfc4ed4a511e96007e06c2d34ce56" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "type": "library", "autoload": { @@ -4818,20 +4949,19 @@ }, { "name": "symfony/http-foundation", - "version": "v6.3.2", + "version": "v7.0.0", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "43ed99d30f5f466ffa00bdac3f5f7aa9cd7617c3" + "reference": "47d72323200934694def5d57083899d774a2b110" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/43ed99d30f5f466ffa00bdac3f5f7aa9cd7617c3", - "reference": "43ed99d30f5f466ffa00bdac3f5f7aa9cd7617c3" + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/47d72323200934694def5d57083899d774a2b110", + "reference": "47d72323200934694def5d57083899d774a2b110" }, "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^3", + "php": ">=8.2", "symfony/polyfill-mbstring": "~1.1", "symfony/polyfill-php83": "^1.27" }, @@ -4851,24 +4981,24 @@ }, { "name": "symfony/http-kernel", - "version": "v6.3.3", + "version": "v6.4.2", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "d3b567f0addf695e10b0c6d57564a9bea2e058ee" + "reference": "13e8387320b5942d0dc408440c888e2d526efef4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/d3b567f0addf695e10b0c6d57564a9bea2e058ee", - "reference": "d3b567f0addf695e10b0c6d57564a9bea2e058ee" + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/13e8387320b5942d0dc408440c888e2d526efef4", + "reference": "13e8387320b5942d0dc408440c888e2d526efef4" }, "require": { "php": ">=8.1", "psr/log": "^1|^2|^3", "symfony/deprecation-contracts": "^2.5|^3", - "symfony/error-handler": "^6.3", - "symfony/event-dispatcher": "^5.4|^6.0", - "symfony/http-foundation": "^6.2.7", + "symfony/error-handler": "^6.4|^7.0", + "symfony/event-dispatcher": "^5.4|^6.0|^7.0", + "symfony/http-foundation": "^6.4|^7.0", "symfony/polyfill-ctype": "^1.8" }, "provide": { @@ -4890,16 +5020,16 @@ }, { "name": "symfony/intl", - "version": "v5.4.26", + "version": "v5.4.30", "source": { "type": "git", "url": "https://github.com/symfony/intl.git", - "reference": "c26c40b64ecdc056810e294ea67ac5b34182cd69" + "reference": "cd6cce16151ac871071a3495e7a325460b952b5a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/intl/zipball/c26c40b64ecdc056810e294ea67ac5b34182cd69", - "reference": "c26c40b64ecdc056810e294ea67ac5b34182cd69" + "url": "https://api.github.com/repos/symfony/intl/zipball/cd6cce16151ac871071a3495e7a325460b952b5a", + "reference": "cd6cce16151ac871071a3495e7a325460b952b5a" }, "require": { "php": ">=7.2.5", @@ -4928,16 +5058,16 @@ }, { "name": "symfony/polyfill-ctype", - "version": "v1.27.0", + "version": "v1.28.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "5bbc823adecdae860bb64756d639ecfec17b050a" + "reference": "ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/5bbc823adecdae860bb64756d639ecfec17b050a", - "reference": "5bbc823adecdae860bb64756d639ecfec17b050a" + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb", + "reference": "ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb" }, "require": { "php": ">=7.1" @@ -4948,7 +5078,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.27-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", @@ -4970,16 +5100,16 @@ }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.27.0", + "version": "v1.28.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "511a08c03c1960e08a883f4cffcacd219b758354" + "reference": "875e90aeea2777b6f135677f618529449334a612" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/511a08c03c1960e08a883f4cffcacd219b758354", - "reference": "511a08c03c1960e08a883f4cffcacd219b758354" + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/875e90aeea2777b6f135677f618529449334a612", + "reference": "875e90aeea2777b6f135677f618529449334a612" }, "require": { "php": ">=7.1" @@ -4987,7 +5117,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.27-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", @@ -5009,16 +5139,16 @@ }, { "name": "symfony/polyfill-intl-idn", - "version": "v1.27.0", + "version": "v1.28.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "639084e360537a19f9ee352433b84ce831f3d2da" + "reference": "ecaafce9f77234a6a449d29e49267ba10499116d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/639084e360537a19f9ee352433b84ce831f3d2da", - "reference": "639084e360537a19f9ee352433b84ce831f3d2da" + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/ecaafce9f77234a6a449d29e49267ba10499116d", + "reference": "ecaafce9f77234a6a449d29e49267ba10499116d" }, "require": { "php": ">=7.1", @@ -5028,7 +5158,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.27-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", @@ -5050,16 +5180,16 @@ }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.27.0", + "version": "v1.28.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6" + "reference": "8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/19bd1e4fcd5b91116f14d8533c57831ed00571b6", - "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6" + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92", + "reference": "8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92" }, "require": { "php": ">=7.1" @@ -5067,7 +5197,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.27-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", @@ -5092,16 +5222,16 @@ }, { "name": "symfony/polyfill-mbstring", - "version": "v1.27.0", + "version": "v1.28.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534" + "reference": "42292d99c55abe617799667f454222c54c60e229" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/8ad114f6b39e2c98a8b0e3bd907732c207c2b534", - "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534" + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/42292d99c55abe617799667f454222c54c60e229", + "reference": "42292d99c55abe617799667f454222c54c60e229" }, "require": { "php": ">=7.1" @@ -5112,7 +5242,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.27-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", @@ -5134,16 +5264,16 @@ }, { "name": "symfony/polyfill-php72", - "version": "v1.27.0", + "version": "v1.28.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "869329b1e9894268a8a61dabb69153029b7a8c97" + "reference": "70f4aebd92afca2f865444d30a4d2151c13c3179" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/869329b1e9894268a8a61dabb69153029b7a8c97", - "reference": "869329b1e9894268a8a61dabb69153029b7a8c97" + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/70f4aebd92afca2f865444d30a4d2151c13c3179", + "reference": "70f4aebd92afca2f865444d30a4d2151c13c3179" }, "require": { "php": ">=7.1" @@ -5151,7 +5281,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.27-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", @@ -5173,16 +5303,16 @@ }, { "name": "symfony/polyfill-php73", - "version": "v1.27.0", + "version": "v1.28.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "9e8ecb5f92152187c4799efd3c96b78ccab18ff9" + "reference": "fe2f306d1d9d346a7fee353d0d5012e401e984b5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/9e8ecb5f92152187c4799efd3c96b78ccab18ff9", - "reference": "9e8ecb5f92152187c4799efd3c96b78ccab18ff9" + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/fe2f306d1d9d346a7fee353d0d5012e401e984b5", + "reference": "fe2f306d1d9d346a7fee353d0d5012e401e984b5" }, "require": { "php": ">=7.1" @@ -5190,7 +5320,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.27-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", @@ -5215,16 +5345,16 @@ }, { "name": "symfony/polyfill-php80", - "version": "v1.27.0", + "version": "v1.28.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936" + "reference": "6caa57379c4aec19c0a12a38b59b26487dcfe4b5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", - "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936" + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/6caa57379c4aec19c0a12a38b59b26487dcfe4b5", + "reference": "6caa57379c4aec19c0a12a38b59b26487dcfe4b5" }, "require": { "php": ">=7.1" @@ -5232,7 +5362,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.27-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", @@ -5257,16 +5387,16 @@ }, { "name": "symfony/polyfill-php81", - "version": "v1.27.0", + "version": "v1.28.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php81.git", - "reference": "707403074c8ea6e2edaf8794b0157a0bfa52157a" + "reference": "7581cd600fa9fd681b797d00b02f068e2f13263b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/707403074c8ea6e2edaf8794b0157a0bfa52157a", - "reference": "707403074c8ea6e2edaf8794b0157a0bfa52157a" + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/7581cd600fa9fd681b797d00b02f068e2f13263b", + "reference": "7581cd600fa9fd681b797d00b02f068e2f13263b" }, "require": { "php": ">=7.1" @@ -5274,7 +5404,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.27-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", @@ -5299,16 +5429,16 @@ }, { "name": "symfony/polyfill-php83", - "version": "v1.27.0", + "version": "v1.28.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php83.git", - "reference": "508c652ba3ccf69f8c97f251534f229791b52a57" + "reference": "b0f46ebbeeeda3e9d2faebdfbf4b4eae9b59fa11" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/508c652ba3ccf69f8c97f251534f229791b52a57", - "reference": "508c652ba3ccf69f8c97f251534f229791b52a57" + "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/b0f46ebbeeeda3e9d2faebdfbf4b4eae9b59fa11", + "reference": "b0f46ebbeeeda3e9d2faebdfbf4b4eae9b59fa11" }, "require": { "php": ">=7.1", @@ -5317,7 +5447,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.27-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", @@ -5330,7 +5460,10 @@ ], "psr-4": { "Symfony\\Polyfill\\Php83\\": "" - } + }, + "classmap": [ + "Resources/stubs" + ] }, "license": [ "MIT" @@ -5339,16 +5472,16 @@ }, { "name": "symfony/process", - "version": "v5.4.26", + "version": "v5.4.34", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "1a44dc377ec86a50fab40d066cd061e28a6b482f" + "reference": "8fa22178dfc368911dbd513b431cd9b06f9afe7a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/1a44dc377ec86a50fab40d066cd061e28a6b482f", - "reference": "1a44dc377ec86a50fab40d066cd061e28a6b482f" + "url": "https://api.github.com/repos/symfony/process/zipball/8fa22178dfc368911dbd513b431cd9b06f9afe7a", + "reference": "8fa22178dfc368911dbd513b431cd9b06f9afe7a" }, "require": { "php": ">=7.2.5", @@ -5370,26 +5503,25 @@ }, { "name": "symfony/service-contracts", - "version": "v2.5.2", + "version": "v3.4.1", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "4b426aac47d6427cc1a1d0f7e2ac724627f5966c" + "reference": "fe07cbc8d837f60caf7018068e350cc5163681a0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/4b426aac47d6427cc1a1d0f7e2ac724627f5966c", - "reference": "4b426aac47d6427cc1a1d0f7e2ac724627f5966c" + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/fe07cbc8d837f60caf7018068e350cc5163681a0", + "reference": "fe07cbc8d837f60caf7018068e350cc5163681a0" }, "require": { - "php": ">=7.2.5", - "psr/container": "^1.1", - "symfony/deprecation-contracts": "^2.1|^3" + "php": ">=8.1", + "psr/container": "^1.1|^2.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "2.5-dev" + "dev-main": "3.4-dev" }, "thanks": { "name": "symfony/contracts", @@ -5399,7 +5531,10 @@ "autoload": { "psr-4": { "Symfony\\Contracts\\Service\\": "" - } + }, + "exclude-from-classmap": [ + "/Test/" + ] }, "license": [ "MIT" @@ -5408,16 +5543,16 @@ }, { "name": "symfony/string", - "version": "v5.4.26", + "version": "v5.4.34", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "1181fe9270e373537475e826873b5867b863883c" + "reference": "e3f98bfc7885c957488f443df82d97814a3ce061" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/1181fe9270e373537475e826873b5867b863883c", - "reference": "1181fe9270e373537475e826873b5867b863883c" + "url": "https://api.github.com/repos/symfony/string/zipball/e3f98bfc7885c957488f443df82d97814a3ce061", + "reference": "e3f98bfc7885c957488f443df82d97814a3ce061" }, "require": { "php": ">=7.2.5", @@ -5446,16 +5581,16 @@ }, { "name": "symfony/var-dumper", - "version": "v6.3.3", + "version": "v6.4.2", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "77fb4f2927f6991a9843633925d111147449ee7a" + "reference": "68d6573ec98715ddcae5a0a85bee3c1c27a4c33f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/77fb4f2927f6991a9843633925d111147449ee7a", - "reference": "77fb4f2927f6991a9843633925d111147449ee7a" + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/68d6573ec98715ddcae5a0a85bee3c1c27a4c33f", + "reference": "68d6573ec98715ddcae5a0a85bee3c1c27a4c33f" }, "require": { "php": ">=8.1", @@ -5484,19 +5619,19 @@ }, { "name": "symfony/var-exporter", - "version": "v6.3.2", + "version": "v7.0.2", "source": { "type": "git", "url": "https://github.com/symfony/var-exporter.git", - "reference": "3400949782c0cb5b3e73aa64cfd71dde000beccc" + "reference": "345c62fefe92243c3a06fc0cc65f2ec1a47e0764" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-exporter/zipball/3400949782c0cb5b3e73aa64cfd71dde000beccc", - "reference": "3400949782c0cb5b3e73aa64cfd71dde000beccc" + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/345c62fefe92243c3a06fc0cc65f2ec1a47e0764", + "reference": "345c62fefe92243c3a06fc0cc65f2ec1a47e0764" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "type": "library", "autoload": { @@ -5514,16 +5649,16 @@ }, { "name": "tedivm/jshrink", - "version": "v1.6.8", + "version": "v1.7.0", "source": { "type": "git", "url": "https://github.com/tedious/JShrink.git", - "reference": "35a83e0ab661d6130da5930c0c4eafcc663b8cec" + "reference": "7a35f5a4651ca2ce77295eb8a3b4e133ba47e19e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/tedious/JShrink/zipball/35a83e0ab661d6130da5930c0c4eafcc663b8cec", - "reference": "35a83e0ab661d6130da5930c0c4eafcc663b8cec" + "url": "https://api.github.com/repos/tedious/JShrink/zipball/7a35f5a4651ca2ce77295eb8a3b4e133ba47e19e", + "reference": "7a35f5a4651ca2ce77295eb8a3b4e133ba47e19e" }, "require": { "php": "^7.0|^8.0" @@ -5569,21 +5704,24 @@ "description": "Tpay.com coding standards library" }, { - "name": "tpay-com/tpay-php", - "version": "2.3.4", + "name": "tpay-com/tpay-openapi-php", + "version": "1.6.4", "source": { "type": "git", - "url": "https://github.com/tpay-com/tpay-php.git", - "reference": "8a3c85e502d970ae86b679a1d64831f21e0d3e09" + "url": "https://github.com/tpay-com/tpay-openapi-php.git", + "reference": "0889e97646e9d3758cb01ebe99925c066519338e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/tpay-com/tpay-php/zipball/8a3c85e502d970ae86b679a1d64831f21e0d3e09", - "reference": "8a3c85e502d970ae86b679a1d64831f21e0d3e09" + "url": "https://api.github.com/repos/tpay-com/tpay-openapi-php/zipball/0889e97646e9d3758cb01ebe99925c066519338e", + "reference": "0889e97646e9d3758cb01ebe99925c066519338e" }, "require": { "ext-curl": "*", - "php": ">=5.6.0" + "ext-json": "*", + "php": ">=5.6.0", + "phpseclib/phpseclib": "^2 || ^3", + "psr/log": "^1 || ^2 || ^3" }, "type": "library", "extra": [ @@ -5592,14 +5730,56 @@ } ], "autoload": { + "psr-4": { + "Tpay\\OpenApi\\": "src/" + }, "classmap": [ - "tpayLibs/src/" + "src/legacy_classes.php" ] }, "license": [ - "LGPL-3.0" + "MIT" + ], + "description": "Tpay OpenAPI library" + }, + { + "name": "tpay-com/tpay-php", + "version": "2.4.3", + "source": { + "type": "git", + "url": "https://github.com/tpay-com/tpay-php.git", + "reference": "78132ec3a0e920044a6f171aadd02e04b4852764" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/tpay-com/tpay-php/zipball/78132ec3a0e920044a6f171aadd02e04b4852764", + "reference": "78132ec3a0e920044a6f171aadd02e04b4852764" + }, + "require": { + "ext-curl": "*", + "ext-json": "*", + "php": ">=5.6.0", + "phpseclib/phpseclib": "^2 || ^3", + "psr/log": "^1 || ^2 || ^3" + }, + "type": "library", + "extra": [ + { + "engine": "PHP SDK" + } + ], + "autoload": { + "files": [ + "src/legacy_classes.php" + ], + "psr-4": { + "Tpay\\OriginApi\\": "src/" + } + }, + "license": [ + "MIT" ], - "description": "tpay.com library" + "description": "Tpay.com library" }, { "name": "tubalmartin/cssmin", @@ -5634,16 +5814,16 @@ }, { "name": "vimeo/psalm", - "version": "5.15.0", + "version": "5.18.0", "source": { "type": "git", "url": "https://github.com/vimeo/psalm.git", - "reference": "5c774aca4746caf3d239d9c8cadb9f882ca29352" + "reference": "b113f3ed0259fd6e212d87c3df80eec95a6abf19" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vimeo/psalm/zipball/5c774aca4746caf3d239d9c8cadb9f882ca29352", - "reference": "5c774aca4746caf3d239d9c8cadb9f882ca29352" + "url": "https://api.github.com/repos/vimeo/psalm/zipball/b113f3ed0259fd6e212d87c3df80eec95a6abf19", + "reference": "b113f3ed0259fd6e212d87c3df80eec95a6abf19" }, "require": { "amphp/amp": "^2.4.2", @@ -5661,14 +5841,14 @@ "ext-tokenizer": "*", "felixfbecker/advanced-json-rpc": "^3.1", "felixfbecker/language-server-protocol": "^1.5.2", - "fidry/cpu-core-counter": "^0.4.1 || ^0.5.1", + "fidry/cpu-core-counter": "^0.4.1 || ^0.5.1 || ^1.0.0", "netresearch/jsonmapper": "^1.0 || ^2.0 || ^3.0 || ^4.0", "nikic/php-parser": "^4.16", "php": "^7.4 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0", "sebastian/diff": "^4.0 || ^5.0", "spatie/array-to-xml": "^2.17.0 || ^3.0", - "symfony/console": "^4.1.6 || ^5.0 || ^6.0", - "symfony/filesystem": "^5.4 || ^6.0" + "symfony/console": "^4.1.6 || ^5.0 || ^6.0 || ^7.0", + "symfony/filesystem": "^5.4 || ^6.0 || ^7.0" }, "provide": { "psalm/psalm": "self.version" @@ -5680,7 +5860,7 @@ "psalm-refactor", "psalter" ], - "type": "library", + "type": "project", "extra": { "branch-alias": { "dev-master": "5.x-dev", @@ -5702,24 +5882,24 @@ }, { "name": "web-token/jwt-framework", - "version": "3.2.8", + "version": "3.2.9", "source": { "type": "git", "url": "https://github.com/web-token/jwt-framework.git", - "reference": "bfceee5b742560dd861dcf690b12aa8fab3a8756" + "reference": "679ab72706fedc9ab72794ccc13133b5f7b58250" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/web-token/jwt-framework/zipball/bfceee5b742560dd861dcf690b12aa8fab3a8756", - "reference": "bfceee5b742560dd861dcf690b12aa8fab3a8756" + "url": "https://api.github.com/repos/web-token/jwt-framework/zipball/679ab72706fedc9ab72794ccc13133b5f7b58250", + "reference": "679ab72706fedc9ab72794ccc13133b5f7b58250" }, "require": { - "brick/math": "^0.9|^0.10|^0.11", + "brick/math": "^0.9|^0.10|^0.11|^0.12", "ext-json": "*", "ext-mbstring": "*", "ext-openssl": "*", "ext-sodium": "*", - "paragonie/constant_time_encoding": "^2.4", + "paragonie/constant_time_encoding": "^2.6", "php": ">=8.1", "psr/clock": "^1.0", "psr/event-dispatcher": "^1.0", @@ -5727,11 +5907,11 @@ "psr/http-factory": "^1.0", "spomky-labs/aes-key-wrap": "^7.0", "spomky-labs/pki-framework": "^1.0", - "symfony/config": "^5.4|^6.0", - "symfony/console": "^5.4|^6.0", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/event-dispatcher": "^5.4|^6.0", - "symfony/http-kernel": "^5.4|^6.0", + "symfony/config": "^5.4|^6.0|^7.0", + "symfony/console": "^5.4|^6.0|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/event-dispatcher": "^5.4|^6.0|^7.0", + "symfony/http-kernel": "^5.4|^6.0|^7.0", "symfony/polyfill-mbstring": "^1.12" }, "replace": { @@ -5892,16 +6072,16 @@ }, { "name": "webonyx/graphql-php", - "version": "v15.6.2", + "version": "v15.8.1", "source": { "type": "git", "url": "https://github.com/webonyx/graphql-php.git", - "reference": "0a917058620a197530b357c46d8d5943a054a37e" + "reference": "575ac95f13adfb38219a748572355385c101fdf7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webonyx/graphql-php/zipball/0a917058620a197530b357c46d8d5943a054a37e", - "reference": "0a917058620a197530b357c46d8d5943a054a37e" + "url": "https://api.github.com/repos/webonyx/graphql-php/zipball/575ac95f13adfb38219a748572355385c101fdf7", + "reference": "575ac95f13adfb38219a748572355385c101fdf7" }, "require": { "ext-json": "*", @@ -5961,5 +6141,5 @@ "prefer-lowest": false, "platform": [], "platform-dev": [], - "plugin-api-version": "2.3.0" + "plugin-api-version": "2.6.0" } diff --git a/.dev-tools/phpstan.neon b/.dev-tools/phpstan.neon index f168bc9..626faae 100644 --- a/.dev-tools/phpstan.neon +++ b/.dev-tools/phpstan.neon @@ -3,10 +3,4 @@ parameters: paths: - ../ excludePaths: - - ../Controller/tpay/Notification.php - ../vendor/ - ignoreErrors: - - '#^Call to an undefined method tpaycom\\magento2basic\\Controller\\Tpaycom::getFormatAmount\(\)\.$#' - - '# invalid type Magento\\Sales\\Model\\OrderFactory\.$#' - - '# invalid type tpaycom\\magento2basic\\Model\\TransactionModelFactory\.$#' - - '# return statement is missing\.$#' diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index fef52a9..a59eb6f 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -11,7 +11,6 @@ jobs: fail-fast: false matrix: include: - - php-version: '7.0' - php-version: '7.1' - php-version: '7.2' - php-version: '7.3' diff --git a/.github/workflows/sca.yaml b/.github/workflows/sca.yaml index d4ac436..2161e92 100644 --- a/.github/workflows/sca.yaml +++ b/.github/workflows/sca.yaml @@ -25,10 +25,10 @@ jobs: run: composer normalize --diff --dry-run --indent-size=4 --indent-style=space ../composer.json - working-directory: .dev-tools - run: ./vendor/bin/php-cs-fixer fix -vvv --diff --dry-run + run: composer cs:fixer -- --dry-run - working-directory: .dev-tools - run: ./vendor/bin/phpstan + run: composer cs:phpstan - working-directory: .dev-tools - run: ./vendor/bin/psalm --no-progress --shepherd + run: composer cs:psalm -- --no-progress --shepherd diff --git a/Api/Sales/OrderRepositoryInterface.php b/Api/Sales/OrderRepositoryInterface.php index c9ef6e3..cda6705 100644 --- a/Api/Sales/OrderRepositoryInterface.php +++ b/Api/Sales/OrderRepositoryInterface.php @@ -1,17 +1,13 @@ _customerSession = $customerSession; - $this->_checkoutSession = $checkoutSession; - $this->_orderFactory = $orderFactory; - $this->_model = $model; - $this->localeResolver = $localeResolver; - $this->objectManager = \Magento\Framework\App\ObjectManager::getInstance(); - parent::__construct($context); - - $this->_model->setCustomerID($this->_customerSession->getCustomerId()); - } - - protected function getDotAmount() - { - return $this->getFormatAmount($this->_checkoutSession->getLastRealOrder()->getGrandTotal()); - } -} diff --git a/Controller/tpay/CardPayment.php b/Controller/tpay/CardPayment.php new file mode 100644 index 0000000..db7d38b --- /dev/null +++ b/Controller/tpay/CardPayment.php @@ -0,0 +1,69 @@ +tpay = $tpayModel; + $this->tpayService = $tpayService; + $this->checkoutSession = $checkoutSession; + $this->tokensService = new TpayTokensService($modelContext, $registry, $resourceConnection); + $this->storeManager = $storeManager; + Util::$loggingEnabled = false; + parent::__construct($context); + } + + public function execute() + { + /** @var int $orderId */ + $orderId = $this->checkoutSession->getLastRealOrderId(); + + if ($orderId) { + $payment = $this->tpayService->getPayment($orderId); + $additionalPaymentInformation = $payment->getData()['additional_information']; + + if (!$additionalPaymentInformation[Tpay::TERMS_ACCEPT]) { + return $this->_redirect('magento2basic/tpay/error'); + } + + $cardTransaction = new CardApiFacade($this->tpay, $this->tokensService, $this->tpayService, $this->storeManager); + $redirectUrl = $cardTransaction->makeCardTransaction($orderId); + + return $this->_redirect($redirectUrl); + } + $this->checkoutSession->unsQuoteId(); + + return $this->_redirect('magento2basic/tpay/error'); + } +} diff --git a/Controller/tpay/Create.php b/Controller/tpay/Create.php index 434772f..c9320e3 100644 --- a/Controller/tpay/Create.php +++ b/Controller/tpay/Create.php @@ -5,12 +5,14 @@ use Magento\Checkout\Model\Session; use Magento\Framework\App\Action\Action; use Magento\Framework\App\Action\Context; -use Magento\Framework\DataObject; +use Magento\Framework\App\CacheInterface; +use Magento\Framework\App\ResponseInterface; +use Tpay\OriginApi\Utilities\Util; use tpaycom\magento2basic\Api\TpayInterface; -use tpaycom\magento2basic\Model\TransactionModel; -use tpaycom\magento2basic\Model\TransactionModelFactory; +use tpaycom\magento2basic\Model\ApiFacade\Transaction\TransactionApiFacade; +use tpaycom\magento2basic\Model\ApiFacade\Transaction\TransactionOriginApi; +use tpaycom\magento2basic\Model\Tpay; use tpaycom\magento2basic\Service\TpayService; -use tpayLibs\src\_class_tpay\Utilities\Util; class Create extends Action { @@ -23,77 +25,79 @@ class Create extends Action /** @var TpayInterface */ private $tpay; - /** @var TransactionModel */ + /** @var TransactionApiFacade */ private $transaction; - /** @var TransactionModelFactory */ - private $transactionFactory; + /** @var CacheInterface */ + private $cache; public function __construct( Context $context, TpayInterface $tpayModel, - TransactionModelFactory $transactionModelFactory, TpayService $tpayService, - Session $checkoutSession + Session $checkoutSession, + CacheInterface $cache ) { $this->tpay = $tpayModel; - $this->transactionFactory = $transactionModelFactory; $this->tpayService = $tpayService; $this->checkoutSession = $checkoutSession; + $this->cache = $cache; Util::$loggingEnabled = false; parent::__construct($context); } - public function execute() + public function execute(): ResponseInterface { - /** @var int $orderId */ $orderId = $this->checkoutSession->getLastRealOrderId(); if ($orderId) { - /** @var DataObject $payment */ $payment = $this->tpayService->getPayment($orderId); - - /** @var array $paymentData */ $paymentData = $payment->getData(); - - $this->transaction = $this->transactionFactory->create( - [ - 'apiPassword' => $this->tpay->getApiPassword(), - 'apiKey' => $this->tpay->getApiKey(), - 'merchantId' => $this->tpay->getMerchantId(), - 'merchantSecret' => $this->tpay->getSecurityCode(), - ] - ); + $this->transaction = new TransactionApiFacade($this->tpay, $this->cache); $additionalPaymentInformation = $paymentData['additional_information']; - /** @var array $transaction */ + if (!$additionalPaymentInformation[Tpay::TERMS_ACCEPT]) { + return $this->_redirect('magento2basic/tpay/error'); + } + $transaction = $this->prepareTransaction($orderId, $additionalPaymentInformation); if (!isset($transaction['title'], $transaction['url'])) { return $this->_redirect('magento2basic/tpay/error'); } + + $this->handleOpenApiTrId($paymentData, $transaction); + $this->tpayService->addCommentToHistory($orderId, 'Transaction title '.$transaction['title']); $transactionUrl = $transaction['url']; + if (true === $this->tpay->redirectToChannel()) { $transactionUrl = str_replace('gtitle', 'title', $transactionUrl); } + $this->tpayService->addCommentToHistory($orderId, 'Transaction link '.$transactionUrl); $paymentData['additional_information']['transaction_url'] = $transactionUrl; $payment->setData($paymentData)->save(); - if (6 === strlen($additionalPaymentInformation['blik_code']) - && $this->tpay->checkBlikLevel0Settings() - ) { + if (6 === strlen($additionalPaymentInformation['blik_code'] ?? '') && $this->tpay->checkBlikLevel0Settings()) { + if (true === $this->transaction->isOpenApiUse()) { + if (isset($transaction['payments']['errors']) && count($transaction['payments']['errors']) > 0) { + return $this->_redirect('magento2basic/tpay/error'); + } + + return $this->_redirect('magento2basic/tpay/success'); + } $result = $this->blikPay($transaction['title'], $additionalPaymentInformation['blik_code']); $this->checkoutSession->unsQuoteId(); + if (!$result) { $this->tpayService->addCommentToHistory( $orderId, 'User has typed wrong blik code and has been redirected to transaction panel in order to finish payment' ); - return $this->_redirect($transactionUrl); + return $this->_redirect('magento2basic/tpay/error'); } return $this->_redirect('magento2basic/tpay/success'); @@ -101,6 +105,8 @@ public function execute() return $this->_redirect($transactionUrl); } + + return $this->_redirect('magento2basic/tpay/error'); } /** @@ -108,30 +114,59 @@ public function execute() * * @param string $blikTransactionId * @param string $blikCode - * - * @return bool */ - protected function blikPay($blikTransactionId, $blikCode) + protected function blikPay($blikTransactionId, $blikCode): bool { - /** @var array $apiResult */ $apiResult = $this->transaction->blik($blikTransactionId, $blikCode); return isset($apiResult['result']) && 1 === $apiResult['result']; } - /** - * @param mixed $orderId - * @param array{blik_code: string, group: int|string} $additionalPaymentInformation - */ private function prepareTransaction($orderId, array $additionalPaymentInformation) { $data = $this->tpay->getTpayFormData($orderId); - if (6 === strlen($additionalPaymentInformation['blik_code'])) { - $data['group'] = TransactionModel::BLIK_CHANNEL; + + if (6 === strlen($additionalPaymentInformation['blik_code'] ?? '')) { + $data['group'] = TransactionOriginApi::BLIK_CHANNEL; + $data['channel'] = null; + $this->handleBlikData($data, $additionalPaymentInformation['blik_code']); } else { - $data['group'] = (int) $additionalPaymentInformation['group']; + $data['group'] = (int) ($additionalPaymentInformation['group'] ?? null); + $data['channel'] = (int) ($additionalPaymentInformation['channel'] ?? null); + + if ($this->tpay->redirectToChannel()) { + $data['direct'] = 1; + } + } + + $data = $this->transaction->originApiFieldCorrect($data); + $data = $this->transaction->translateGroupToChannel($data, $this->tpay->redirectToChannel()); + + if (isset($data['channel']) && $data['channel']) { + return $this->transaction->createWithInstantRedirection($data); } return $this->transaction->create($data); } + + private function handleBlikData(array &$data, string $blikCode) + { + if ($this->transaction->isOpenApiUse() && $this->tpay->checkBlikLevel0Settings()) { + $data['blikPaymentData'] = [ + 'blikToken' => $blikCode, + ]; + } + if (!$this->transaction->isOpenApiUse()) { + unset($data['channel']); + unset($data['currency']); + unset($data['language']); + } + } + + private function handleOpenApiTrId(array &$paymentData, array $transaction) + { + if (isset($transaction['transactionId'])) { + $paymentData['additional_information']['transaction_id'] = $transaction['transactionId']; + } + } } diff --git a/Controller/tpay/Error.php b/Controller/tpay/Error.php index 1772aad..e7dd0c1 100644 --- a/Controller/tpay/Error.php +++ b/Controller/tpay/Error.php @@ -1,5 +1,7 @@ tpay = $tpayModel; $this->remoteAddress = $remoteAddress; - $this->notificationFactory = $notificationModelFactory; $this->tpayService = $tpayService; + $this->tokensService = $tokensService; + $this->storeManager = $storeManager; Util::$loggingEnabled = false; parent::__construct($context); } - /** @return bool */ public function execute() { - try { - $id = $this->tpay->getMerchantId(); - $code = $this->tpay->getSecurityCode(); - $checkServer = $this->tpay->getCheckTpayIP(); - $checkProxy = $this->tpay->getCheckProxy(); - $forwardedIP = null; - $this->NotificationHandler = $this->notificationFactory->create( - [ - 'merchantId' => $id, - 'merchantSecret' => $code, - ] - ); - if (false === $checkServer) { - $this->NotificationHandler->disableValidationServerIP(); - } - if (true === $checkProxy) { - $this->NotificationHandler->enableForwardedIPValidation(); - } - - /** @var array $validParams */ - $validParams = $this->NotificationHandler->checkPayment(''); - - $orderId = base64_decode($validParams['tr_crc']); - if ('PAID' === $validParams['tr_status']) { - $response = $this->getPaidTransactionResponse($orderId); - - return $this - ->getResponse() - ->setStatusCode(Http::STATUS_CODE_200) - ->setContent($response); - } - $this->tpayService->SetOrderStatus($orderId, $validParams, $this->tpay); - - return $this - ->getResponse() - ->setStatusCode(Http::STATUS_CODE_200) - ->setContent('TRUE'); - } catch (Exception $e) { - return false; - } + return $this->getNotification(); } /** * Create exception in case CSRF validation failed. * Return null if default exception will suffice. - * - * @return null|InvalidRequestException */ - public function createCsrfValidationException(RequestInterface $request) {} + public function createCsrfValidationException(RequestInterface $request): ?InvalidRequestException + { + return null; + } /** * Perform custom request validation. * Return null if default validation is needed. - * - * @return null|bool */ - public function validateForCsrf(RequestInterface $request) + public function validateForCsrf(RequestInterface $request): ?bool { return true; } @@ -122,22 +78,78 @@ public function validateForCsrf(RequestInterface $request) /** * Check if the order has been canceled and get response to Tpay server. * - * @param int $orderId - * * @throws Exception * * @return string response for Tpay server */ - protected function getPaidTransactionResponse($orderId) + protected function getPaidTransactionResponse(string $orderId): string { $order = $this->tpayService->getOrderById($orderId); + if (!$order->getId()) { - throw new Exception('Unable to get order by orderId %s', $orderId); + throw new Exception(sprintf('Unable to get order by orderId %s', $orderId)); } + if (Order::STATE_CANCELED === $order->getState()) { return 'FALSE'; } return 'TRUE'; } + + private function saveCard(array $notification, string $orderId) + { + $order = $this->tpayService->getOrderById($orderId); + + if (isset($notification['card_token']) && !$this->tpay->isCustomerGuest($orderId)) { + $token = $this->tokensService->getWithoutAuthCustomerTokens((int) $order->getCustomerId(), $notification['tr_crc']); + if (!empty($token)) { + $this->tokensService->updateTokenById((int) $token['tokenId'], $notification['card_token']); + } + } + } + + private function getNotification() + { + $returnData = null; + foreach ($this->storeManager->getStores() as $store) { + [$returnData, $isPassed] = $this->extractNotification($store); + if ($isPassed) { + break; + } + } + + return $returnData; + } + + private function extractNotification(StoreInterface $store): array + { + $storeId = (int) $store->getStoreId(); + try { + $notification = (new JWSVerifiedPaymentNotification($this->tpay->getSecurityCode($storeId), !$this->tpay->useSandboxMode($storeId)))->getNotification(); + $notification = $notification->getNotificationAssociative(); + $orderId = base64_decode($notification['tr_crc']); + + if ('PAID' === $notification['tr_status']) { + $response = $this->getPaidTransactionResponse($orderId); + + $returnData = $this->getResponse()->setStatusCode(Http::STATUS_CODE_200)->setContent($response); + + return [$returnData, true]; + } + + $this->saveCard($notification, $orderId); + $this->tpayService->SetOrderStatus($orderId, $notification, $this->tpay); + + $returnData = $this->getResponse()->setStatusCode(Http::STATUS_CODE_200)->setContent('TRUE'); + $isPassed = true; + } catch (Exception $e) { + Util::log('Notification exception', "{$e->getMessage()} in file {$e->getFile()} line: {$e->getLine()} \n\n {$e->getTraceAsString()}"); + + $returnData = $this->getResponse()->setStatusCode(Http::STATUS_CODE_500)->setContent('FALSE'); + $isPassed = false; + } + + return [$returnData, $isPassed]; + } } diff --git a/Controller/tpay/Redirect.php b/Controller/tpay/Redirect.php index c7576bc..b48d08a 100644 --- a/Controller/tpay/Redirect.php +++ b/Controller/tpay/Redirect.php @@ -1,10 +1,13 @@ tpayService = $tpayService; $this->checkoutSession = $checkoutSession; @@ -28,25 +28,22 @@ public function __construct( public function execute() { - /** @var string $uid */ $uid = $this->getRequest()->getParam('uid'); - - /** @var int $orderId */ $orderId = $this->checkoutSession->getLastRealOrderId(); if (!$orderId || !$uid) { return $this->_redirect('checkout/cart'); } - $payment = $this->tpayService->getPayment($orderId); - /** @var array $paymentData */ + $payment = $this->tpayService->getPayment($orderId); $paymentData = $payment->getData(); - $additionalPaymentInfo = $paymentData['additional_information']; - if ( - (!isset($additionalPaymentInfo['group']) || (int) $additionalPaymentInfo['group'] < 1) - && (!isset($additionalPaymentInfo['blik_code']) || 6 !== strlen($additionalPaymentInfo['blik_code'])) - ) { + + if (!empty($additionalPaymentInfo[TpayInterface::CARDDATA]) || !empty($additionalPaymentInfo[TpayInterface::CARD_ID])) { + return $this->_redirect('magento2basic/tpay/CardPayment'); + } + + if (empty(array_intersect(array_keys($additionalPaymentInfo), [TpayInterface::GROUP, TpayInterface::CHANNEL])) && (!array_key_exists(TpayInterface::BLIK_CODE, $additionalPaymentInfo) || 6 !== strlen($additionalPaymentInfo[TpayInterface::BLIK_CODE]))) { return $this->_redirect('checkout/cart'); } $this->tpayService->setOrderStatePendingPayment($orderId, true); diff --git a/Controller/tpay/Refund.php b/Controller/tpay/Refund.php deleted file mode 100644 index dac8236..0000000 --- a/Controller/tpay/Refund.php +++ /dev/null @@ -1,96 +0,0 @@ -apiPassword, $this->apiKey, $this->merchantId, $this->merchantSecret); - - /** @var array{result?: string, err?: int} $apiResult */ - $apiResult = $RefundModel - ->setTransactionID($payment->getParentTransactionId()) - ->refundAny(number_format($amount, 2)); - - if (isset($apiResult['result']) && 1 === (int) $apiResult['result']) { - return true; - } - $errCode = isset($apiResult['err']) ? ' error code: '.$apiResult['err'] : ''; - throw new Exception(__('Payment refunding error. -'.$errCode)); - } - - /** - * @param string $merchantSecret - * - * @return self - */ - public function setMerchantSecret($merchantSecret) - { - $this->merchantSecret = $merchantSecret; - - return $this; - } - - /** - * @param int $merchantId - * - * @return self - */ - public function setMerchantId($merchantId) - { - $this->merchantId = $merchantId; - - return $this; - } - - /** - * @param string $apiPassword - * - * @return self - */ - public function setApiPassword($apiPassword) - { - $this->apiPassword = $apiPassword; - - return $this; - } - - /** - * @param string $apiKey - * - * @return self - */ - public function setApiKey($apiKey) - { - $this->apiKey = $apiKey; - - return $this; - } -} diff --git a/Controller/tpay/Success.php b/Controller/tpay/Success.php index eeb9673..85ff48d 100644 --- a/Controller/tpay/Success.php +++ b/Controller/tpay/Success.php @@ -1,5 +1,7 @@ storeManager = $storeManager; + $this->createCardOriginApiInstance($tpay, $tokensService, $tpayService); + $this->createOpenApiInstance($tpay, $tokensService, $tpayService); + } + + public function makeCardTransaction(string $orderId): string + { + return $this->getCurrent()->makeCardTransaction($orderId); + } + + private function getCurrent() + { + return $this->useOpenCard ? $this->cardOpen : $this->cardOrigin; + } + + private function createCardOriginApiInstance(TpayInterface $tpay, TpayTokensService $tokensService, TpayService $tpayService) + { + if (!$tpay->isOriginApiEnabled()) { + $this->cardOrigin = null; + + return; + } + + try { + $this->cardOrigin = new CardOrigin($tpay, $tokensService, $tpayService); + } catch (Exception $exception) { + $this->cardOrigin = null; + } + } + + private function createOpenApiInstance(TpayInterface $tpay, TpayTokensService $tokensService, TpayService $tpayService) + { + if ('PLN' !== $this->storeManager->getStore()->getCurrentCurrencyCode() || !$tpay->isOpenApiEnabled()) { + $this->cardOpen = null; + $this->useOpenCard = false; + + return; + } + + try { + $this->cardOpen = new CardOpen($tpay, $tokensService, $tpayService); + $this->useOpenCard = true; + } catch (Exception $exception) { + $this->cardOpen = null; + $this->useOpenCard = false; + } + } +} diff --git a/Model/ApiFacade/CardTransaction/CardOpen.php b/Model/ApiFacade/CardTransaction/CardOpen.php new file mode 100755 index 0000000..ebb2113 --- /dev/null +++ b/Model/ApiFacade/CardTransaction/CardOpen.php @@ -0,0 +1,219 @@ +tpay = $tpay; + $this->tokensService = $tokensService; + $this->tpayService = $tpayService; + $this->tpayApi = new TpayApi($tpay->getOpenApiClientId(), $tpay->getOpenApiPassword(), !$tpay->useSandboxMode()); + $versions = $this->getPackagesVersions(); + $this->tpayApi->authorization()->setClientName(implode( + '|', + [ + 'magento2:'.$this->getMagentoVersion(), + 'tpay-com/tpay-openapi-php:'.$versions[0], + 'tpay-com/tpay-php:'.$versions[1], + 'PHP:'.phpversion(), + ] + )); + } + + public function makeCardTransaction(string $orderId): string + { + $payment = $this->tpayService->getPayment($orderId); + $paymentData = $payment->getData(); + + $this->tpayService->setOrderStatePendingPayment($orderId, false); + $additionalPaymentInformation = $paymentData['additional_information']; + + $this->tpayPaymentConfig = $this->tpay->getTpayFormData($orderId); + + if (isset($additionalPaymentInformation['card_id']) && false !== $additionalPaymentInformation['card_id'] && $this->tpay->getCardSaveEnabled()) { + $cardId = (int) $additionalPaymentInformation['card_id']; + + return $this->processSavedCardPayment($orderId, $cardId); + } + + return $this->processNewCardPayment($orderId, $additionalPaymentInformation); + } + + private function processSavedCardPayment(string $orderId, int $cardId): string + { + $customerToken = $this->tokensService->getTokenById($cardId, $this->tpay->getCustomerId($orderId)); + + if ($customerToken) { + try { + $transaction = $this->tpayApi->Transactions->createTransaction($this->handleDataStructure()); + + $request = [ + 'groupId' => 103, + 'cardPaymentData' => [ + 'token' => $customerToken['cli_auth'], + ], + 'method' => 'sale', + ]; + + $result = $this->tpayApi->Transactions->createPaymentByTransactionId($request, $transaction['transactionId']); + + if ('success' === $result['result'] && isset($result['payments']['status']) && 'correct' === $result['payments']['status']) { + $this->tpayService->setCardOrderStatus($orderId, $this->handleValidParams($result), $this->tpay); + $this->tpayService->addCommentToHistory($orderId, 'Successful payment by saved card'); + + return 'magento2basic/tpay/success'; + } + + $paymentResult = $result['payments'] ?? []; + + if (isset($paymentResult['status']) && 'declined' === $paymentResult['status']) { + $this->tpayService->addCommentToHistory($orderId, 'Failed to pay by saved card, Elavon rejection code: '.$paymentResult['reason']); + } else { + $this->tpayService->addCommentToHistory($orderId, 'Failed to pay by saved card, error: '.$paymentResult['err_desc']); + } + } catch (Exception $e) { + return 'magento2basic/tpay/error'; + } + } else { + $this->tpayService->addCommentToHistory($orderId, 'Attempt of payment by not owned card has been blocked!'); + } + + return 'magento2basic/tpay/error'; + } + + private function addToPaymentData(string $orderId, string $key, $value) + { + $payment = $this->tpayService->getPayment($orderId); + $paymentData = $payment->getData(); + $paymentData['additional_information'][$key] = $value; + $payment->setData($paymentData)->save(); + } + + private function processNewCardPayment(string $orderId, array $additionalPaymentInformation): string + { + $saveCard = isset($additionalPaymentInformation['card_save']) && $this->tpay->getCardSaveEnabled() ? (bool) $additionalPaymentInformation['card_save'] : false; + try { + $transaction = $this->tpayApi->Transactions->createTransaction($this->handleDataStructure()); + $request = [ + 'groupId' => 103, + 'cardPaymentData' => [ + 'card' => $additionalPaymentInformation['card_data'], + 'save' => $saveCard, + ], + 'method' => 'pay_by_link', + ]; + $result = $this->tpayApi->Transactions->createPaymentByTransactionId($request, $transaction['transactionId']); + $this->tpayService->setCardOrderStatus($orderId, $this->handleValidParams($result), $this->tpay); + } catch (Exception $e) { + return 'magento2basic/tpay/error'; + } + + if (isset($result['transactionPaymentUrl']) && 'pending' === $result['payments']['status']) { + $url3ds = $result['transactionPaymentUrl']; + $this->tpayService->addCommentToHistory($orderId, '3DS Transaction link '.$url3ds); + $this->addToPaymentData($orderId, 'transaction_url', $url3ds); + $this->saveCard($orderId, $saveCard, $additionalPaymentInformation); + + return $url3ds; + } + + return 'magento2basic/tpay/error'; + } + + private function saveCard(string $orderId, bool $saveCard, array $additionalPaymentInformation) + { + if ($saveCard && !$this->tpay->isCustomerGuest($orderId)) { + $this->tokensService->setCustomerToken( + $this->tpay->getCustomerId($orderId), + null, + $additionalPaymentInformation[TpayInterface::SHORT_CODE], + $additionalPaymentInformation[TpayInterface::CARD_VENDOR], + $this->tpayPaymentConfig['crc'] + ); + } + } + + private function handleDataStructure(): array + { + return [ + 'amount' => (float) $this->tpayPaymentConfig['amount'], + 'description' => $this->tpayPaymentConfig['description'], + 'hiddenDescription' => $this->tpayPaymentConfig['crc'], + 'payer' => [ + 'email' => $this->tpayPaymentConfig['email'], + 'name' => $this->tpayPaymentConfig['name'], + 'phone' => $this->tpayPaymentConfig['phone'], + 'address' => $this->tpayPaymentConfig['address'], + 'code' => $this->tpayPaymentConfig['zip'], + 'city' => $this->tpayPaymentConfig['city'], + 'country' => $this->tpayPaymentConfig['country'], + ], + 'lang' => 'pl', + 'pay' => [ + 'groupId' => 103, + ], + 'callbacks' => [ + 'notification' => [ + 'url' => $this->tpayPaymentConfig['result_url'], + ], + 'payerUrls' => [ + 'success' => $this->tpayPaymentConfig['return_url'], + 'error' => $this->tpayPaymentConfig['return_error_url'], + ], + ], + ]; + } + + private function handleValidParams(array $response): array + { + $response['status'] = $response['payments']['status']; + $response['sale_auth'] = $response['transactionId']; + + return $response; + } + + private function getMagentoVersion() + { + $objectManager = \Magento\Framework\App\ObjectManager::getInstance(); + $productMetadata = $objectManager->get('\Magento\Framework\App\ProductMetadataInterface'); + + return $productMetadata->getVersion(); + } + + private function getPackagesVersions() + { + $dir = __DIR__.'/../../composer.json'; + if (file_exists($dir)) { + $composerJson = json_decode( + file_get_contents(__DIR__.'/../../composer.json'), + true + )['require'] ?? []; + + return [$composerJson['tpay-com/tpay-openapi-php'], $composerJson['tpay-com/tpay-php']]; + } + + return ['n/a', 'n/a']; + } +} diff --git a/Model/ApiFacade/CardTransaction/CardOrigin.php b/Model/ApiFacade/CardTransaction/CardOrigin.php new file mode 100755 index 0000000..6ac9ea4 --- /dev/null +++ b/Model/ApiFacade/CardTransaction/CardOrigin.php @@ -0,0 +1,206 @@ +tpay = $tpay; + $this->tokensService = $tokensService; + $this->tpayService = $tpayService; + $this->cardApiKey = $tpay->getCardApiKey(); + $this->cardApiPass = $tpay->getCardApiPassword(); + $this->cardVerificationCode = $tpay->getVerificationCode(); + $this->cardKeyRSA = $tpay->getRSAKey(); + $this->cardHashAlg = $tpay->getHashType(); + parent::__construct(); + } + + public function makeCardTransaction(string $orderId): string + { + $payment = $this->tpayService->getPayment($orderId); + $paymentData = $payment->getData(); + + $this->tpayService->setOrderStatePendingPayment($orderId, false); + $additionalPaymentInformation = $paymentData['additional_information']; + + $this->tpayPaymentConfig = $this->tpay->getTpayFormData($orderId); + + $this + ->setEnablePowUrl(true) + ->setReturnUrls($this->tpayPaymentConfig['return_url'], $this->tpayPaymentConfig['return_error_url']) + ->setAmount($this->tpayPaymentConfig['amount']) + ->setCurrency($this->tpayPaymentConfig['currency']) + ->setLanguage(strtolower($this->tpayPaymentConfig['language'])) + ->setOrderID($this->tpayPaymentConfig['crc']) + ->setModuleName($this->tpayPaymentConfig['module']); + + if (isset($additionalPaymentInformation['card_id']) && false !== $additionalPaymentInformation['card_id'] && $this->tpay->getCardSaveEnabled()) { + $cardId = (int) $additionalPaymentInformation['card_id']; + + return $this->processSavedCardPayment($orderId, $cardId); + } + + return $this->processNewCardPayment($orderId, $additionalPaymentInformation); + } + + private function processSavedCardPayment(string $orderId, string $cardId): string + { + $customerTokens = $this->tokensService->getCustomerTokens($this->tpay->getCustomerId($orderId)); + + $isValid = false; + $token = ''; + foreach ($customerTokens as $key => $value) { + if ((int) $value['tokenId'] === $cardId) { + $isValid = true; + $token = $value['token']; + } + } + if ($isValid) { + try { + $paymentResult = $this->presale($this->tpayPaymentConfig['description'], $token); + + if (isset($paymentResult['sale_auth'])) { + $paymentResult = $this->sale($paymentResult['sale_auth'], $token); + } + + if (1 === (int) $paymentResult['result'] && isset($paymentResult['status']) && 'correct' === $paymentResult['status']) { + $this->tpayService->setOrderStatus($orderId, $paymentResult, $this->tpay); + $this->tpayService->addCommentToHistory($orderId, 'Successful payment by saved card'); + + return 'magento2basic/tpay/success'; + } + + if (isset($paymentResult['status']) && 'declined' === $paymentResult['status']) { + $this->tpayService->addCommentToHistory( + $orderId, + 'Failed to pay by saved card, Elavon rejection code: '.$paymentResult['reason'] + ); + } else { + $this->tpayService->addCommentToHistory( + $orderId, + 'Failed to pay by saved card, error: '.$paymentResult['err_desc'] + ); + } + } catch (Exception $e) { + return $this->trySaleAgain($orderId); + } + } + if (!$isValid) { + $this->tpayService->addCommentToHistory($orderId, 'Attempt of payment by not owned card has been blocked!'); + } + + return $this->trySaleAgain($orderId); + } + + private function trySaleAgain(string $orderId): string + { + $this->setCardData(null); + $result = $this->registerSale($this->tpayPaymentConfig['name'], $this->tpayPaymentConfig['email'], $this->tpayPaymentConfig['description']); + + if (isset($result['sale_auth'])) { + $url = 'https://secure.tpay.com/cards?sale_auth='.$result['sale_auth']; + $this->tpayService->addCommentToHistory($orderId, 'Customer has been redirected to tpay.com transaction panel. Transaction link '.$url); + $this->addToPaymentData($orderId, 'transaction_url', $url); + + return $url; + } + + return 'magento2basic/tpay/success'; + } + + private function addToPaymentData(string $orderId, string $key, $value) + { + $payment = $this->tpayService->getPayment($orderId); + $paymentData = $payment->getData(); + $paymentData['additional_information'][$key] = $value; + $payment->setData($paymentData)->save(); + } + + private function processNewCardPayment(string $orderId, array $additionalPaymentInformation): string + { + $saveCard = isset($additionalPaymentInformation['card_save']) && $this->tpay->getCardSaveEnabled() ? (bool) $additionalPaymentInformation['card_save'] : false; + if (true === $saveCard) { + $this->setOneTimer(false); + } + try { + $result = $this->createNewCardPayment($additionalPaymentInformation); + } catch (Exception $e) { + return $this->trySaleAgain($orderId); + } + if (isset($result['3ds_url'])) { + $url3ds = $result['3ds_url']; + $this->tpayService->addCommentToHistory($orderId, '3DS Transaction link '.$url3ds); + $this->addToPaymentData($orderId, 'transaction_url', $url3ds); + + return $url3ds; + } + if (isset($result['status']) && 'correct' === $result['status']) { + $this->validateNon3dsSign($result); + $this->tpayService->setCardOrderStatus($orderId, $result, $this->tpay); + } + + if (isset($result['cli_auth'], $result['card']) && !$this->tpay->isCustomerGuest($orderId)) { + $this->tokensService + ->setCustomerToken( + $this->tpay->getCustomerId($orderId), + $result['cli_auth'], + $result['card'], + $additionalPaymentInformation['card_vendor'] + ); + } + + return 1 === (int) $result['result'] && isset($result['status']) && 'correct' === $result['status'] ? 'magento2basic/tpay/success' : $this->trySaleAgain($orderId); + } + + private function createNewCardPayment(array $additionalPaymentInformation): array + { + $cardData = str_replace(' ', '+', $additionalPaymentInformation['card_data']); + + return $this->registerSale( + $this->tpayPaymentConfig['name'], + $this->tpayPaymentConfig['email'], + $this->tpayPaymentConfig['description'], + $cardData + ); + } + + private function validateNon3dsSign(array $tpayResponse) + { + $testMode = isset($tpayResponse['test_mode']) ? '1' : ''; + $cliAuth = $tpayResponse['cli_auth'] ?? ''; + $localHash = hash( + $this->tpay->getHashType(), + $testMode + .$tpayResponse['sale_auth'] + .$cliAuth + .$tpayResponse['card'] + .$this->tpayPaymentConfig['currency'] + .$this->tpayPaymentConfig['amount'] + .$tpayResponse['date'] + .$tpayResponse['status'] + .$this->tpay->getVerificationCode() + ); + if ($tpayResponse['sign'] !== $localHash) { + throw new Exception('Card payment - invalid checksum'); + } + } +} diff --git a/Model/ApiFacade/OpenApi.php b/Model/ApiFacade/OpenApi.php new file mode 100755 index 0000000..72d94ff --- /dev/null +++ b/Model/ApiFacade/OpenApi.php @@ -0,0 +1,210 @@ +tpayApi = new TpayApi($tpay->getOpenApiClientId(), $tpay->getOpenApiPassword(), !$tpay->useSandboxMode()); + $this->tpayApi->authorization(); + $versions = $this->getPackagesVersions(); + $this->tpayApi->authorization()->setClientName(implode( + '|', + [ + 'magento2:'.$this->getMagentoVersion(), + 'tpay-com/tpay-openapi-php:'.$versions[0], + 'tpay-com/tpay-php:'.$versions[1], + 'PHP:'.phpversion(), + ] + )); + } + + public function create(array $data): array + { + if (!empty($data['blikPaymentData'])) { + return $this->createBlikZero($data); + } + + $transactionData = $this->handleDataStructure($data); + $transaction = $this->tpayApi->transactions()->createTransaction($transactionData); + + return $this->updateRedirectUrl($transaction); + } + + public function createWithInstantRedirect(array $data): array + { + $transactionData = $this->handleDataStructure($data); + $transaction = $this->tpayApi->transactions()->createTransactionWithInstantRedirection($transactionData); + + return $this->updateRedirectUrl($transaction); + } + + public function createBlikZero(array $data): array + { + $transactionData = $this->handleDataStructure($data); + unset($transactionData['pay']); + + $transaction = $this->tpayApi->transactions()->createTransactionWithInstantRedirection($transactionData); + + $additional_payment_data = [ + 'channelId' => 64, + 'method' => 'pay_by_link', + 'blikPaymentData' => [ + 'type' => 0, + 'blikToken' => $data['blikPaymentData']['blikToken'], + ], + ]; + + $result = $this->tpayApi->transactions()->createInstantPaymentByTransactionId($additional_payment_data, $transaction['transactionId']); + + return $this->updateRedirectUrl($this->waitForBlikAccept($result)); + } + + public function makeRefund(InfoInterface $payment, float $amount): array + { + return $this->tpayApi->transactions()->createRefundByTransactionId( + ['amount' => $amount], + $payment->getAdditionalInformation('transaction_id') + ); + } + + public function channels(): array + { + $result = $this->tpayApi->transactions()->getChannels(); + $channels = []; + + foreach ($result['channels'] ?? [] as $channel) { + $channels[$channel['id']] = new Channel( + $channel['id'], + $channel['name'], + $channel['fullName'], + $channel['image']['url'], + $channel['available'], + $channel['onlinePayment'], + $channel['instantRedirection'], + $channel['groups'], + $channel['constraints'] + ); + } + + return $channels; + } + + private function handleDataStructure(array $data): array + { + $paymentData = [ + 'amount' => $data['amount'], + 'description' => $data['description'], + 'hiddenDescription' => $data['crc'], + 'payer' => [ + 'email' => $data['email'], + 'name' => $data['name'], + 'phone' => $data['phone'], + 'address' => $data['address'], + 'code' => $data['zip'], + 'city' => $data['city'], + 'country' => $data['country'], + ], + 'callbacks' => [ + 'payerUrls' => [ + 'success' => $data['return_url'], + 'error' => $data['return_error_url'], + ], + 'notification' => ['url' => $data['result_url']], + ], + ]; + + if ($data['group']) { + $paymentData['pay']['groupId'] = $data['group']; + } + + if ($data['channel']) { + $paymentData['pay']['channelId'] = $data['channel']; + } + + return $paymentData; + } + + private function updateRedirectUrl(array $transactionData): array + { + $blik0Url = null; + if (!isset($transactionData['transactionPaymentUrl']) && 'success' === $transactionData['result']) { + $blik0Url = 'blik0url'; + } + $transactionData['url'] = $transactionData['transactionPaymentUrl'] ?? $blik0Url; + + return $transactionData; + } + + private function waitForBlikAccept(array $result): array + { + if ('success' == $result['result']) { + $stop = false; + $i = 0; + do { + $correct = false; + $tpayStatus = $this->tpayApi->transactions()->getTransactionById($result['transactionId']); + $errors = 0; + + foreach ($tpayStatus['payments']['attempts'] as $error) { + if ('' != $error['paymentErrorCode']) { + $errors++; + } + } + + if ('correct' == $tpayStatus['status']) { + $correct = true; + } + + if (60 == $i || $correct) { + $stop = true; + } + + if ($errors > 0 && !$correct) { + $stop = true; + $result['payments']['errors'] = $tpayStatus['payments']['attempts']; + } + + sleep(1); + $i++; + } while (!$stop); + + return $result; + } + $result['payments']['errors'] = [1]; + + return $result; + } + + private function getMagentoVersion() + { + $objectManager = \Magento\Framework\App\ObjectManager::getInstance(); + $productMetadata = $objectManager->get('\Magento\Framework\App\ProductMetadataInterface'); + + return $productMetadata->getVersion(); + } + + private function getPackagesVersions() + { + $dir = __DIR__.'/../../composer.json'; + if (file_exists($dir)) { + $composerJson = json_decode( + file_get_contents(__DIR__.'/../../composer.json'), + true + )['require'] ?? []; + + return [$composerJson['tpay-com/tpay-openapi-php'], $composerJson['tpay-com/tpay-php']]; + } + + return ['n/a', 'n/a']; + } +} diff --git a/Model/ApiFacade/Refund/RefundApiFacade.php b/Model/ApiFacade/Refund/RefundApiFacade.php new file mode 100755 index 0000000..88720f6 --- /dev/null +++ b/Model/ApiFacade/Refund/RefundApiFacade.php @@ -0,0 +1,67 @@ +tpay = $tpay; + $this->createRefundOriginApiInstance($tpay); + $this->createOpenApiInstance($tpay); + } + + public function makeRefund(InfoInterface $payment, float $amount) + { + if ($payment->getAdditionalInformation('transaction_id')) { + return $this->getCurrentApi()->makeRefund($payment, $amount); + } + if (!empty($payment->getAdditionalInformation('card_data'))) { + return (new RefundCardOriginApi($this->tpay))->makeCardRefund($payment, $amount); + } + + return $this->originApi->makeRefund($payment, $amount); + } + + private function getCurrentApi() + { + return $this->useOpenApi ? $this->openApi : $this->originApi; + } + + private function createRefundOriginApiInstance(TpayInterface $tpay) + { + try { + $this->originApi = new RefundOriginApi($tpay); + } catch (Exception $exception) { + $this->originApi = null; + } + } + + private function createOpenApiInstance(TpayInterface $tpay) + { + try { + $this->openApi = new OpenApi($tpay); + $this->useOpenApi = true; + } catch (Exception $exception) { + $this->openApi = null; + $this->useOpenApi = false; + } + } +} diff --git a/Model/ApiFacade/Refund/RefundCardOriginApi.php b/Model/ApiFacade/Refund/RefundCardOriginApi.php new file mode 100755 index 0000000..e64e064 --- /dev/null +++ b/Model/ApiFacade/Refund/RefundCardOriginApi.php @@ -0,0 +1,37 @@ +cardApiKey = $tpay->getCardApiKey(); + $this->cardApiPass = $tpay->getCardApiPassword(); + $this->cardVerificationCode = $tpay->getVerificationCode(); + $this->cardKeyRSA = $tpay->getRSAKey(); + $this->cardHashAlg = $tpay->getHashType(); + parent::__construct(); + } + + public function makeCardRefund($payment, $amount, $currency = '985') + { + $transactionId = $payment->getParentTransactionId(); + $this->setAmount($amount)->setCurrency($currency); + $result = $this->refund($transactionId, __('Zwrot do zamówienia ').$payment->getOrder()->getRealOrderId()); + + if (1 === (int) $result['result'] && isset($result['status']) && 'correct' === $result['status']) { + return $result['sale_auth']; + } + $errDesc = isset($result['err_desc']) ? ' error description: '.$result['err_desc'] : ''; + $errCode = isset($result['err_code']) ? ' error code: '.$result['err_code'] : ''; + $reason = isset($result['reason']) ? ' reason: '.$result['reason'] : ''; + throw new Exception(__('Payment refunding error. -'.$errCode.$errDesc.$reason)); + } +} diff --git a/Model/ApiFacade/Refund/RefundOriginApi.php b/Model/ApiFacade/Refund/RefundOriginApi.php new file mode 100755 index 0000000..659b515 --- /dev/null +++ b/Model/ApiFacade/Refund/RefundOriginApi.php @@ -0,0 +1,35 @@ +trApiKey = $tpay->getApiPassword(); + $this->trApiPass = $tpay->getApiKey(); + $this->merchantId = $tpay->getMerchantId(); + $this->merchantSecret = $tpay->getSecurityCode(); + parent::__construct(); + if ($tpay->useSandboxMode()) { + $this->apiURL = 'https://secure.sandbox.tpay.com/api/gw/'; + } + } + + public function makeRefund(InfoInterface $payment, float $amount): bool + { + Util::$loggingEnabled = false; + $apiResult = $this->setTransactionID($payment->getParentTransactionId())->refundAny(number_format($amount, 2)); + if (isset($apiResult['result']) && 1 === (int) $apiResult['result']) { + return true; + } + $errCode = isset($apiResult['err']) ? ' error code: '.$apiResult['err'] : ''; + throw new Exception(__('Payment refunding error. -'.$errCode)); + } +} diff --git a/Model/ApiFacade/TpayConfig/ConfigFacade.php b/Model/ApiFacade/TpayConfig/ConfigFacade.php new file mode 100755 index 0000000..a230273 --- /dev/null +++ b/Model/ApiFacade/TpayConfig/ConfigFacade.php @@ -0,0 +1,71 @@ +createOriginApiInstance($tpay, $assetRepository, $tokensService); + $this->createOpenApiInstance($tpay, $assetRepository, $tokensService, $storeManager); + } + + public function getConfig(): array + { + return $this->getCurrentApi()->getConfig(); + } + + private function getCurrentApi() + { + return $this->useOpenApi ? $this->openApi : $this->originApi; + } + + private function createOriginApiInstance(TpayInterface $tpay, Repository $assetRepository, TpayTokensService $tokensService) + { + if (!$tpay->isOriginApiEnabled()) { + $this->originApi = null; + + return; + } + + try { + $this->originApi = new ConfigOrigin($tpay, $assetRepository, $tokensService); + } catch (Exception $exception) { + $this->originApi = null; + } + } + + private function createOpenApiInstance(TpayInterface $tpay, Repository $assetRepository, TpayTokensService $tokensService, StoreManagerInterface $storeManager) + { + if ('PLN' !== $storeManager->getStore()->getCurrentCurrencyCode() && !$tpay->isOpenApiEnabled()) { + $this->openApi = null; + $this->useOpenApi = false; + + return; + } + + try { + $this->openApi = new ConfigOpen($tpay, $assetRepository, $tokensService); + $this->openApi->authorization(); + $this->useOpenApi = true; + } catch (Exception $exception) { + $this->openApi = null; + $this->useOpenApi = false; + } + } +} diff --git a/Model/ApiFacade/TpayConfig/ConfigOpen.php b/Model/ApiFacade/TpayConfig/ConfigOpen.php new file mode 100755 index 0000000..63d7301 --- /dev/null +++ b/Model/ApiFacade/TpayConfig/ConfigOpen.php @@ -0,0 +1,136 @@ +tpay = $tpay; + $this->assetRepository = $assetRepository; + $this->tokensService = $tokensService; + parent::__construct($tpay->getOpenApiClientId(), $tpay->getOpenApiPassword(), !$tpay->useSandboxMode()); + } + + public function getConfig(): array + { + $config = [ + 'tpay' => [ + 'payment' => [ + 'redirectUrl' => $this->tpay->getPaymentRedirectUrl(), + 'tpayLogoUrl' => $this->generateURL('tpaycom_magento2basic::images/logo_tpay.png'), + 'tpayCardsLogoUrl' => $this->generateURL('tpaycom_magento2basic::images/card.svg'), + 'showPaymentChannels' => $this->showChannels(), + 'getTerms' => $this->getTerms(), + 'addCSS' => $this->createCSS('tpaycom_magento2basic::css/tpay.css'), + 'blikStatus' => $this->tpay->checkBlikLevel0Settings(), + 'getBlikChannelID' => TransactionOriginApi::BLIK_CHANNEL, + 'useSandbox' => $this->tpay->useSandboxMode(), + 'grandTotal' => number_format($this->tpay->getCheckoutTotal(), 2, '.', ''), + 'groups' => $this->transactions()->getBankGroups((bool) $this->tpay->onlyOnlineChannels())['groups'], + ], + ], + ]; + + return array_merge($config, $this->getCardConfig()); + } + + public function generateURL(string $name): string + { + return $this->assetRepository->createAsset($name)->getUrl(); + } + + public function showChannels(): ?string + { + $script = 'tpaycom_magento2basic::js/open_render_channels.js'; + + return $this->createScript($script); + } + + public function createScript(string $script): string + { + return " + "; + } + + public function getTerms(): ?string + { + return $this->tpay->getTermsURL(); + } + + public function createCSS(string $css): string + { + return "generateURL($css)}\">"; + } + + public function getCardConfig() + { + $customerTokensData = []; + + if ($this->tpay->getCardSaveEnabled() && $this->tpay->isCustomerLoggedIn()) { + $customerTokens = $this->tokensService->getCustomerTokens($this->tpay->getCheckoutCustomerId(), true); + foreach ($customerTokens as $value) { + $customerTokensData[] = [ + 'cardShortCode' => $value['cardShortCode'], + 'id' => $value['tokenId'], + 'vendor' => $value['vendor'], + ]; + } + } + + return [ + 'tpaycards' => [ + 'payment' => [ + 'tpayLogoUrl' => $this->generateURL('tpaycom_magento2basic::images/logo_tpay.png'), + 'tpayCardsLogoUrl' => $this->generateURL('tpaycom_magento2basic::images/card.svg'), + 'getTpayLoadingGif' => $this->generateURL('tpaycom_magento2basic::images/loading.gif'), + 'getRSAkey' => $this->tpay->getRSAKey(), + 'fetchJavaScripts' => $this->fetchJavaScripts(), + 'addCSS' => $this->createCSS('tpaycom_magento2basic::css/tpaycards.css'), + 'redirectUrl' => $this->tpay->getPaymentRedirectUrl(), + 'isCustomerLoggedIn' => $this->tpay->isCustomerLoggedIn(), + 'customerTokens' => $customerTokensData, + 'isSavingEnabled' => $this->tpay->getCardSaveEnabled(), + ], + ], + ]; + } + + public function fetchJavaScripts() + { + $script = []; + $script[] = 'tpaycom_magento2basic::js/jquery.payment.min.js'; + $script[] = 'tpaycom_magento2basic::js/jsencrypt.min.js'; + $script[] = 'tpaycom_magento2basic::js/string_routines.js'; + $script[] = 'tpaycom_magento2basic::js/tpayCards.js'; + $script[] = 'tpaycom_magento2basic::js/renderSavedCards.js'; + $script[] = 'tpaycom_magento2basic::js/tpayGeneric.js'; + $scripts = ''; + + foreach ($script as $key => $value) { + $scripts .= $this->createScript($value); + } + + return $scripts; + } +} diff --git a/Model/ApiFacade/TpayConfig/ConfigOrigin.php b/Model/ApiFacade/TpayConfig/ConfigOrigin.php new file mode 100755 index 0000000..fafd073 --- /dev/null +++ b/Model/ApiFacade/TpayConfig/ConfigOrigin.php @@ -0,0 +1,134 @@ +tpay = $tpay; + $this->assetRepository = $assetRepository; + $this->tokensService = $tokensService; + } + + public function getConfig(): array + { + $config = [ + 'tpay' => [ + 'payment' => [ + 'redirectUrl' => $this->tpay->getPaymentRedirectUrl(), + 'tpayLogoUrl' => $this->generateURL('tpaycom_magento2basic::images/logo_tpay.png'), + 'tpayCardsLogoUrl' => $this->generateURL('tpaycom_magento2basic::images/card.svg'), + 'merchantId' => $this->tpay->getMerchantId(), + 'showPaymentChannels' => $this->showChannels(), + 'getTerms' => $this->getTerms(), + 'addCSS' => $this->createCSS('tpaycom_magento2basic::css/tpay.css'), + 'blikStatus' => $this->tpay->checkBlikLevel0Settings(), + 'onlyOnlineChannels' => $this->tpay->onlyOnlineChannels(), + 'getBlikChannelID' => TransactionOriginApi::BLIK_CHANNEL, + 'useSandbox' => $this->tpay->useSandboxMode(), + 'grandTotal' => number_format($this->tpay->getCheckoutTotal(), 2, '.', ''), + ], + ], + ]; + + $config = array_merge($config, $this->getCardConfig()); + + return $this->tpay->isAvailable() ? $config : []; + } + + public function generateURL(string $name): string + { + return $this->assetRepository->createAsset($name)->getUrl(); + } + + public function showChannels(): ?string + { + $script = 'tpaycom_magento2basic::js/render_channels.js'; + + return $this->createScript($script); + } + + public function createScript(string $script): string + { + return " + "; + } + + public function getTerms(): ?string + { + return $this->tpay->getTermsURL(); + } + + public function createCSS(string $css): string + { + return "generateURL($css)}\">"; + } + + private function getCardConfig() + { + $customerTokensData = []; + if ($this->tpay->getCardSaveEnabled()) { + $customerTokens = $this->tokensService->getCustomerTokens($this->tpay->getCheckoutCustomerId()); + foreach ($customerTokens as $key => $value) { + $customerTokensData[] = [ + 'cardShortCode' => $value['cardShortCode'], + 'id' => $value['tokenId'], + 'vendor' => $value['vendor'], + ]; + } + } + + return [ + 'tpaycards' => [ + 'payment' => [ + 'tpayLogoUrl' => $this->generateURL('tpaycom_magento2basic::images/logo_tpay.png'), + 'tpayCardsLogoUrl' => $this->generateURL('tpaycom_magento2basic::images/card.svg'), + 'getTpayLoadingGif' => $this->generateURL('tpaycom_magento2basic::images/loading.gif'), + 'getRSAkey' => $this->tpay->getRSAKey(), + 'fetchJavaScripts' => $this->fetchJavaScripts(), + 'addCSS' => $this->createCSS('tpaycom_magento2basic::css/tpaycards.css'), + 'redirectUrl' => $this->tpay->getPaymentRedirectUrl(), + 'isCustomerLoggedIn' => $this->tpay->isCustomerLoggedIn(), + 'customerTokens' => $customerTokensData, + 'isSavingEnabled' => $this->tpay->getCardSaveEnabled(), + ], + ], + ]; + } + + private function fetchJavaScripts(): string + { + $script = []; + $script[] = 'tpaycom_magento2basic::js/jquery.payment.min.js'; + $script[] = 'tpaycom_magento2basic::js/jsencrypt.min.js'; + $script[] = 'tpaycom_magento2basic::js/string_routines.js'; + $script[] = 'tpaycom_magento2basic::js/tpayCards.js'; + $script[] = 'tpaycom_magento2basic::js/renderSavedCards.js'; + $scripts = ''; + foreach ($script as $value) { + $scripts .= $this->createScript($value); + } + + return $scripts; + } +} diff --git a/Model/ApiFacade/Transaction/Dto/Channel.php b/Model/ApiFacade/Transaction/Dto/Channel.php new file mode 100644 index 0000000..84d5553 --- /dev/null +++ b/Model/ApiFacade/Transaction/Dto/Channel.php @@ -0,0 +1,57 @@ +id = $id; + $this->name = $name; + $this->fullName = $fullName; + $this->image = $image; + $this->available = $available; + $this->onlinePayment = $onlinePayment; + $this->instantRedirection = $instantRedirection; + $this->groups = $groups; + $this->constraints = $constraints; + } +} diff --git a/Model/ApiFacade/Transaction/TransactionApiFacade.php b/Model/ApiFacade/Transaction/TransactionApiFacade.php new file mode 100755 index 0000000..b2b7b82 --- /dev/null +++ b/Model/ApiFacade/Transaction/TransactionApiFacade.php @@ -0,0 +1,147 @@ +createOriginApiInstance($tpay); + $this->createOpenApiInstance($tpay); + $this->cache = $cache; + } + + public function isOpenApiUse(): bool + { + return $this->useOpenApi; + } + + public function create(array $config): array + { + return $this->getCurrentApi()->create($config); + } + + public function createWithInstantRedirection(array $config): array + { + if (!$this->useOpenApi) { + throw new TpayException('OpenAPI not availabile - Failed to create transaction with instant redirection'); + } + + return $this->openApi->createWithInstantRedirect($config); + } + + public function blik($blikTransactionId, $blikCode): array + { + return $this->originApi->blik($blikTransactionId, $blikCode); + } + + /** @return list */ + public function channels(): array + { + $channels = $this->cache->load(self::CHANNELS_CACHE_KEY); + + if ($channels) { + return unserialize($channels); + } + + if (false === $this->useOpenApi) { + return []; + } + + $channels = array_filter($this->openApi->channels(), function (Channel $channel) { + return true === $channel->available; + }); + + $this->cache->save(serialize($channels), self::CHANNELS_CACHE_KEY, [], self::CACHE_LIFETIME); + + return $channels; + } + + public function translateGroupToChannel(array $data, bool $redirectToChannel): array + { + if ($redirectToChannel && $this->useOpenApi && $data['group'] && !$data['channel'] && TransactionOriginApi::BLIK_CHANNEL != (int) $data['group']) { + foreach ($this->openApi->channels() as $channel) { + $group = $channel->groups[0] ?? null; + if (isset($group['id']) && $group['id'] == $data['group']) { + $data['channel'] = $channel->id; + $data['group'] = null; + + return $data; + } + } + } + + return $data; + } + + public function originApiFieldCorrect(array $data): array + { + if (!$this->isOpenApiUse()) { + unset($data['channel']); + unset($data['currency']); + unset($data['language']); + } + + return $data; + } + + private function getCurrentApi() + { + return $this->useOpenApi ? $this->openApi : $this->originApi; + } + + private function createOriginApiInstance(TpayInterface $tpay) + { + if (!$tpay->isOriginApiEnabled()) { + $this->originApi = null; + + return; + } + + try { + $this->originApi = new TransactionOriginApi($tpay->getApiPassword(), $tpay->getApiKey(), $tpay->getMerchantId(), $tpay->getSecurityCode(), !$tpay->useSandboxMode()); + } catch (Exception $exception) { + $this->originApi = null; + } + } + + private function createOpenApiInstance(TpayInterface $tpay) + { + if (!$tpay->isOpenApiEnabled()) { + $this->openApi = null; + $this->useOpenApi = false; + + return; + } + + try { + $this->openApi = new OpenApi($tpay); + $this->useOpenApi = true; + } catch (Exception $exception) { + $this->openApi = null; + $this->useOpenApi = false; + } + } +} diff --git a/Model/TransactionModel.php b/Model/ApiFacade/Transaction/TransactionOriginApi.php old mode 100644 new mode 100755 similarity index 57% rename from Model/TransactionModel.php rename to Model/ApiFacade/Transaction/TransactionOriginApi.php index 1d0efe0..f93784a --- a/Model/TransactionModel.php +++ b/Model/ApiFacade/Transaction/TransactionOriginApi.php @@ -1,12 +1,12 @@ trApiKey = $apiKey; $this->trApiPass = $apiPassword; $this->merchantId = $merchantId; $this->merchantSecret = $merchantSecret; parent::__construct(); + if (!$isProd) { + $this->apiURL = 'https://secure.sandbox.tpay.com/api/gw/'; + } } } diff --git a/Model/Config/Source/HashTypes.php b/Model/Config/Source/HashTypes.php new file mode 100644 index 0000000..6430cdd --- /dev/null +++ b/Model/Config/Source/HashTypes.php @@ -0,0 +1,39 @@ +toArray(); + $ret = []; + foreach ($arr as $key => $value) { + $ret[] = [ + 'value' => $key, + 'label' => $value, + ]; + } + + return $ret; + } + + /** + * Get options in "key-value" format + * + * @return list + */ + public function toArray() + { + return [ + 'sha1' => 'sha1', + 'sha256' => 'sha256', + 'sha512' => 'sha512', + 'ripemd160' => 'ripemd160', + 'ripemd320' => 'ripemd320', + 'md5' => 'md5', + ]; + } +} diff --git a/Model/Config/Source/OnsiteChannels.php b/Model/Config/Source/OnsiteChannels.php new file mode 100644 index 0000000..d8820b2 --- /dev/null +++ b/Model/Config/Source/OnsiteChannels.php @@ -0,0 +1,39 @@ +transactions = new TransactionApiFacade($tpay, $cache); + } + + public function getLabelFromValue(int $value): ?string + { + foreach ($this->toOptionArray() as $option) { + if ($option['value'] === $value) { + return $option['label']; + } + } + + return null; + } + + /** @return array{array{value: int, label: string}} */ + public function toOptionArray(): array + { + return array_map(function (Channel $channel) { + return ['value' => $channel->id, 'label' => $channel->fullName]; + }, $this->transactions->channels()); + } +} diff --git a/Model/ConstraintValidator.php b/Model/ConstraintValidator.php new file mode 100644 index 0000000..9046b0c --- /dev/null +++ b/Model/ConstraintValidator.php @@ -0,0 +1,57 @@ +checkoutSession = $session; + } + + public function validate(array $constraints): bool + { + foreach ($constraints as $constraint) { + switch ($constraint['type']) { + case 'min': + if (!$this->validateMinimalTotal((float) $constraint['value'])) { + return false; + } + + break; + case 'max': + if (!$this->validateMaximalTotal((float) $constraint['value'])) { + return false; + } + + break; + default: + break; + } + } + + return true; + } + + public function isClientCountryValid(bool $isAllowed, string $clientCountry, array $specificCountry): bool + { + return $isAllowed && !in_array($clientCountry, $specificCountry); + } + + private function validateMinimalTotal(float $minimal): bool + { + return $this->checkoutSession->getQuote()->getGrandTotal() > $minimal; + } + + private function validateMaximalTotal(float $maximal): bool + { + return $this->checkoutSession->getQuote()->getGrandTotal() < $maximal; + } +} diff --git a/Model/GenericPaymentPlugin.php b/Model/GenericPaymentPlugin.php new file mode 100644 index 0000000..518c85c --- /dev/null +++ b/Model/GenericPaymentPlugin.php @@ -0,0 +1,23 @@ +data = $data; + $this->scopeConfig = $scopeConfig; + $this->onsiteChannels = $onsiteChannels; + $this->storeManager = $storeManager; + $this->tpay = $tpay; + $this->checkoutSession = $checkoutSession; + $this->transactions = $transactions; + $this->constraintValidator = $constraintValidator; + } + + public function afterGetAvailableMethods(MethodList $compiled, $result) + { + $onsiteChannels = $this->scopeConfig->getValue(self::CONFIG_PATH, ScopeInterface::SCOPE_STORE); + $channelList = $onsiteChannels ? explode(',', $onsiteChannels) : []; + $channels = $this->transactions->channels(); + + if ($this->constraintValidator->isClientCountryValid($this->tpay->isAllowSpecific(), $this->checkoutSession->getQuote()->getBillingAddress()->getCountryId(), $this->tpay->getSpecificCountry())) { + return []; + } + + if (!$this->tpay->isCartValid($this->checkoutSession->getQuote()->getGrandTotal())) { + return $result; + } + + $result = $this->addCardMethod($result); + $result = $this->filterResult($result); + + if (!$this->transactions->isOpenApiUse() || !$this->isPlnPayment()) { + return $result; + } + + foreach ($channelList as $onsiteChannel) { + $channel = $channels[$onsiteChannel]; + + if (!empty($channel->constraints) && !$this->constraintValidator->validate($channel->constraints)) { + continue; + } + + $title = $this->onsiteChannels->getLabelFromValue($onsiteChannel); + $result[] = $this->getMethodInstance( + $title, + "generic-{$onsiteChannel}" + ); + } + + return $result; + } + + public function getMethodInstance(string $title, string $code): MethodInterface + { + $method = $this->data->getMethodInstance(TpayInterface::CODE); + $method->setTitle($title); + $method->setCode($code); + + return $method; + } + + private function addCardMethod(array $result): array + { + if ($this->tpay->isCardEnabled()) { + $result[] = $this->getMethodInstance($this->tpay->getCardTitle(), 'tpaycom_magento2basic_cards'); + } + + return $result; + } + + private function filterResult(array $result): array + { + if ($this->isPlnPayment()) { + return $result; + } + + return array_filter($result, function ($method) { + return 'tpaycom_magento2basic' !== $method->getCode(); + }); + } + + private function isPlnPayment(): bool + { + return 'PLN' === $this->storeManager->getStore()->getCurrentCurrencyCode(); + } +} diff --git a/Model/NotificationModel.php b/Model/NotificationModel.php deleted file mode 100644 index 4950018..0000000 --- a/Model/NotificationModel.php +++ /dev/null @@ -1,19 +0,0 @@ -merchantId = $merchantId; - $this->merchantSecret = $merchantSecret; - parent::__construct(); - } -} diff --git a/Model/RefundModel.php b/Model/RefundModel.php deleted file mode 100644 index c5ea883..0000000 --- a/Model/RefundModel.php +++ /dev/null @@ -1,23 +0,0 @@ -trApiKey = $apiKey; - $this->trApiPass = $apiPassword; - $this->merchantId = $merchantId; - $this->merchantSecret = $merchantSecret; - parent::__construct(); - } -} diff --git a/Model/ResourceModel/Token.php b/Model/ResourceModel/Token.php new file mode 100644 index 0000000..cbdca06 --- /dev/null +++ b/Model/ResourceModel/Token.php @@ -0,0 +1,13 @@ +_init('tpay_credit_cards', 'id'); + } +} diff --git a/Model/ResourceModel/Token/Collection.php b/Model/ResourceModel/Token/Collection.php new file mode 100644 index 0000000..410cd3d --- /dev/null +++ b/Model/ResourceModel/Token/Collection.php @@ -0,0 +1,13 @@ +_init('tpaycom\magento2basic\Model\Tokens', 'tpaycom\magento2basic\Model\ResourceModel\Token'); + } +} diff --git a/Model/Sales/OrderRepository.php b/Model/Sales/OrderRepository.php index 6bc3b3a..f7a6832 100644 --- a/Model/Sales/OrderRepository.php +++ b/Model/Sales/OrderRepository.php @@ -1,5 +1,7 @@ setData('cli_id', $id); + + return $this; + } + + public function getToken($customerId) + { + // Get tokens collection + $tokensCollection = $this->getResourceCollection(); + $results = []; + // Load all data of collection + foreach ($tokensCollection as $token) { + if ((int) $token->getCliId() === (int) $customerId) { + $results[] = [ + 'tokenId' => $token->getId(), + 'token' => $token->getCliAuth(), + 'cardShortCode' => $token->getShortCode(), + 'vendor' => $token->getVendor(), + 'crc' => $token->getCrc(), + ]; + } + } + + return $results; + } + + /** + * @param string $token + * + * @return $this + */ + public function setToken($token) + { + $this->setData('cli_auth', $token); + + return $this; + } + + /** + * @param string $shortCode + * + * @return $this + */ + public function setShortCode($shortCode) + { + $this->setData('short_code', $shortCode); + + return $this; + } + + /** + * @param string $crc + * + * @return $this + */ + public function setCrc($crc) + { + $this->setData('crc', $crc); + + return $this; + } + + /** + * @param string $vendorName + * + * @return $this + */ + public function setVendor($vendorName) + { + $this->setData('vendor', $vendorName); + + return $this; + } + + /** @return $this */ + public function setCreationTime() + { + $this->setData('created_at', date('Y-m-d H:i:s')); + + return $this; + } + + /** + * @param string $requestToken + * + * @return $this + */ + public function deleteToken($requestToken) + { + $tokensCollection = $this->getResourceCollection(); + foreach ($tokensCollection as $token) { + if ($token->getCliAuth() === $requestToken) { + $token->delete(); + } + } + + return $this; + } + + protected function _construct() + { + $this->_init('tpaycom\magento2basic\Model\ResourceModel\Token'); + } +} diff --git a/Model/Tpay.php b/Model/Tpay.php index ffa291e..0a34d10 100755 --- a/Model/Tpay.php +++ b/Model/Tpay.php @@ -1,5 +1,7 @@ */ protected $availableCurrencyCodes = ['PLN']; - - /** @var string */ protected $redirectURL = 'https://secure.tpay.com'; - - /** @var string */ protected $termsURL = 'https://secure.tpay.com/regulamin.pdf'; /** @@ -73,12 +60,21 @@ class Tpay extends AbstractMethod implements TpayInterface /** @var Escaper */ protected $escaper; - /** @var Refund */ - protected $refund; - /** @var StoreManager */ protected $storeManager; + private $supportedVendors = [ + 'visa', + 'jcb', + 'dinersclub', + 'maestro', + 'amex', + 'mastercard', + ]; + + /** @var string */ + private $_title; + public function __construct( Context $context, Registry $registry, @@ -90,7 +86,6 @@ public function __construct( UrlInterface $urlBuilder, Session $checkoutSession, OrderRepositoryInterface $orderRepository, - Refund $refund, Escaper $escaper, StoreManager $storeManager, $data = [] @@ -99,7 +94,6 @@ public function __construct( $this->escaper = $escaper; $this->checkoutSession = $checkoutSession; $this->orderRepository = $orderRepository; - $this->refund = $refund; $this->storeManager = $storeManager; parent::__construct( @@ -116,68 +110,81 @@ public function __construct( ); } - public function getRedirectURL() + public function getRedirectURL(): string { return $this->redirectURL; } - public function checkBlikLevel0Settings() + public function setCode(string $code) { - if (!$this->getBlikLevelZeroStatus() || !$this->checkBlikAmount()) { - return false; - } - - $apiKey = $this->getApiKey(); - - $apiPassword = $this->getApiPassword(); + $this->_code = $code; + } - return !(empty($apiKey) || strlen($apiKey) < 8 || empty($apiPassword) || strlen($apiPassword) < 4); + public function checkBlikLevel0Settings(): bool + { + return $this->getBlikLevelZeroStatus() && $this->checkBlikAmount(); } - /** @return bool */ - public function getInstallmentsAmountValid() + public function getInstallmentsAmountValid(): bool { $amount = $this->getCheckoutTotal(); return $amount > 300 && $amount < 9259; } - public function getBlikLevelZeroStatus() + public function getBlikLevelZeroStatus(): bool + { + return (bool) $this->getConfigData('general_settings/blik_level_zero'); + } + + public function getApiKey(): ?string + { + return $this->getConfigData('originapi_settings/api_key_tpay'); + } + + public function getCardApiKey(): ?string { - return (bool) $this->getConfigData('blik_level_zero'); + return $this->getConfigData('cardpayment_settings/cardpayment_originapi_settings/card_api_key_tpay'); } - public function getApiKey() + public function getApiPassword(): ?string { - return $this->getConfigData('api_key_tpay'); + return $this->getConfigData('originapi_settings/api_password'); } - public function getApiPassword() + public function getCardApiPassword(): ?string { - return $this->getConfigData('api_password'); + return $this->getConfigData('cardpayment_settings/cardpayment_originapi_settings/card_api_password'); } - public function getInvoiceSendMail() + public function getInvoiceSendMail(): string { - return $this->getConfigData('send_invoice_email'); + return $this->getConfigData('sale_settings/send_invoice_email'); } - public function getTermsURL() + public function getTermsURL(): string { return $this->termsURL; } - public function getTpayFormData($orderId = null) + public function getOpenApiPassword(): ?string + { + return $this->getConfigData('openapi_settings/open_api_password'); + } + + public function getTpayFormData(?string $orderId = null): array { $order = $this->getOrder($orderId); $billingAddress = $order->getBillingAddress(); - $amount = number_format($order->getGrandTotal(), 2, '.', ''); + $amount = number_format((float) $order->getGrandTotal(), 2, '.', ''); $crc = base64_encode($orderId); $name = $billingAddress->getData('firstname').' '.$billingAddress->getData('lastname'); - - /** @var string $phone */ $phone = $billingAddress->getData('telephone'); + $om = ObjectManager::getInstance(); + $resolver = $om->get('Magento\Framework\Locale\Resolver'); + $language = $this->validateCardLanguage($resolver->getLocale()); + return [ 'email' => $this->escaper->escapeHtml($order->getCustomerEmail()), 'name' => $this->escaper->escapeHtml($name), @@ -194,67 +201,95 @@ public function getTpayFormData($orderId = null) 'phone' => $phone, 'online' => $this->onlyOnlineChannels() ? 1 : 0, 'module' => 'Magento '.$this->getMagentoVersion(), + 'currency' => $this->getISOCurrencyCode($order->getOrderCurrencyCode()), + 'language' => $language, ]; } - public function getMerchantId() + public function getMerchantId(): ?int { - return (int) $this->getConfigData('merchant_id'); + return (int) $this->getConfigData('general_settings/merchant_id'); } - public function getSecurityCode() + public function getOpenApiClientId(): ?string { - return $this->getConfigData('security_code'); + return $this->getConfigData('openapi_settings/open_api_client_id'); } - public function onlyOnlineChannels() + public function getSecurityCode(?int $storeId = null): ?string { - return (bool) $this->getConfigData('show_payment_channels_online'); + return $this->getConfigData('general_settings/security_code', $storeId); } - public function redirectToChannel() + public function onlyOnlineChannels(): bool { - return (bool) $this->getConfigData('redirect_directly_to_channel'); + return (bool) $this->getConfigData('general_settings/show_payment_channels_online'); } - public function getCheckProxy() + public function redirectToChannel(): bool { - return (bool) $this->getConfigData('check_proxy'); + return (bool) $this->getConfigData('general_settings/redirect_directly_to_channel'); } - public function getCheckTpayIP() + public function setTitle(string $title): void { - return (bool) $this->getConfigData('check_server'); + $this->_title = $title; } - public function getPaymentRedirectUrl() + public function getTitle(): string { - return $this->urlBuilder->getUrl('magento2basic/tpay/redirect', ['uid' => time().uniqid(true)]); + return $this->_title ?? $this->getConfigData('general_settings/title'); + } + + public function getCardTitle(): ?string + { + return $this->getConfigData('cardpayment_settings/card_title') ?? ''; + } + + public function isOriginApiEnabled(): bool + { + return (bool) $this->getConfigData('originapi_settings/origin_api_active'); + } + + public function isOpenApiEnabled(): bool + { + return (bool) $this->getConfigData('openapi_settings/open_api_active'); + } + + public function isCardEnabled(): bool + { + return (bool) $this->getConfigData('cardpayment_settings/cardpayment_api_active'); + } + + public function isOriginApiCardUse(): bool + { + return (bool) $this->getConfigData('cardpayment_settings/cardpayment_origin_api_use'); + } + + public function useSandboxMode(?int $storeId = null): bool + { + return (bool) $this->getConfigData('general_settings/use_sandbox', $storeId); + } + + public function getPaymentRedirectUrl(): string + { + return $this->urlBuilder->getUrl('magento2basic/tpay/redirect', ['uid' => time().uniqid('', true)]); } /** * {@inheritDoc} - * * Check that tpay.com payments should be available. */ - public function isAvailable(CartInterface $quote = null) + public function isAvailable(?CartInterface $quote = null) { - /** @var float|int $minAmount */ - $minAmount = $this->getConfigData('min_order_total'); - - /** @var float|int $maxAmount */ - $maxAmount = $this->getConfigData('max_order_total'); + $minAmount = $this->getConfigData('sale_settings/min_order_total'); + $maxAmount = $this->getConfigData('sale_settings/max_order_total'); - if ( - $quote - && ($quote->getBaseGrandTotal() < $minAmount || ($maxAmount && $quote->getBaseGrandTotal() > $maxAmount)) - ) { + if ($quote && ($quote->getBaseGrandTotal() < $minAmount || ($maxAmount && $quote->getBaseGrandTotal() > $maxAmount))) { return false; } - if (!$this->getMerchantId() - || ($quote && !$this->isAvailableForCurrency($quote->getCurrency()->getQuoteCurrencyCode())) - ) { + if (!$this->getMerchantId()) { return false; } @@ -263,27 +298,22 @@ public function isAvailable(CartInterface $quote = null) public function assignData(DataObject $data) { - /** @var array $additionalData */ $additionalData = $data->getData('additional_data'); - $info = $this->getInfoInstance(); - $info->setAdditionalInformation( - static::CHANNEL, - isset($additionalData[static::CHANNEL]) ? $additionalData[static::CHANNEL] : '' - ); + $info->setAdditionalInformation(static::GROUP, array_key_exists(static::GROUP, $additionalData) ? $additionalData[static::GROUP] : ''); - $info->setAdditionalInformation( - static::BLIK_CODE, - isset($additionalData[static::BLIK_CODE]) ? $additionalData[static::BLIK_CODE] : '' - ); + $info->setAdditionalInformation(static::BLIK_CODE, array_key_exists(static::BLIK_CODE, $additionalData) ? $additionalData[static::BLIK_CODE] : ''); - if (isset($additionalData[static::TERMS_ACCEPT]) && 1 === $additionalData[static::TERMS_ACCEPT]) { - $info->setAdditionalInformation( - static::TERMS_ACCEPT, - 1 - ); - } + $info->setAdditionalInformation('channel', $additionalData['channel'] ?? null); + + $info->setAdditionalInformation(static::TERMS_ACCEPT, isset($additionalData[static::TERMS_ACCEPT]) ? '1' === $additionalData[static::TERMS_ACCEPT] : false); + + $info->setAdditionalInformation(static::CARDDATA, $additionalData[static::CARDDATA] ?? ''); + $info->setAdditionalInformation(static::CARD_VENDOR, isset($additionalData[static::CARD_VENDOR]) && in_array($additionalData[static::CARD_VENDOR], $this->supportedVendors) ? $additionalData[static::CARD_VENDOR] : 'undefined'); + $info->setAdditionalInformation(static::CARD_SAVE, isset($additionalData[static::CARD_SAVE]) ? '1' === $additionalData[static::CARD_SAVE] : false); + $info->setAdditionalInformation(static::CARD_ID, isset($additionalData[static::CARD_ID]) && is_numeric($additionalData[static::CARD_ID]) ? $additionalData[static::CARD_ID] : false); + $info->setAdditionalInformation(static::SHORT_CODE, isset($additionalData[static::SHORT_CODE]) && is_numeric($additionalData[static::SHORT_CODE]) ? '****'.$additionalData[static::SHORT_CODE] : false); return $this; } @@ -299,12 +329,9 @@ public function assignData(DataObject $data) */ public function refund(InfoInterface $payment, $amount) { - $this->refund - ->setApiKey($this->getApiKey()) - ->setApiPassword($this->getApiPassword()) - ->setMerchantId($this->getMerchantId()) - ->setMerchantSecret($this->getSecurityCode()); - $refundResult = $this->refund->makeRefund($payment, $amount); + $refundService = new RefundApiFacade($this); + + $refundResult = $refundService->makeRefund($payment, (float) $amount); try { if ($refundResult) { $payment @@ -322,79 +349,149 @@ public function refund(InfoInterface $payment, $amount) return $this; } + /** @return float current cart total */ + public function getCheckoutTotal() + { + $amount = (float) $this->getCheckout()->getQuote()->getBaseGrandTotal(); + + if (!$amount) { + $orderId = $this->getCheckout()->getLastRealOrderId(); + $order = $this->orderRepository->getByIncrementId($orderId); + $amount = $order->getGrandTotal(); + } + + return $amount; + } + public function getConfigData($field, $storeId = null) { - if (is_null($storeId)) { + if (null === $storeId) { $storeId = $this->storeManager->getStore()->getId(); } return parent::getConfigData($field, $storeId); } - /** - * Check that the BLIK should be available for order/quote amount - * - * @return bool - */ - protected function checkBlikAmount() + public function getCardSaveEnabled(): bool { - return (bool) ($this->getCheckoutTotal() >= $this->minAmountBlik); + return (bool) $this->getConfigData('cardpayment_settings/card_save_enabled'); } - /** @return float current cart total */ - protected function getCheckoutTotal() + public function getCheckoutCustomerId(): ?string { - $amount = $this->getCheckout()->getQuote()->getBaseGrandTotal(); + $objectManager = ObjectManager::getInstance(); - if (!$amount) { - /** @var int $orderId */ - $orderId = $this->getCheckout()->getLastRealOrderId(); + /** @var \Magento\Customer\Model\Session $customerSession */ + $customerSession = $objectManager->get('Magento\Customer\Model\Session'); - $order = $this->orderRepository->getByIncrementId($orderId); - $amount = $order->getGrandTotal(); - } + return $customerSession->getCustomerId(); + } + + public function getRSAKey(): ?string + { + return $this->getConfigData('cardpayment_settings/rsa_key'); + } + + public function isCustomerLoggedIn(): bool + { + $objectManager = ObjectManager::getInstance(); - return number_format($amount, 2, '.', ''); + /** @var \Magento\Customer\Model\Session $customerSession */ + $customerSession = $objectManager->get('Magento\Customer\Model\Session'); + + return $customerSession->isLoggedIn(); } - /** @return Session */ - protected function getCheckout() + public function getHashType(): string { - return $this->checkoutSession; + return $this->getConfigData('cardpayment_settings/cardpayment_originapi_settings/hash_type'); + } + + public function getVerificationCode(): string + { + return $this->getConfigData('cardpayment_settings/cardpayment_originapi_settings/verification_code'); + } + + public function isAllowSpecific(): bool + { + return (bool) $this->getConfigData('sale_settings/allowspecific') ?? false; + } + + public function getSpecificCountry(): array + { + return $this->getConfigData('sale_settings/specificcountry') ? explode(',', $this->getConfigData('sale_settings/specificcountry')) : []; } /** - * @param int $orderId + * @param string $orderId * - * @return \Magento\Sales\Api\Data\OrderInterface + * @return string */ - protected function getOrder($orderId = null) + public function getCustomerId($orderId) { - if (null === $orderId) { - /** @var int $orderId */ - $orderId = $this->getCheckout()->getLastRealOrderId(); - } + $order = $this->getOrder($orderId); - return $this->orderRepository->getByIncrementId($orderId); + return $order->getCustomerId(); } /** - * Availability for currency + * check if customer was logged while placing order * - * @param string $currencyCode + * @param string $orderId * * @return bool */ - protected function isAvailableForCurrency($currencyCode) + public function isCustomerGuest($orderId) + { + $order = $this->getOrder($orderId); + + return $order->getCustomerIsGuest(); + } + + public function getISOCurrencyCode($orderCurrency) + { + return $this->validateCardCurrency($orderCurrency); + } + + public function isCartValid(?float $grandTotal = null): bool { - return !(!in_array($currencyCode, $this->availableCurrencyCodes)); + $minAmount = $this->getConfigData('sale_settings/min_order_total'); + $maxAmount = $this->getConfigData('sale_settings/max_order_total'); + + if ($grandTotal && ($grandTotal < $minAmount || ($maxAmount && $grandTotal > $maxAmount))) { + return false; + } + + if (!$this->getMerchantId()) { + return false; + } + + return !is_null($grandTotal); + } + + /** Check that the BLIK should be available for order/quote amount */ + protected function checkBlikAmount(): bool + { + return (bool) ($this->getCheckoutTotal() >= $this->minAmountBlik); + } + + protected function getCheckout(): Session + { + return $this->checkoutSession; + } + + protected function getOrder(?string $orderId = null): \Magento\Sales\Api\Data\OrderInterface + { + if (null === $orderId) { + $orderId = $this->getCheckout()->getLastRealOrderId(); + } + + return $this->orderRepository->getByIncrementId($orderId); } private function getMagentoVersion() { $objectManager = ObjectManager::getInstance(); - - /** @var ProductMetadataInterface $productMetadata */ $productMetadata = $objectManager->get('Magento\Framework\App\ProductMetadataInterface'); return $productMetadata->getVersion(); diff --git a/Model/TpayConfigProvider.php b/Model/TpayConfigProvider.php index b051ba1..c625181 100644 --- a/Model/TpayConfigProvider.php +++ b/Model/TpayConfigProvider.php @@ -1,108 +1,61 @@ assetRepository = $assetRepository; $this->paymentHelper = $paymentHelper; + $this->transactionApi = $transactionApiFacade; + $this->configFacade = new ConfigFacade($this->getPaymentMethodInstance(), $assetRepository, $tokensService, $storeManager); } - public function getConfig() - { - $tpay = $this->getPaymentMethodInstance(); - - $config = [ - 'tpay' => [ - 'payment' => [ - 'redirectUrl' => $tpay->getPaymentRedirectUrl(), - 'tpayLogoUrl' => $this->generateURL('tpaycom_magento2basic::images/logo_tpay.png'), - 'merchantId' => $tpay->getMerchantId(), - 'showPaymentChannels' => $this->showChannels(), - 'getTerms' => $this->getTerms(), - 'addCSS' => $this->createCSS('tpaycom_magento2basic::css/tpay.css'), - 'blikStatus' => $this->getPaymentMethodInstance()->checkBlikLevel0Settings(), - 'onlyOnlineChannels' => $this->getPaymentMethodInstance()->onlyOnlineChannels(), - 'getBlikChannelID' => TransactionModel::BLIK_CHANNEL, - 'isInstallmentsAmountValid' => $this->getPaymentMethodInstance()->getInstallmentsAmountValid(), - ], - ], - ]; - - return $tpay->isAvailable() ? $config : []; - } - - /** - * @param string $name - * - * @return string - */ - public function generateURL($name) - { - return $this->assetRepository->createAsset($name)->getUrl(); - } - - /** @return null|string */ - public function showChannels() + public function getConfig(): array { - $script = 'tpaycom_magento2basic::js/render_channels.js'; - - return $this->createScript($script); - } - - /** - * @param string $script - * - * @return string - */ - public function createScript($script) - { - return " - "; - } - - /** @return null|string */ - public function getTerms() - { - return $this->getPaymentMethodInstance()->getTermsURL(); - } + $config = $this->configFacade->getConfig(); + $channels = $this->transactionApi->channels(); + + foreach ($channels as $channel) { + $config['generic'][$channel->id] = [ + 'id' => $channel->id, + 'name' => $channel->fullName, + 'logoUrl' => $channel->image, + ]; + } - /** - * @param string $css - * - * @return string - */ - public function createCSS($css) - { - return "generateURL($css)}\">"; + return $config; } - /** @return MethodInterface|TpayInterface */ - protected function getPaymentMethodInstance() + private function getPaymentMethodInstance(): TpayInterface { if (null === $this->paymentMethod) { $this->paymentMethod = $this->paymentHelper->getMethodInstance(TpayInterface::CODE); diff --git a/Service/TpayService.php b/Service/TpayService.php index de77619..327d219 100644 --- a/Service/TpayService.php +++ b/Service/TpayService.php @@ -1,9 +1,13 @@ orderRepository->getByIncrementId($orderId); - - $order->setTotalDue($order->getGrandTotal()) + $order + ->setTotalDue($order->getGrandTotal()) ->setTotalPaid(0.00) ->setBaseTotalPaid(0.00) ->setBaseTotalDue($order->getBaseGrandTotal()) @@ -85,14 +77,8 @@ public function addCommentToHistory($orderId, $comment) $order->save(); } - /** - * Return payment data - * - * @param int $orderId - * - * @return OrderPaymentInterface - */ - public function getPayment($orderId) + /** Return payment data */ + public function getPayment(string $orderId): OrderPaymentInterface { /** @var Order $order */ $order = $this->orderRepository->getByIncrementId($orderId); @@ -103,28 +89,25 @@ public function getPayment($orderId) /** * Validate order and set appropriate state * - * @param int $orderId - * @param array $validParams - * @param TpayInterface $tpayModel + * @throws Exception * - * @return bool|Order + * @return bool|OrderInterface */ - public function SetOrderStatus($orderId, array $validParams, $tpayModel) + public function SetOrderStatus(string $orderId, array $validParams, TpayInterface $tpayModel) { $order = $this->getOrderById($orderId); + if (!$order->getId()) { return false; } + $sendNewInvoiceMail = (bool) $tpayModel->getInvoiceSendMail(); - $orderAmount = (float) number_format($order->getGrandTotal(), 2, '.', ''); + $orderAmount = (float) number_format((float) $order->getGrandTotal(), 2, '.', ''); $trStatus = $validParams['tr_status']; $emailNotify = false; - if ( - 'TRUE' === $trStatus - && ((float) number_format($validParams['tr_paid'], 2, '.', '') === $orderAmount) - ) { - if (Order::STATE_PROCESSING != $order->getState()) { + if ('TRUE' === $trStatus && ((float) number_format($validParams['tr_paid'], 2, '.', '') === $orderAmount)) { + if (Order::STATE_PROCESSING !== $order->getState()) { $emailNotify = true; } $status = Order::STATE_PROCESSING; @@ -135,7 +118,7 @@ public function SetOrderStatus($orderId, array $validParams, $tpayModel) return $order; } else { - if (Order::STATE_HOLDED != $order->getState()) { + if (Order::STATE_HOLDED !== $order->getState()) { $emailNotify = true; } $comment = __('The order has been holded: ').'
'.$this->getTransactionDesc($validParams); @@ -147,11 +130,8 @@ public function SetOrderStatus($orderId, array $validParams, $tpayModel) } $order->setStatus($status)->setState($status)->save(); if ($sendNewInvoiceMail) { - /** @var Invoice $invoice */ foreach ($order->getInvoiceCollection() as $invoice) { - /** @var int $invoiceId */ $invoiceId = $invoice->getId(); - $this->invoiceService->notify($invoiceId); } } @@ -159,23 +139,53 @@ public function SetOrderStatus($orderId, array $validParams, $tpayModel) return $order; } - /** - * Get Order object by orderId - * - * @param int $orderId - * - * @return Order - */ - public function getOrderById($orderId) + /** Get Order object by orderId */ + public function getOrderById(string $orderId): OrderInterface { return $this->orderRepository->getByIncrementId($orderId); } + public function setCardOrderStatus($orderId, array $validParams, $tpayModel) + { + /** @var Order $order */ + $order = $this->orderRepository->getByIncrementId($orderId); + if (!$order->getId()) { + return false; + } + $sendNewInvoiceMail = (bool) $tpayModel->getInvoiceSendMail(); + $transactionDesc = $this->getCardTransactionDesc($validParams); + $orderAmount = (float) number_format((float) $order->getGrandTotal(), 2, '.', ''); + $emailNotify = false; + + $order = $this->updateTransactionId($order, $validParams); + + if (!isset($validParams['status']) || 'correct' !== $validParams['status'] || ((float) number_format((float) $validParams['amount'], 2, '.', '') !== $orderAmount)) { + $comment = __('Payment has been declined. ').'
'.$transactionDesc; + $this->addCommentToHistory($orderId, $comment); + } else { + if (Order::STATE_PROCESSING != $order->getState()) { + $emailNotify = true; + } + $this->registerCardCaptureNotificationTpay($order->getPayment(), $order->getGrandTotal(), $validParams); + } + + if ($emailNotify) { + $order->setSendEmail(true); + } + $order->save(); + if ($sendNewInvoiceMail) { + foreach ($order->getInvoiceCollection() as $invoice) { + $invoiceId = $invoice->getId(); + $this->invoiceService->notify($invoiceId); + } + } + + return $order; + } + /** * Get description for transaction * - * @param array $validParams - * * @return bool|string */ protected function getTransactionDesc(array $validParams) @@ -191,42 +201,49 @@ protected function getTransactionDesc(array $validParams) if ('CHARGEBACK' === $status) { $transactionDesc .= __('Transaction has been refunded'); } - if (isset($validParams['test_mode'])) { + if (array_key_exists('test_mode', $validParams)) { $transactionDesc .= ' TEST '; } return $transactionDesc; } + protected function getCardTransactionDesc($validParams) + { + if (empty($validParams)) { + return false; + } + if (isset($validParams['err_desc'])) { + return 'Payment error: '.$validParams['err_desc'].', error code: '.$validParams['err_code']; + } + $error = null; + if ('declined' === $validParams['status']) { + $error = $validParams['reason']; + } + + $transactionDesc = (is_null($error)) ? ' ' : ' Reason: '.$error.''; + $transactionDesc .= (isset($validParams['test_mode'])) && 1 === (int) $validParams['test_mode'] ? ' TEST ' : ' '; + + return $transactionDesc; + } + /** * Registers capture notification. * - * @param Payment $payment * @param float|string $amount - * @param array $validParams * @param bool|int $skipFraudDetection */ - private function registerCaptureNotificationTpay( - OrderPaymentInterface $payment, - $amount, - $validParams, - $skipFraudDetection = false - ) { - $payment->setTransactionId( - $this->transactionManager->generateTransactionId( - $payment, - Transaction::TYPE_CAPTURE, - $payment->getAuthorizationTransaction() - ) - ); + private function registerCaptureNotificationTpay(OrderPaymentInterface $payment, $amount, array $validParams, $skipFraudDetection = false) + { + // @var $payment Payment + $payment->setTransactionId($this->transactionManager->generateTransactionId($payment, Transaction::TYPE_CAPTURE, $payment->getAuthorizationTransaction())); $order = $payment->getOrder(); $amount = (float) $amount; $invoice = $this->getInvoiceForTransactionId($order, $payment->getTransactionId()); - $orderCurrency = $order->getOrderCurrency()->getCode(); // register new capture - if (!$invoice && 'PLN' === $orderCurrency && $payment->isCaptureFinal($amount)) { + if (!$invoice && $payment->isCaptureFinal($amount)) { $invoice = $order->prepareInvoice()->register(); $invoice->setOrder($order); $order->addRelatedObject($invoice); @@ -245,14 +262,65 @@ private function registerCaptureNotificationTpay( } $message = $this->stateCommand->execute($payment, $amount, $order); - $payment->setTransactionId($validParams['tr_id']) + $payment + ->setTransactionId($validParams['tr_id']) ->setTransactionAdditionalInfo(Transaction::RAW_DETAILS, $validParams); - $transaction = $payment->addTransaction( - Transaction::TYPE_ORDER, - $invoice, - true - ); + + $transaction = $payment->addTransaction(Transaction::TYPE_ORDER, $invoice, true); $message = $payment->prependMessage($message); $payment->addTransactionCommentsToOrder($transaction, $message); } + + private function registerCardCaptureNotificationTpay(OrderPaymentInterface $payment, $amount, $validParams, $skipFraudDetection = false) + { + // @var $payment Payment + $payment->setTransactionId($this->transactionManager->generateTransactionId($payment, Transaction::TYPE_CAPTURE, $payment->getAuthorizationTransaction())); + + $order = $payment->getOrder(); + $amount = (float) $amount; + $invoice = $this->getInvoiceForTransactionId($order, $payment->getTransactionId()); + $orderCurrencyCode = $order->getOrderCurrency()->getCode(); + if (!in_array($orderCurrencyCode, CurrencyCodesDictionary::CODES)) { + throw new Exception(sprintf('Order currency %s does not exist in Tpay dictionary!', $orderCurrencyCode)); + } + $orderCurrency = array_search($orderCurrencyCode, CurrencyCodesDictionary::CODES); + // register new capture + if (!$invoice && $payment->isCaptureFinal($amount) && ($orderCurrency === (int) $validParams['currency'] || $orderCurrencyCode === $validParams['currency'])) { + $invoice = $order->prepareInvoice()->register(); + $invoice->setOrder($order); + $order->addRelatedObject($invoice); + $payment->setCreatedInvoice($invoice); + $payment->setShouldCloseParentTransaction(true); + $order->setState(Order::STATE_PROCESSING)->save(); + } else { + $payment->setIsFraudDetected(!$skipFraudDetection); + $this->updateTotals($payment, ['base_amount_paid_online' => $amount]); + } + + if (!$payment->getIsTransactionPending() && $invoice && Invoice::STATE_OPEN === $invoice->getState()) { + $invoice->setOrder($order); + $invoice->pay(); + $this->updateTotals($payment, ['base_amount_paid_online' => $amount]); + $order->addRelatedObject($invoice); + } + $payment + ->setTransactionId($validParams['sale_auth']) + ->setTransactionAdditionalInfo(Transaction::RAW_DETAILS, $validParams); + + $transaction = $payment->addTransaction(Transaction::TYPE_CAPTURE, $invoice, true); + $message = $this->stateCommand->execute($payment, $amount, $order); + $message = $payment->prependMessage($message); + $payment->addTransactionCommentsToOrder($transaction, $message); + } + + private function updateTransactionId(Order $order, array $validParams): Order + { + if (isset($validParams['transactionId'])) { + $additionalInfo = $order->getPayment()->getAdditionalInformation(); + $additionalInfo['transaction_id'] = $validParams['transactionId']; + $order->getPayment()->setAdditionalInformation($additionalInfo); + } + + return $order; + } } diff --git a/Service/TpayTokensService.php b/Service/TpayTokensService.php new file mode 100644 index 0000000..bba6463 --- /dev/null +++ b/Service/TpayTokensService.php @@ -0,0 +1,104 @@ +resourceConnection = $resourceConnection; + parent::__construct($context, $registry, $resource, $resourceCollection, $data); + } + + public function setCustomerToken(string $customerId, ?string $token, string $shortCode, string $vendor, ?string $crc = null) + { + $tokenEntity = $this->load($token, 'cli_auth'); + + if (!$tokenEntity->getId()) { + $this->setCustomerId($customerId) + ->setToken($token) + ->setShortCode($shortCode) + ->setVendor($vendor) + ->setCreationTime() + ->setCrc($crc) + ->save(); + } + } + + public function getCustomerTokens(string $customerId, bool $crcRequired = false): array + { + $connection = $this->resourceConnection->getConnection(); + $tableName = $connection->getTableName('tpay_credit_cards'); + + $select = $connection->select() + ->from($tableName) + ->where('cli_id = ?', $customerId) + ->where(new Zend_Db_Expr('cli_auth IS NOT NULL')) + ->where(new Zend_Db_Expr($crcRequired ? 'crc IS NOT NULL' : 'crc IS NULL')); + + $results = []; + foreach ($connection->fetchAll($select) as $token) { + $results[] = [ + 'tokenId' => $token['id'], + 'token' => $token['cli_auth'], + 'cardShortCode' => $token['short_code'], + 'vendor' => $token['vendor'], + 'crc' => $token['crc'], + ]; + } + + return $results; + } + + public function deleteCustomerToken(string $token): TpayTokensService + { + return $this->deleteToken($token)->save(); + } + + public function getWithoutAuthCustomerTokens(int $customerId, string $crc): array + { + foreach ($this->getToken($customerId) as $token) { + if (empty($token['crc'])) { + continue; + } + if ($token['crc'] === $crc && empty($token['token'])) { + return $token; + } + } + + return []; + } + + public function updateTokenById(int $tokenId, string $tokenValue) + { + $token = $this->load($tokenId); + $token->setToken($tokenValue); + $token->save(); + } + + public function getTokenById(int $tokenId, int $customerId, bool $crcRequired = true): ?array + { + $connection = $this->resourceConnection->getConnection(); + $tableName = $connection->getTableName('tpay_credit_cards'); + + $select = $connection->select() + ->from($tableName) + ->where('id = ?', $tokenId) + ->where('cli_id = ?', $customerId) + ->where(new Zend_Db_Expr($crcRequired ? 'crc IS NOT NULL' : 'crc IS NULL')); + + $result = $connection->fetchAll($select); + + return !empty($result) ? $result[0] : null; + } +} diff --git a/Setup/InstallSchema.php b/Setup/InstallSchema.php new file mode 100644 index 0000000..2fa4f81 --- /dev/null +++ b/Setup/InstallSchema.php @@ -0,0 +1,86 @@ +startSetup(); + + // Get tpay cards table + $tableName = $installer->getTable('tpay_credit_cards'); + // Check if the table already exists + if (true != $installer->getConnection()->isTableExists($tableName)) { + // Create table + $table = $installer->getConnection() + ->newTable($tableName) + ->addColumn( + 'id', + Table::TYPE_INTEGER, + null, + [ + 'identity' => true, + 'unsigned' => true, + 'nullable' => false, + 'primary' => true, + ], + 'ID' + ) + ->addColumn( + 'cli_auth', + Table::TYPE_TEXT, + null, + ['nullable' => false, 'default' => ''], + 'Token' + ) + ->addColumn( + 'cli_id', + Table::TYPE_TEXT, + null, + ['nullable' => false, 'default' => ''], + 'Summary' + ) + ->addColumn( + 'short_code', + Table::TYPE_TEXT, + null, + ['nullable' => false, 'default' => ''], + 'Description' + ) + ->addColumn( + 'vendor', + Table::TYPE_TEXT, + null, + ['nullable' => false, 'default' => ''], + 'Card vendor' + ) + ->addColumn( + 'crc', + Table::TYPE_TEXT, + null, + ['nullable' => false, 'default' => ''], + 'CRC' + ) + ->addColumn( + 'created_at', + Table::TYPE_DATETIME, + null, + ['nullable' => false], + 'Created At' + ) + ->setComment('Tpay credit cards') + ->setOption('type', 'InnoDB') + ->setOption('charset', 'utf8'); + $installer->getConnection()->createTable($table); + } + + $installer->endSetup(); + } +} diff --git a/Setup/Uninstall.php b/Setup/Uninstall.php new file mode 100644 index 0000000..92d64a8 --- /dev/null +++ b/Setup/Uninstall.php @@ -0,0 +1,20 @@ +startSetup(); + + $installer->getConnection()->dropTable($installer->getTable('tpay_credit_cards')); + + $installer->endSetup(); + } +} diff --git a/Setup/UpgradeSchema.php b/Setup/UpgradeSchema.php new file mode 100644 index 0000000..7b3f033 --- /dev/null +++ b/Setup/UpgradeSchema.php @@ -0,0 +1,15 @@ +install($setup, $context); + } +} diff --git a/composer.json b/composer.json index 8bd075d..d32d0aa 100755 --- a/composer.json +++ b/composer.json @@ -10,9 +10,14 @@ } ], "require": { - "php": ">=7", - "magento/product-community-edition": "^2.3", - "tpay-com/tpay-php": "^2.3" + "php": ">=7.1", + "ext-json": "*", + "magento/framework": "^100.0", + "magento/module-checkout": "^100.0", + "magento/module-payment": "^100.0", + "magento/module-sales": "^100.0", + "tpay-com/tpay-openapi-php": "^1.6.6", + "tpay-com/tpay-php": "^2.4.3" }, "autoload": { "psr-4": { diff --git a/etc/adminhtml/system.xml b/etc/adminhtml/system.xml index 3ca7725..e447116 100644 --- a/etc/adminhtml/system.xml +++ b/etc/adminhtml/system.xml @@ -12,72 +12,168 @@
- - Jeśli nie masz jeszcze konta, zarejestruj się w tpay.com ]]> + + tpay.com or sandbox system sandbox.tpay.com]]> Magento\Config\Model\Config\Source\Yesno - - - - - - validate-no-empty validate-number validate-length maximum-length-10 - - - - validate-no-empty validate-length maximum-length-32 - - - - no-whitespace validate-length maximum-length-126 - - - - no-whitespace validate-length maximum-length-40 - - - - Magento\Config\Model\Config\Source\Yesno - - - - Magento\Config\Model\Config\Source\Yesno - - - - Magento\Config\Model\Config\Source\Yesno - - - - Magento\Config\Model\Config\Source\Yesno - - - - Magento\Config\Model\Config\Source\Yesno - - - - validate-number - - - - Magento\Payment\Model\Config\Source\Allspecificcountries - - - - Magento\Directory\Model\Config\Source\Country - - - - validate-number - - - - Leave empty for no limit - validate-number - + + + 1 + + + validate-no-empty + + + + Your login for Merchant’s panel + validate-number validate-length maximum-length-10 + + + + Find in Merchant’s panel: Settings -> Notifications + validate-length maximum-length-32 + + + + Magento\Config\Model\Config\Source\Yesno + + + + Magento\Config\Model\Config\Source\Yesno + + + + Magento\Config\Model\Config\Source\Yesno + + + + Avoid using it in real production store + Magento\Config\Model\Config\Source\Yesno + + + + + + + Magento\Config\Model\Config\Source\Yesno + + + + Find in Merchant’s panel: Integration -> API -> Open API Keys + validate-length maximum-length-64 + 1 + + + + Find in Merchant’s panel: Integration -> API -> Open API Keys + validate-length maximum-length-64 + 1 + + + + Select the payment methods that you want to be displayed separately + 1 + tpaycom\magento2basic\Model\Config\Source\OnsiteChannels + 1 + + + + + + + Magento\Config\Model\Config\Source\Yesno + + + + Find in Merchant’s panel: Integration -> API -> Old API Keys + no-whitespace validate-length maximum-length-126 + 1 + + + + Find in Merchant’s panel: Integration -> API -> Old API Keys + no-whitespace validate-length maximum-length-40 + 1 + + + + + + + + Magento\Config\Model\Config\Source\Yesno + + + + 1 + + + Find in Merchant’s panel: Credit cards payment -> API + tpaycom\magento2basic\Model\Config\Source\HashTypes + + + + Find in Merchant’s panel: Credit cards payment -> API. In case of Sandbox, put not empty string. + + + + Find in Merchant’s panel: Credit cards payment -> API + no-whitespace validate-length maximum-length-126 + + + + Find in Merchant’s panel: Credit cards payment -> API + no-whitespace validate-length maximum-length-40 + + + + + validate-no-empty + 1 + + + + Find in Merchant’s panel: Credit cards payment -> API + 1 + + + + Only available for logged in users + Magento\Config\Model\Config\Source\Yesno + 1 + + + + + + + Magento\Config\Model\Config\Source\Yesno + + + + validate-number + + + + Magento\Payment\Model\Config\Source\Allspecificcountries + + + + Magento\Directory\Model\Config\Source\Country + + + + Leave empty for no limit + validate-number + + + + Leave empty for no limit + validate-number + +
diff --git a/etc/config.xml b/etc/config.xml index cdd16dc..f5303c0 100644 --- a/etc/config.xml +++ b/etc/config.xml @@ -27,8 +27,7 @@ 0 1 PLN - 1 - 0 + 0 diff --git a/etc/csp_whitelist.xml b/etc/csp_whitelist.xml index 6ca4386..4322ea9 100644 --- a/etc/csp_whitelist.xml +++ b/etc/csp_whitelist.xml @@ -6,36 +6,42 @@ https://secure.tpay.com + https://secure.sandbox.tpay.com https://tpay.com https://secure.tpay.com + https://secure.sandbox.tpay.com https://tpay.com https://secure.tpay.com + https://secure.sandbox.tpay.com https://tpay.com https://secure.tpay.com + https://secure.sandbox.tpay.com https://tpay.com https://secure.tpay.com + https://secure.sandbox.tpay.com https://tpay.com https://secure.tpay.com + https://secure.sandbox.tpay.com https://tpay.com diff --git a/etc/di.xml b/etc/di.xml index f4a2b78..bae4757 100644 --- a/etc/di.xml +++ b/etc/di.xml @@ -11,4 +11,10 @@ + + + + + + diff --git a/etc/frontend/di.xml b/etc/frontend/di.xml index 9c150f7..7eaf0e8 100644 --- a/etc/frontend/di.xml +++ b/etc/frontend/di.xml @@ -9,13 +9,6 @@ */ --> - - - - tpaycom\magento2basic\Model\Tpay::CODE - - - diff --git a/etc/module.xml b/etc/module.xml index 9421664..fb59980 100755 --- a/etc/module.xml +++ b/etc/module.xml @@ -9,7 +9,7 @@ */ --> - + diff --git a/etc/payment.xml b/etc/payment.xml index 66ff6ab..d0d4023 100644 --- a/etc/payment.xml +++ b/etc/payment.xml @@ -13,5 +13,11 @@ 1 + + 1 + + + 1 + diff --git a/i18n/pl_PL.csv b/i18n/pl_PL.csv index ad7fda0..4460bc9 100644 --- a/i18n/pl_PL.csv +++ b/i18n/pl_PL.csv @@ -3,28 +3,57 @@ "Active","Aktywny" "Description","Opis" "Merchant ID","ID Sprzedawcy" -"Secure code","Kod bezpieczeństwa" +"Security code","Kod bezpieczeństwa" "Show payment channels on front","Pokaż kanały płatności na stronie" -"Only online methods","Dostępne tylko płatności online" -"Redirect directly to bank","Przekieruj bezpośrednio do banku" +"Only online methods","Tylko metody płatności księgujące online" +"Redirect directly to bank","Bezpośrednie przekierowanie do banku" "API key","API Klucz" "API password","API Hasło" +"BLIK level zero","BLIK poziom zero" +"Sandbox mode","Tryb Sandbox" +"Client ID","Client ID" +"Secret","Secret" +"Signalize payment","Wyróżnij płatność" +"Key","Klucz" +"Password","Hasło" +"RSA key","Klucz RSA" +"Enable credit card saving","Włącz zapisywanie karty" +"Verification code","Kod weryfikacyjny" +"Card API key","Klucz API" +"Card API password","Hasło API" +"Digest algorithm","Algorytm podpisu" "Necessary for BLIK level zero payments","Wymagane przy włączonej opcji BLIK level zero" -"Sort order","Pozycja na liście" -"All or allowed countries","Dostępność z ograniczeniem państw" -"Allowed countries","Dostępność dla wybranych krajów" -"Minimal amount for method","Dostępność od minimalnej kwoty zamówienia" -"Maximal amount for method","Dostępność do maksymalnej kwoty zamówienia" -"Leave empty for no limit","Pozostaw puste, jeśli nie ma limitu" +"Sort order","Pozycja płatności" +"All or allowed countries","Wyszstkie czy dozwolone kraje" +"Allowed countries","Dozwolone kraje" +"Minimal amount","Minimalna kwota" +"Maximal amount for method","Maksymalna kwota" +"Leave empty for no limit","Puste pole bez ograniczeń" "Type in 6 digit code and press pay to commit blik payment.", "Wpisz 6 cyfrowy kod aby powiązać transakcję blik." "Choose a payment method","Wybierz jeden ze sposobów płatności" "I accept the regulations of Tpay.","Akceptuje regulamin Tpay." "There was an error during your payment.","Wystąpił błąd podczas Twojej płatności." "Thank you for your payment!","Dziękujemy za dokonanie płatności!" "I do accept Tpay service regulations","Akceptuję regulamin Tpay" -"My server use proxy","Mój serwer korzysta z proxy" -"Validate Tpay notifications server IP (recommended)","Sprawdzaj adres IP serwera powiadomień (zalecane)" +"Use sandbox mode (avoid using it in real production store)","Użyj trybu sandox (nie używaj tego na produkcyjnym sklepie)" "BLIK code","Kod BLIK" "Choose a payment method","Wybierz metodę płatności" "Transaction has been refunded","Transakcja została zwrócona" "The order has been holded","Zamówienie zostało wstrzymane" +"Send new invoice email to customer", "Wyślij wiadomość e-mail z fakturą do klienta" +"If you do not have an account yet, register in the production system at tpay.com or sandbox system panel.sandbox.tpay.com","Jeśli nie masz jeszcze konta, zarejestruj się w systemie produkcyjnym na tpay.com lub w systemie sandbox tpay.com" +"Your login for Merchant’s panel","Twój login do Panelu Akceptanta" +"Find in Merchant’s panel: Settings -> Notifications","Znajdziesz w Panelu Akceptanta: Ustawienia -> Powiadomienia" +"Avoid using it in real production store","Unikaj używania go w prawdziwym sklepie produkcyjnym" +"Find in Merchant’s panel: Integration -> API -> Open API Keys","Znajdziesz w Panelu Akceptanta: Integracje -> API -> Klucze do nowego Open API" +"Select the payment methods that you want to be displayed separately","Zaznacz metody płatności, które chcesz by wyświetlały sie jako osobne" +"Find in Merchant’s panel: Integration -> API -> Old API Keys","Znajdziesz w Panelu Akceptanta: Integracje -> API -> Klucze do starego API" +"Find in Merchant’s panel: Credit cards payment -> API","Znajdziesz w Panelu Akceptanta: Płatności kartami -> API" +"Find in Merchant’s panel: Credit cards payment -> API. In case of Sandbox, put not empty string.","Znajdziesz w Panelu Akceptanta: Płatności kartami -> API. W przypadku Sandbox, wpisz dowolny ciąg znaków." +"Only available for logged in users","Możliwe tylko dla zalogowanych użytkowników" +"General settings","Ustawienia główne" +"Standard payments (Open API)","Płatności standardowe (Open API)" +"Configuration Origin API","Konfiguracja Origin API" +"Cards payments On-site settings","Konfiguracja kart płatniczych On-site" +"Cards payments Origin API settings","Konfiguracja kart płatniczych Origin API" +"Additional settings","Dodatkowe ustawienia" diff --git a/view/base/web/css/tpay.css b/view/base/web/css/tpay.css index 344b868..995e47c 100644 --- a/view/base/web/css/tpay.css +++ b/view/base/web/css/tpay.css @@ -4,6 +4,7 @@ margin: 0 auto; box-sizing: border-box; background: #F7F7FA; + padding: 30px; } #blik_img { @@ -363,7 +364,6 @@ form select.wrong } .tpay-panel-inside-content { - margin: 30px; text-align: center; } @@ -404,28 +404,12 @@ form select.wrong margin-left: -1%; } -.tpay-channel-form-wrapper .tpay-col { - width: 48%; - margin: 0 1%; -} - -.tpay-channel-form-wrapper .tpay-input-wrapper { - width: 100%; - margin-top: 10px; - margin-bottom: 20px; -} - .tpay-channel-form-wrapper .tpay-input-wrapper.tpay-expiration-date-input { - width: 47%; display: inline-block; - padding-right: 4%; - margin-bottom: 10px; } .tpay-channel-form-wrapper .tpay-input-wrapper.tpay-cvv-input { - width: 47%; display: inline-block; - margin-bottom: 10px; } .tpay-channel-form-wrapper .tpay-input-wrapper.tpay-postcode { @@ -451,13 +435,6 @@ form select.wrong width: 100%; } -@media only screen and (max-width: 650px) { - .tpay-channel-form-wrapper .tpay-col { - width: 100%; - margin: 0; - } -} - .tpay-input-wrapper { position: relative; } @@ -565,20 +542,6 @@ form select.wrong cursor: help; } -.tpay-row { - overflow: hidden; -} - -.tpay-col { - float: left; -} - -.tpay-input-credit-card-number { - padding-left: 1%; - padding-right: 1%; - width: 98%; -} - .tpay-input-blik-code { padding: 0 25% 5px 25%; } @@ -600,3 +563,40 @@ form select.wrong text-align: center; letter-spacing: 10px; } + +.tpay-payment-method .payment-method-title { + display: flex; + align-items: center; +} + +.tpay-payment-method .payment-method-title .label { + display: flex; + align-items: center; +} + +.tpay-payment-method .payment-method-title .label .payment-icon { + width: 170px; + max-height: 54px; +} + +#tpay-basic-main-payment p { + margin-top: 10px; + margin-bottom: 10px; +} + +.TpayRegulations { + display: flex; + align-items: center; + margin: 0 auto; + padding: 16px 0; + gap: 8px; +} + +.TpayRegulations input { + margin: 0; + position: static; +} + +.tpay-regulations-offset { + max-width: 630px; +} \ No newline at end of file diff --git a/view/base/web/css/tpaycards.css b/view/base/web/css/tpaycards.css new file mode 100644 index 0000000..8c35d9b --- /dev/null +++ b/view/base/web/css/tpaycards.css @@ -0,0 +1,598 @@ +.tpay-insidebg { + width: 100%; + max-width: 630px; + margin: 0 auto; + box-sizing: border-box; + background: #F7F7FA; + padding-bottom: 3px; + padding: 30px; +} + +#blik_img { + top: 20px; + bottom: 8px; + left: 10px; +} + +.tpay-powered_by { + margin-left: 20px; + align-content: center; + background-image: url("https://tpay.com/img/banners/powered_by_tpay.svg"); + background-size: 170px 33px; + background-repeat: no-repeat; + margin-bottom: 1em; + width: 170px; + height: 33px; + display: block; +} + +#card_icons { + width: 100%; + text-align: center; + margin: 100px 0 15px 0; +} + +#card_icons .tpay-card_icon { + display: inline-block; + width: 44px; + height: 30px; + margin: 0 3px; + opacity: 0.6; + background-image: url('data:image/png;base64,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'); + background-size: 320px; +} + +#card_icons .tpay-card_icon.tpay-hover { + opacity: 1; +} + +.tpay-visa-icon { + height: 23px; + width: 35px; + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACMAAAAXCAYAAACBMvbiAAAACXBIWXMAAAsTAAALEwEAmpwYAABAb2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxMzIgNzkuMTU5Mjg0LCAyMDE2LzA0LzE5LTEzOjEzOjQwICAgICAgICAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgICAgICAgICB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOnhtcFJpZ2h0cz0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3JpZ2h0cy8iCiAgICAgICAgICAgIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIgogICAgICAgICAgICB4bWxuczpleGlmPSJodHRwOi8vbnMuYWRvYmUuY29tL2V4aWYvMS4wLyI+CiAgICAgICAgIDx4bXBNTTpEb2N1bWVudElEPmFkb2JlOmRvY2lkOnBob3Rvc2hvcDoxMjllMzUzZi05MmE1LTExZTktOGVjZC1jNTU5MGM3MGZhMzM8L3htcE1NOkRvY3VtZW50SUQ+CiAgICAgICAgIDx4bXBNTTpJbnN0YW5jZUlEPnhtcC5paWQ6YTA1MDAxZDMtNDM4Mi05YTRjLWJmMDctMDAyYjVjMDc2ZTkwPC94bXBNTTpJbnN0YW5jZUlEPgogICAgICAgICA8eG1wTU06T3JpZ2luYWxEb2N1bWVudElEPnV1aWQ6Qjc1MUJEQkIyMUZBRTcxMUJDNEY5MTAzN0M2ODY4QTI8L3htcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD4KICAgICAgICAgPHhtcE1NOkhpc3Rvcnk+CiAgICAgICAgICAgIDxyZGY6U2VxPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5zYXZlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOmI5NWExYmYyLTc1MGItOTg0YS05NGZhLTRhNDg3NWE3ZDVjNjwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAxOS0wNi0xOVQxNzoxNTo0MCswMjowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ+QWRvYmUgUGhvdG9zaG9wIENDIDIwMTUuNSAoV2luZG93cyk8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpjaGFuZ2VkPi88L3N0RXZ0OmNoYW5nZWQ+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5jb252ZXJ0ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnBhcmFtZXRlcnM+ZnJvbSBpbWFnZS9qcGVnIHRvIGltYWdlL3BuZzwvc3RFdnQ6cGFyYW1ldGVycz4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPmRlcml2ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnBhcmFtZXRlcnM+Y29udmVydGVkIGZyb20gaW1hZ2UvanBlZyB0byBpbWFnZS9wbmc8L3N0RXZ0OnBhcmFtZXRlcnM+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5zYXZlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOmEwNTAwMWQzLTQzODItOWE0Yy1iZjA3LTAwMmI1YzA3NmU5MDwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAxOS0wNi0xOVQxNzoxNTo0MCswMjowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ+QWRvYmUgUGhvdG9zaG9wIENDIDIwMTUuNSAoV2luZG93cyk8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpjaGFuZ2VkPi88L3N0RXZ0OmNoYW5nZWQ+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICA8L3JkZjpTZXE+CiAgICAgICAgIDwveG1wTU06SGlzdG9yeT4KICAgICAgICAgPHhtcE1NOkRlcml2ZWRGcm9tIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgPHN0UmVmOmluc3RhbmNlSUQ+eG1wLmlpZDpiOTVhMWJmMi03NTBiLTk4NGEtOTRmYS00YTQ4NzVhN2Q1YzY8L3N0UmVmOmluc3RhbmNlSUQ+CiAgICAgICAgICAgIDxzdFJlZjpkb2N1bWVudElEPnV1aWQ6Qjc1MUJEQkIyMUZBRTcxMUJDNEY5MTAzN0M2ODY4QTI8L3N0UmVmOmRvY3VtZW50SUQ+CiAgICAgICAgICAgIDxzdFJlZjpvcmlnaW5hbERvY3VtZW50SUQ+dXVpZDpCNzUxQkRCQjIxRkFFNzExQkM0RjkxMDM3QzY4NjhBMjwvc3RSZWY6b3JpZ2luYWxEb2N1bWVudElEPgogICAgICAgICA8L3htcE1NOkRlcml2ZWRGcm9tPgogICAgICAgICA8eG1wOkNyZWF0ZURhdGU+MjAxOC0wMS0xNVQxNToyMjowNy0wNTowMDwveG1wOkNyZWF0ZURhdGU+CiAgICAgICAgIDx4bXA6TW9kaWZ5RGF0ZT4yMDE5LTA2LTE5VDE3OjE1OjQwKzAyOjAwPC94bXA6TW9kaWZ5RGF0ZT4KICAgICAgICAgPHhtcDpNZXRhZGF0YURhdGU+MjAxOS0wNi0xOVQxNzoxNTo0MCswMjowMDwveG1wOk1ldGFkYXRhRGF0ZT4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ0MgMjAxNS41IChXaW5kb3dzKTwveG1wOkNyZWF0b3JUb29sPgogICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3BuZzwvZGM6Zm9ybWF0PgogICAgICAgICA8cGhvdG9zaG9wOkxlZ2FjeUlQVENEaWdlc3Q+MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE8L3Bob3Rvc2hvcDpMZWdhY3lJUFRDRGlnZXN0PgogICAgICAgICA8cGhvdG9zaG9wOkNvbG9yTW9kZT4zPC9waG90b3Nob3A6Q29sb3JNb2RlPgogICAgICAgICA8cGhvdG9zaG9wOklDQ1Byb2ZpbGUvPgogICAgICAgICA8eG1wUmlnaHRzOk1hcmtlZD5GYWxzZTwveG1wUmlnaHRzOk1hcmtlZD4KICAgICAgICAgPHRpZmY6SW1hZ2VXaWR0aD4xMDgwPC90aWZmOkltYWdlV2lkdGg+CiAgICAgICAgIDx0aWZmOkltYWdlTGVuZ3RoPjY0ODwvdGlmZjpJbWFnZUxlbmd0aD4KICAgICAgICAgPHRpZmY6Qml0c1BlclNhbXBsZT4KICAgICAgICAgICAgPHJkZjpTZXE+CiAgICAgICAgICAgICAgIDxyZGY6bGk+ODwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpPjg8L3JkZjpsaT4KICAgICAgICAgICAgICAgPHJkZjpsaT44PC9yZGY6bGk+CiAgICAgICAgICAgIDwvcmRmOlNlcT4KICAgICAgICAgPC90aWZmOkJpdHNQZXJTYW1wbGU+CiAgICAgICAgIDx0aWZmOlBob3RvbWV0cmljSW50ZXJwcmV0YXRpb24+MjwvdGlmZjpQaG90b21ldHJpY0ludGVycHJldGF0aW9uPgogICAgICAgICA8dGlmZjpPcmllbnRhdGlvbj4xPC90aWZmOk9yaWVudGF0aW9uPgogICAgICAgICA8dGlmZjpTYW1wbGVzUGVyUGl4ZWw+MzwvdGlmZjpTYW1wbGVzUGVyUGl4ZWw+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjcyMDAwMC8xMDAwMDwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+NzIwMDAwLzEwMDAwPC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpSZXNvbHV0aW9uVW5pdD4yPC90aWZmOlJlc29sdXRpb25Vbml0PgogICAgICAgICA8ZXhpZjpFeGlmVmVyc2lvbj4wMjIxPC9leGlmOkV4aWZWZXJzaW9uPgogICAgICAgICA8ZXhpZjpDb2xvclNwYWNlPjY1NTM1PC9leGlmOkNvbG9yU3BhY2U+CiAgICAgICAgIDxleGlmOlBpeGVsWERpbWVuc2lvbj4zNTwvZXhpZjpQaXhlbFhEaW1lbnNpb24+CiAgICAgICAgIDxleGlmOlBpeGVsWURpbWVuc2lvbj4yMzwvZXhpZjpQaXhlbFlEaW1lbnNpb24+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIAo8P3hwYWNrZXQgZW5kPSJ3Ij8+b4zyjwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAFLUlEQVR42syWWWzUVRTGf/e/zky3zLSlLZZFoThQgWININpioUUaikYwICAC8cGoRB/UCJqqMRqXqGj0EUEJESEmilhFqUoMYlhNE2URCy0dSm2t05npLP/dhwGB6rtzkvNwc5P7ffcs3zmievrGC0AB/78lFGA0uWEFCjiJnImM67rkiknkkCkgkGSBZTlEo8O4jpe9EVBUGCCQp+O6Hq7rMjiYwHFcgsF8XMclFk/h0zVCxfl4rsdQLEVsKInrevj9GiUlBSiqjBCC4eEMiUQaPAiF8tF1Becy1mUywnMxUjb5+T7qF9ciSxI9kUEyGZOuc/1khjP4/RqpZJrwpHL8AR/D8RSxWIqJE8bjuR7d3X/Sda6f8JQKbp8zEVWTudg7RF/vEJ7lkEwZCFlQM20MCIneyCCOaSMkMSIyroXnWNgmBHSJxYtvobFxOp7nse3D/axfvxlVk5g6dSzf7H0GXddY1PIyLYtmsHHDPbS1HaGl5Vme3rCap568m+Liwn8eX37fW+zefQRNkdi56wmam2cAgpUr32TPnuOMHVcC3tU1IyCQp2HZDlu2fkdT03N8tOMHhBAsX3Ebo8cEiUb7WXLvbHRdY2AgxsEfT3LvkpkA7P26g4aGmbz6ymqKiwvZ195B25fH6OuLkkymMTIJbqsL09x8czb3QPVNYxlOprPHq1wCcBwPWZYYP34Uiqqxa+cBAHy6RllpEapeyPJltwPw6mufISsKVZOuA+CHAydY+2ATAKdORVjQtIGWRY9Tf0crkZ6/QKisWXMHAMlkKkumehy6rsKIRpY8Dy6747iUlwc5feYiieE0ALIsmD1rEuVlQcBj8+Z26uomA2BZNmc7++g69wcA4XAl+/e/wYKFjZw53UPvxSjV1WNYuvRW0mmTNzd9DkBt7fWMGlVIJmNyNb7keQ5Xe16eRmfnRQ7+eAqACRPKuOuuWgD27DlMPHaC+rowACdP9eC5Hm9v2s2OHfsBmDu3mq+/eoGHH2lmoP8ES+6ZhaoobNv+Lc+3bsG2HcZUllJZGSKeSF2DLWVjdcUlycUyMhw9dgaA9Y82s+aBBgC2fvA9oDNlcjZFv/4SITkcI/pXjJUrX6dpQSvHj/8OwMsvraKgcDRLlt4KgK5p3LlwNvF4EoCqqgri8cS12COFx/PAH/DR0XEWgJoZEyktDXL6twhtbYcor5hETc0EAH46eJKS0hDLltVRVlFC+759HD2a/URXdz9z62dQM/0GANaumc/er14kFMp229Sp4zANa4TO/IcSFocK+fl4J7Zlo6gKAB9u/RbTuMCcOTMpKw8C8EXbIdatm8/rr62j748ouqYSDOYD8M6mT1l1fz0A3V197Np1ACEEDfOmUVtbxbyGafj9Oq7tIivSJZ3x/k0mP89H5MIA27d/R2PjdKLRFJ9/dhhVLSEUzOdCpJ/oUIo/BxIMDsSIRAaorCzN1tGJHt59bzft7R20tq7gfHc/GzZu4+OPPwEEjfObeH/LY1imQUV5EZblIMtZMqLqxofiI6e2ENnOMg0TXVcwMjYICX/AhyyDZZqYpoPu00nEk2iaTEVFMZ7ncf78AH19UcKTx6IqglTKxDBsAnk+AAzDRJEFqiojJAnLchFCZKe2EPa/IiMAVRE4NqTSBrIkCAQUJMnGMCwyGRtZEkiSQ1GRj1TKoLMzAkBeno9weDSObZCIm0B2TkmXcFQF0mkDwxQEAhqydEWERfjGB+O5ss/k1AqRW/uM67oFOcKlQAF6c6Vm/h4A3wUxegHlIB0AAAAASUVORK5CYII='); +} + +.tpay-amex-icon { + height: 22px; + width: 35px; + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACMAAAAWCAYAAABKbiVHAAAACXBIWXMAAAsTAAALEwEAmpwYAAA4KGlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxMzIgNzkuMTU5Mjg0LCAyMDE2LzA0LzE5LTEzOjEzOjQwICAgICAgICAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgICAgICAgICAgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ0MgMjAxNS41IChXaW5kb3dzKTwveG1wOkNyZWF0b3JUb29sPgogICAgICAgICA8eG1wOkNyZWF0ZURhdGU+MjAxOS0wNi0xOVQxNzo1MDowOCswMjowMDwveG1wOkNyZWF0ZURhdGU+CiAgICAgICAgIDx4bXA6TW9kaWZ5RGF0ZT4yMDE5LTA2LTE5VDE3OjU1OjMwKzAyOjAwPC94bXA6TW9kaWZ5RGF0ZT4KICAgICAgICAgPHhtcDpNZXRhZGF0YURhdGU+MjAxOS0wNi0xOVQxNzo1NTozMCswMjowMDwveG1wOk1ldGFkYXRhRGF0ZT4KICAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9wbmc8L2RjOmZvcm1hdD4KICAgICAgICAgPHBob3Rvc2hvcDpDb2xvck1vZGU+MzwvcGhvdG9zaG9wOkNvbG9yTW9kZT4KICAgICAgICAgPHhtcE1NOkluc3RhbmNlSUQ+eG1wLmlpZDowMzdkYmY4NS0zNzU1LTUzNDQtYjk5Yy1mNGQyNDUzNmM5YzE8L3htcE1NOkluc3RhbmNlSUQ+CiAgICAgICAgIDx4bXBNTTpEb2N1bWVudElEPnhtcC5kaWQ6MDM3ZGJmODUtMzc1NS01MzQ0LWI5OWMtZjRkMjQ1MzZjOWMxPC94bXBNTTpEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06T3JpZ2luYWxEb2N1bWVudElEPnhtcC5kaWQ6MDM3ZGJmODUtMzc1NS01MzQ0LWI5OWMtZjRkMjQ1MzZjOWMxPC94bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ+CiAgICAgICAgIDx4bXBNTTpIaXN0b3J5PgogICAgICAgICAgICA8cmRmOlNlcT4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24+Y3JlYXRlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjAzN2RiZjg1LTM3NTUtNTM0NC1iOTljLWY0ZDI0NTM2YzljMTwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAxOS0wNi0xOVQxNzo1MDowOCswMjowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ+QWRvYmUgUGhvdG9zaG9wIENDIDIwMTUuNSAoV2luZG93cyk8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICA8L3JkZjpTZXE+CiAgICAgICAgIDwveG1wTU06SGlzdG9yeT4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPHRpZmY6WFJlc29sdXRpb24+NzIwMDAwLzEwMDAwPC90aWZmOlhSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpZUmVzb2x1dGlvbj43MjAwMDAvMTAwMDA8L3RpZmY6WVJlc29sdXRpb24+CiAgICAgICAgIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiAgICAgICAgIDxleGlmOkNvbG9yU3BhY2U+NjU1MzU8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6UGl4ZWxYRGltZW5zaW9uPjM1PC9leGlmOlBpeGVsWERpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjIyPC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAg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'); +} + +.tpay-jcb-icon { + height: 23px; + width: 30px; + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAXCAYAAAAcP/9qAAAACXBIWXMAAAsTAAALEwEAmpwYAAA4ImlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxMzIgNzkuMTU5Mjg0LCAyMDE2LzA0LzE5LTEzOjEzOjQwICAgICAgICAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgICAgICAgICAgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ0MgMjAxNS41IChXaW5kb3dzKTwveG1wOkNyZWF0b3JUb29sPgogICAgICAgICA8eG1wOkNyZWF0ZURhdGU+MjAxOS0wNi0xOVQxNzo1MyswMjowMDwveG1wOkNyZWF0ZURhdGU+CiAgICAgICAgIDx4bXA6TW9kaWZ5RGF0ZT4yMDE5LTA2LTE5VDE3OjU2OjI2KzAyOjAwPC94bXA6TW9kaWZ5RGF0ZT4KICAgICAgICAgPHhtcDpNZXRhZGF0YURhdGU+MjAxOS0wNi0xOVQxNzo1NjoyNiswMjowMDwveG1wOk1ldGFkYXRhRGF0ZT4KICAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9wbmc8L2RjOmZvcm1hdD4KICAgICAgICAgPHBob3Rvc2hvcDpDb2xvck1vZGU+MzwvcGhvdG9zaG9wOkNvbG9yTW9kZT4KICAgICAgICAgPHhtcE1NOkluc3RhbmNlSUQ+eG1wLmlpZDozZTE0OTFmMS05OGQ0LWFhNGEtYWMzNC1mZjA0MmM4MmI0M2Y8L3htcE1NOkluc3RhbmNlSUQ+CiAgICAgICAgIDx4bXBNTTpEb2N1bWVudElEPnhtcC5kaWQ6M2UxNDkxZjEtOThkNC1hYTRhLWFjMzQtZmYwNDJjODJiNDNmPC94bXBNTTpEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06T3JpZ2luYWxEb2N1bWVudElEPnhtcC5kaWQ6M2UxNDkxZjEtOThkNC1hYTRhLWFjMzQtZmYwNDJjODJiNDNmPC94bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ+CiAgICAgICAgIDx4bXBNTTpIaXN0b3J5PgogICAgICAgICAgICA8cmRmOlNlcT4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24+Y3JlYXRlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjNlMTQ5MWYxLTk4ZDQtYWE0YS1hYzM0LWZmMDQyYzgyYjQzZjwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAxOS0wNi0xOVQxNzo1MyswMjowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ+QWRvYmUgUGhvdG9zaG9wIENDIDIwMTUuNSAoV2luZG93cyk8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICA8L3JkZjpTZXE+CiAgICAgICAgIDwveG1wTU06SGlzdG9yeT4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPHRpZmY6WFJlc29sdXRpb24+NzIwMDAwLzEwMDAwPC90aWZmOlhSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpZUmVzb2x1dGlvbj43MjAwMDAvMTAwMDA8L3RpZmY6WVJlc29sdXRpb24+CiAgICAgICAgIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiAgICAgICAgIDxleGlmOkNvbG9yU3BhY2U+NjU1MzU8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6UGl4ZWxYRGltZW5zaW9uPjMwPC9leGlmOlBpeGVsWERpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjIzPC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg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'); +} + +.tpay-mastercard-icon { + height: 23px; + width: 38px; + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACYAAAAXCAYAAABnGz2mAAAACXBIWXMAAAsTAAALEwEAmpwYAAA/hmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxMzIgNzkuMTU5Mjg0LCAyMDE2LzA0LzE5LTEzOjEzOjQwICAgICAgICAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiCiAgICAgICAgICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgICAgICAgICAgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIgogICAgICAgICAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIgogICAgICAgICAgICB4bWxuczpleGlmPSJodHRwOi8vbnMuYWRvYmUuY29tL2V4aWYvMS4wLyI+CiAgICAgICAgIDx4bXBNTTpEb2N1bWVudElEPmFkb2JlOmRvY2lkOnBob3Rvc2hvcDowN2U4M2JlZS05MmFiLTExZTktOGVjZC1jNTU5MGM3MGZhMzM8L3htcE1NOkRvY3VtZW50SUQ+CiAgICAgICAgIDx4bXBNTTpJbnN0YW5jZUlEPnhtcC5paWQ6OWRmZGNjNmEtODI4Ny05ZjQxLTk0YzQtNjBmMzE0MjVlZmExPC94bXBNTTpJbnN0YW5jZUlEPgogICAgICAgICA8eG1wTU06T3JpZ2luYWxEb2N1bWVudElEPjk5RDAwMEY1OUMyNkNERDNGQjU1RUFCMDkzRkNDNkNCPC94bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ+CiAgICAgICAgIDx4bXBNTTpIaXN0b3J5PgogICAgICAgICAgICA8cmRmOlNlcT4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24+c2F2ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0Omluc3RhbmNlSUQ+eG1wLmlpZDoxY2ZkMzEyYy0zMTJkLTVlNGMtOGNhNi02MGI0M2I5YTE5MmQ8L3N0RXZ0Omluc3RhbmNlSUQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDp3aGVuPjIwMTktMDYtMTlUMTc6NTg6MjArMDI6MDA8L3N0RXZ0OndoZW4+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpzb2Z0d2FyZUFnZW50PkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE1LjUgKFdpbmRvd3MpPC9zdEV2dDpzb2Z0d2FyZUFnZW50PgogICAgICAgICAgICAgICAgICA8c3RFdnQ6Y2hhbmdlZD4vPC9zdEV2dDpjaGFuZ2VkPgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24+Y29udmVydGVkPC9zdEV2dDphY3Rpb24+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpwYXJhbWV0ZXJzPmZyb20gaW1hZ2UvanBlZyB0byBpbWFnZS9wbmc8L3N0RXZ0OnBhcmFtZXRlcnM+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5kZXJpdmVkPC9zdEV2dDphY3Rpb24+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpwYXJhbWV0ZXJzPmNvbnZlcnRlZCBmcm9tIGltYWdlL2pwZWcgdG8gaW1hZ2UvcG5nPC9zdEV2dDpwYXJhbWV0ZXJzPgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24+c2F2ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0Omluc3RhbmNlSUQ+eG1wLmlpZDo5ZGZkY2M2YS04Mjg3LTlmNDEtOTRjNC02MGYzMTQyNWVmYTE8L3N0RXZ0Omluc3RhbmNlSUQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDp3aGVuPjIwMTktMDYtMTlUMTc6NTg6MjArMDI6MDA8L3N0RXZ0OndoZW4+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpzb2Z0d2FyZUFnZW50PkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE1LjUgKFdpbmRvd3MpPC9zdEV2dDpzb2Z0d2FyZUFnZW50PgogICAgICAgICAgICAgICAgICA8c3RFdnQ6Y2hhbmdlZD4vPC9zdEV2dDpjaGFuZ2VkPgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6U2VxPgogICAgICAgICA8L3htcE1NOkhpc3Rvcnk+CiAgICAgICAgIDx4bXBNTTpEZXJpdmVkRnJvbSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgIDxzdFJlZjppbnN0YW5jZUlEPnhtcC5paWQ6MWNmZDMxMmMtMzEyZC01ZTRjLThjYTYtNjBiNDNiOWExOTJkPC9zdFJlZjppbnN0YW5jZUlEPgogICAgICAgICAgICA8c3RSZWY6ZG9jdW1lbnRJRD45OUQwMDBGNTlDMjZDREQzRkI1NUVBQjA5M0ZDQzZDQjwvc3RSZWY6ZG9jdW1lbnRJRD4KICAgICAgICAgICAgPHN0UmVmOm9yaWdpbmFsRG9jdW1lbnRJRD45OUQwMDBGNTlDMjZDREQzRkI1NUVBQjA5M0ZDQzZDQjwvc3RSZWY6b3JpZ2luYWxEb2N1bWVudElEPgogICAgICAgICA8L3htcE1NOkRlcml2ZWRGcm9tPgogICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3BuZzwvZGM6Zm9ybWF0PgogICAgICAgICA8cGhvdG9zaG9wOkNvbG9yTW9kZT4zPC9waG90b3Nob3A6Q29sb3JNb2RlPgogICAgICAgICA8cGhvdG9zaG9wOklDQ1Byb2ZpbGUvPgogICAgICAgICA8eG1wOkNyZWF0ZURhdGU+MjAxOS0wNi0xOVQxNzo0NzoxNiswMjowMDwveG1wOkNyZWF0ZURhdGU+CiAgICAgICAgIDx4bXA6TW9kaWZ5RGF0ZT4yMDE5LTA2LTE5VDE3OjU4OjIwKzAyOjAwPC94bXA6TW9kaWZ5RGF0ZT4KICAgICAgICAgPHhtcDpNZXRhZGF0YURhdGU+MjAxOS0wNi0xOVQxNzo1ODoyMCswMjowMDwveG1wOk1ldGFkYXRhRGF0ZT4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ0MgMjAxNS41IChXaW5kb3dzKTwveG1wOkNyZWF0b3JUb29sPgogICAgICAgICA8dGlmZjpJbWFnZVdpZHRoPjYwMDwvdGlmZjpJbWFnZVdpZHRoPgogICAgICAgICA8dGlmZjpJbWFnZUxlbmd0aD4zNTk8L3RpZmY6SW1hZ2VMZW5ndGg+CiAgICAgICAgIDx0aWZmOkJpdHNQZXJTYW1wbGU+CiAgICAgICAgICAgIDxyZGY6U2VxPgogICAgICAgICAgICAgICA8cmRmOmxpPjg8L3JkZjpsaT4KICAgICAgICAgICAgICAgPHJkZjpsaT44PC9yZGY6bGk+CiAgICAgICAgICAgICAgIDxyZGY6bGk+ODwvcmRmOmxpPgogICAgICAgICAgICA8L3JkZjpTZXE+CiAgICAgICAgIDwvdGlmZjpCaXRzUGVyU2FtcGxlPgogICAgICAgICA8dGlmZjpQaG90b21ldHJpY0ludGVycHJldGF0aW9uPjI8L3RpZmY6UGhvdG9tZXRyaWNJbnRlcnByZXRhdGlvbj4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPHRpZmY6U2FtcGxlc1BlclBpeGVsPjM8L3RpZmY6U2FtcGxlc1BlclBpeGVsPgogICAgICAgICA8dGlmZjpYUmVzb2x1dGlvbj43MjAwMDAvMTAwMDA8L3RpZmY6WFJlc29sdXRpb24+CiAgICAgICAgIDx0aWZmOllSZXNvbHV0aW9uPjcyMDAwMC8xMDAwMDwvdGlmZjpZUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6UmVzb2x1dGlvblVuaXQ+MjwvdGlmZjpSZXNvbHV0aW9uVW5pdD4KICAgICAgICAgPGV4aWY6RXhpZlZlcnNpb24+MDIyMTwvZXhpZjpFeGlmVmVyc2lvbj4KICAgICAgICAgPGV4aWY6Q29sb3JTcGFjZT42NTUzNTwvZXhpZjpDb2xvclNwYWNlPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+Mzg8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFlEaW1lbnNpb24+MjM8L2V4aWY6UGl4ZWxZRGltZW5zaW9uPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAg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'); +} + +.tpay-maestro-icon { + height: 23px; + width: 38px; + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACYAAAAXCAYAAABnGz2mAAAACXBIWXMAAAsTAAALEwEAmpwYAAA4KGlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxMzIgNzkuMTU5Mjg0LCAyMDE2LzA0LzE5LTEzOjEzOjQwICAgICAgICAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgICAgICAgICAgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ0MgMjAxNS41IChXaW5kb3dzKTwveG1wOkNyZWF0b3JUb29sPgogICAgICAgICA8eG1wOkNyZWF0ZURhdGU+MjAxOS0wNi0xOVQxNzo0MzozMCswMjowMDwveG1wOkNyZWF0ZURhdGU+CiAgICAgICAgIDx4bXA6TW9kaWZ5RGF0ZT4yMDE5LTA2LTE5VDE3OjU5OjA0KzAyOjAwPC94bXA6TW9kaWZ5RGF0ZT4KICAgICAgICAgPHhtcDpNZXRhZGF0YURhdGU+MjAxOS0wNi0xOVQxNzo1OTowNCswMjowMDwveG1wOk1ldGFkYXRhRGF0ZT4KICAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9wbmc8L2RjOmZvcm1hdD4KICAgICAgICAgPHBob3Rvc2hvcDpDb2xvck1vZGU+MzwvcGhvdG9zaG9wOkNvbG9yTW9kZT4KICAgICAgICAgPHhtcE1NOkluc3RhbmNlSUQ+eG1wLmlpZDoxNTYzOTVkZi0yMTY5LWRmNDEtOWNjZS1mMTZmZGQzZmNjMzU8L3htcE1NOkluc3RhbmNlSUQ+CiAgICAgICAgIDx4bXBNTTpEb2N1bWVudElEPnhtcC5kaWQ6MTU2Mzk1ZGYtMjE2OS1kZjQxLTljY2UtZjE2ZmRkM2ZjYzM1PC94bXBNTTpEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06T3JpZ2luYWxEb2N1bWVudElEPnhtcC5kaWQ6MTU2Mzk1ZGYtMjE2OS1kZjQxLTljY2UtZjE2ZmRkM2ZjYzM1PC94bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ+CiAgICAgICAgIDx4bXBNTTpIaXN0b3J5PgogICAgICAgICAgICA8cmRmOlNlcT4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24+Y3JlYXRlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjE1NjM5NWRmLTIxNjktZGY0MS05Y2NlLWYxNmZkZDNmY2MzNTwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAxOS0wNi0xOVQxNzo0MzozMCswMjowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ+QWRvYmUgUGhvdG9zaG9wIENDIDIwMTUuNSAoV2luZG93cyk8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICA8L3JkZjpTZXE+CiAgICAgICAgIDwveG1wTU06SGlzdG9yeT4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPHRpZmY6WFJlc29sdXRpb24+NzIwMDAwLzEwMDAwPC90aWZmOlhSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpZUmVzb2x1dGlvbj43MjAwMDAvMTAwMDA8L3RpZmY6WVJlc29sdXRpb24+CiAgICAgICAgIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiAgICAgICAgIDxleGlmOkNvbG9yU3BhY2U+NjU1MzU8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6UGl4ZWxYRGltZW5zaW9uPjM4PC9leGlmOlBpeGVsWERpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjIzPC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAg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'); +} + +.tpay-dinersclub-icon { + height: 23px; + width: 36px; + background-image: url('data:image/png;base64,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/GMzLdsAADskaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjYtYzEzMiA3OS4xNTkyODQsIDIwMTYvMDQvMTktMTM6MTM6NDAgICAgICAgICI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgICAgICAgICB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgICAgICAgICB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIgogICAgICAgICAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgICAgICAgICAgeG1sbnM6ZXhpZj0iaHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8iPgogICAgICAgICA8eG1wOkNyZWF0b3JUb29sPkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE1LjUgKFdpbmRvd3MpPC94bXA6Q3JlYXRvclRvb2w+CiAgICAgICAgIDx4bXA6Q3JlYXRlRGF0ZT4yMDE5LTA2LTE5VDE4OjAwOjUxKzAyOjAwPC94bXA6Q3JlYXRlRGF0ZT4KICAgICAgICAgPHhtcDpNb2RpZnlEYXRlPjIwMTktMDYtMTlUMTg6MDE6MjUrMDI6MDA8L3htcDpNb2RpZnlEYXRlPgogICAgICAgICA8eG1wOk1ldGFkYXRhRGF0ZT4yMDE5LTA2LTE5VDE4OjAxOjI1KzAyOjAwPC94bXA6TWV0YWRhdGFEYXRlPgogICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3BuZzwvZGM6Zm9ybWF0PgogICAgICAgICA8cGhvdG9zaG9wOkNvbG9yTW9kZT4zPC9waG90b3Nob3A6Q29sb3JNb2RlPgogICAgICAgICA8cGhvdG9zaG9wOklDQ1Byb2ZpbGU+c1JHQiBJRUM2MTk2Ni0yLjE8L3Bob3Rvc2hvcDpJQ0NQcm9maWxlPgogICAgICAgICA8eG1wTU06SW5zdGFuY2VJRD54bXAuaWlkOjNmYjUxNGJjLWQ1ZTMtMWU0ZS1hY2Q3LTM1MzE0YWZiMDk1YTwveG1wTU06SW5zdGFuY2VJRD4KICAgICAgICAgPHhtcE1NOkRvY3VtZW50SUQ+YWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOjc2NTQyNGQ4LTkyYWItMTFlOS04ZWNkLWM1NTkwYzcwZmEzMzwveG1wTU06RG9jdW1lbnRJRD4KICAgICAgICAgPHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD54bXAuZGlkOjVmN2MwNzY1LWRiMDQtN2Y0NS05ZjUwLTQ2ZTNiODU4YzIxNjwveG1wTU06T3JpZ2luYWxEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06SGlzdG9yeT4KICAgICAgICAgICAgPHJkZjpTZXE+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPmNyZWF0ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0Omluc3RhbmNlSUQ+eG1wLmlpZDo1ZjdjMDc2NS1kYjA0LTdmNDUtOWY1MC00NmUzYjg1OGMyMTY8L3N0RXZ0Omluc3RhbmNlSUQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDp3aGVuPjIwMTktMDYtMTlUMTg6MDA6NTErMDI6MDA8L3N0RXZ0OndoZW4+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpzb2Z0d2FyZUFnZW50PkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE1LjUgKFdpbmRvd3MpPC9zdEV2dDpzb2Z0d2FyZUFnZW50PgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24+Y29udmVydGVkPC9zdEV2dDphY3Rpb24+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpwYXJhbWV0ZXJzPmZyb20gYXBwbGljYXRpb24vdm5kLmFkb2JlLnBob3Rvc2hvcCB0byBpbWFnZS9wbmc8L3N0RXZ0OnBhcmFtZXRlcnM+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5zYXZlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjNmYjUxNGJjLWQ1ZTMtMWU0ZS1hY2Q3LTM1MzE0YWZiMDk1YTwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAxOS0wNi0xOVQxODowMToyNSswMjowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ+QWRvYmUgUGhvdG9zaG9wIENDIDIwMTUuNSAoV2luZG93cyk8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpjaGFuZ2VkPi88L3N0RXZ0OmNoYW5nZWQ+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICA8L3JkZjpTZXE+CiAgICAgICAgIDwveG1wTU06SGlzdG9yeT4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPHRpZmY6WFJlc29sdXRpb24+MzAwMDAwMC8xMDAwMDwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+MzAwMDAwMC8xMDAwMDwvdGlmZjpZUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6UmVzb2x1dGlvblVuaXQ+MjwvdGlmZjpSZXNvbHV0aW9uVW5pdD4KICAgICAgICAgPGV4aWY6Q29sb3JTcGFjZT4xPC9leGlmOkNvbG9yU3BhY2U+CiAgICAgICAgIDxleGlmOlBpeGVsWERpbWVuc2lvbj4zNjwvZXhpZjpQaXhlbFhEaW1lbnNpb24+CiAgICAgICAgIDxleGlmOlBpeGVsWURpbWVuc2lvbj4yMzwvZXhpZjpQaXhlbFlEaW1lbnNpb24+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIAo8P3hwYWNrZXQgZW5kPSJ3Ij8+oqMipgAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAGUUlEQVR42pyWaWxcVxXHf/etM2/2GcdLvNQNThOCA2khjWjUhRDXAkSioqKqbI0QJS0SIBZRBYFKpUhhLaIqRS2CCGioqIXYKmhLSRu3qCWgOrSp4tpN48S7Hc94Fo9n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'); +} + +.tpay-unionpay-icon { + height: 23px; + width: 37px; + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACUAAAAXCAYAAACMLIalAAAACXBIWXMAAAsTAAALEwEAmpwYAAA4KGlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxMzIgNzkuMTU5Mjg0LCAyMDE2LzA0LzE5LTEzOjEzOjQwICAgICAgICAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgICAgICAgICAgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ0MgMjAxNS41IChXaW5kb3dzKTwveG1wOkNyZWF0b3JUb29sPgogICAgICAgICA8eG1wOkNyZWF0ZURhdGU+MjAxOS0wNi0xOVQxNzo1MjozOCswMjowMDwveG1wOkNyZWF0ZURhdGU+CiAgICAgICAgIDx4bXA6TW9kaWZ5RGF0ZT4yMDE5LTA2LTE5VDE3OjU3OjEzKzAyOjAwPC94bXA6TW9kaWZ5RGF0ZT4KICAgICAgICAgPHhtcDpNZXRhZGF0YURhdGU+MjAxOS0wNi0xOVQxNzo1NzoxMyswMjowMDwveG1wOk1ldGFkYXRhRGF0ZT4KICAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9wbmc8L2RjOmZvcm1hdD4KICAgICAgICAgPHBob3Rvc2hvcDpDb2xvck1vZGU+MzwvcGhvdG9zaG9wOkNvbG9yTW9kZT4KICAgICAgICAgPHhtcE1NOkluc3RhbmNlSUQ+eG1wLmlpZDozNzdkZWRlMS1jYTAwLWE5NDQtODg2OS1hNzU4NGNlNjhjYzE8L3htcE1NOkluc3RhbmNlSUQ+CiAgICAgICAgIDx4bXBNTTpEb2N1bWVudElEPnhtcC5kaWQ6Mzc3ZGVkZTEtY2EwMC1hOTQ0LTg4NjktYTc1ODRjZTY4Y2MxPC94bXBNTTpEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06T3JpZ2luYWxEb2N1bWVudElEPnhtcC5kaWQ6Mzc3ZGVkZTEtY2EwMC1hOTQ0LTg4NjktYTc1ODRjZTY4Y2MxPC94bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ+CiAgICAgICAgIDx4bXBNTTpIaXN0b3J5PgogICAgICAgICAgICA8cmRmOlNlcT4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24+Y3JlYXRlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjM3N2RlZGUxLWNhMDAtYTk0NC04ODY5LWE3NTg0Y2U2OGNjMTwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAxOS0wNi0xOVQxNzo1MjozOCswMjowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ+QWRvYmUgUGhvdG9zaG9wIENDIDIwMTUuNSAoV2luZG93cyk8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICA8L3JkZjpTZXE+CiAgICAgICAgIDwveG1wTU06SGlzdG9yeT4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPHRpZmY6WFJlc29sdXRpb24+NzIwMDAwLzEwMDAwPC90aWZmOlhSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpZUmVzb2x1dGlvbj43MjAwMDAvMTAwMDA8L3RpZmY6WVJlc29sdXRpb24+CiAgICAgICAgIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiAgICAgICAgIDxleGlmOkNvbG9yU3BhY2U+NjU1MzU8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6UGl4ZWxYRGltZW5zaW9uPjM3PC9leGlmOlBpeGVsWERpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjIzPC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAg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'); +} + +.tpay-discover-icon { + height: 22px; + width: 62px; + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAD4AAAAWCAYAAACYPi8fAAAACXBIWXMAAAsTAAALEwEAmpwYAAA58mlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxMzIgNzkuMTU5Mjg0LCAyMDE2LzA0LzE5LTEzOjEzOjQwICAgICAgICAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgICAgICAgICB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIgogICAgICAgICAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICAgICAgICAgIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ0MgMjAxNS41IChXaW5kb3dzKTwveG1wOkNyZWF0b3JUb29sPgogICAgICAgICA8eG1wOkNyZWF0ZURhdGU+MjAxOS0wNi0xOVQxODowMzo1NSswMjowMDwveG1wOkNyZWF0ZURhdGU+CiAgICAgICAgIDx4bXA6TWV0YWRhdGFEYXRlPjIwMTktMDYtMTlUMTg6MDM6NTUrMDI6MDA8L3htcDpNZXRhZGF0YURhdGU+CiAgICAgICAgIDx4bXA6TW9kaWZ5RGF0ZT4yMDE5LTA2LTE5VDE4OjAzOjU1KzAyOjAwPC94bXA6TW9kaWZ5RGF0ZT4KICAgICAgICAgPHhtcE1NOkluc3RhbmNlSUQ+eG1wLmlpZDplOWUwNDhiOC1lMmZlLTY0NDgtODgwOC01YTAwMjNmMGJmYWE8L3htcE1NOkluc3RhbmNlSUQ+CiAgICAgICAgIDx4bXBNTTpEb2N1bWVudElEPmFkb2JlOmRvY2lkOnBob3Rvc2hvcDpkNzAwNDA2Ni05MmFiLTExZTktOGVjZC1jNTU5MGM3MGZhMzM8L3htcE1NOkRvY3VtZW50SUQ+CiAgICAgICAgIDx4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ+eG1wLmRpZDpkZmIzNjIyZS0zMjZmLTZkNGMtOGMyZC04ODhmZjUyODMzMDQ8L3htcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD4KICAgICAgICAgPHhtcE1NOkhpc3Rvcnk+CiAgICAgICAgICAgIDxyZGY6U2VxPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5jcmVhdGVkPC9zdEV2dDphY3Rpb24+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDppbnN0YW5jZUlEPnhtcC5paWQ6ZGZiMzYyMmUtMzI2Zi02ZDRjLThjMmQtODg4ZmY1MjgzMzA0PC9zdEV2dDppbnN0YW5jZUlEPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6d2hlbj4yMDE5LTA2LTE5VDE4OjAzOjU1KzAyOjAwPC9zdEV2dDp3aGVuPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6c29mdHdhcmVBZ2VudD5BZG9iZSBQaG90b3Nob3AgQ0MgMjAxNS41IChXaW5kb3dzKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPnNhdmVkPC9zdEV2dDphY3Rpb24+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDppbnN0YW5jZUlEPnhtcC5paWQ6ZTllMDQ4YjgtZTJmZS02NDQ4LTg4MDgtNWEwMDIzZjBiZmFhPC9zdEV2dDppbnN0YW5jZUlEPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6d2hlbj4yMDE5LTA2LTE5VDE4OjAzOjU1KzAyOjAwPC9zdEV2dDp3aGVuPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6c29mdHdhcmVBZ2VudD5BZG9iZSBQaG90b3Nob3AgQ0MgMjAxNS41IChXaW5kb3dzKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmNoYW5nZWQ+Lzwvc3RFdnQ6Y2hhbmdlZD4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgIDwvcmRmOlNlcT4KICAgICAgICAgPC94bXBNTTpIaXN0b3J5PgogICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3BuZzwvZGM6Zm9ybWF0PgogICAgICAgICA8cGhvdG9zaG9wOkNvbG9yTW9kZT4zPC9waG90b3Nob3A6Q29sb3JNb2RlPgogICAgICAgICA8dGlmZjpPcmllbnRhdGlvbj4xPC90aWZmOk9yaWVudGF0aW9uPgogICAgICAgICA8dGlmZjpYUmVzb2x1dGlvbj43MjAwMDAvMTAwMDA8L3RpZmY6WFJlc29sdXRpb24+CiAgICAgICAgIDx0aWZmOllSZXNvbHV0aW9uPjcyMDAwMC8xMDAwMDwvdGlmZjpZUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6UmVzb2x1dGlvblVuaXQ+MjwvdGlmZjpSZXNvbHV0aW9uVW5pdD4KICAgICAgICAgPGV4aWY6Q29sb3JTcGFjZT42NTUzNTwvZXhpZjpDb2xvclNwYWNlPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+NjI8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFlEaW1lbnNpb24+MjI8L2V4aWY6UGl4ZWxZRGltZW5zaW9uPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/PmrYaHUAAAAgY0hSTQAAeiUAAICDAAD5/wAAgOkAAHUwAADqYAAAOpgAABdvkl/FRgAACtpJREFUeNrsmOlXlPcBhe+7zj7DrCzDLjvIjlaMLBoXpCpRE7W2mtqYZpFEMUmbRm0w1TaLaU1jcmoaK2g1AkZNiKgRgnVBTUAIyKaAwrAjAsPs77y/fshp+z80Pv/Bc+4998OlCCH4MULjR8oj8UfiPxKo3KzsAJZlpDabHRmzMlx+/v7DDMsIPMuhsrIS09M2qBSKQI3Wh03PyBhY/dST7rHRMRwpKZ0pk8kCdHpda6DZ3Gfy9YNKrcbVK//C5MQk7ty5qw4LDZknkUr9rdbpb/Py85vS5jwG6b2boKfH4R7oUIjWoTxa4hNCvK5OzvXwgovlXTeDVuPggQ+j77a1ClteLuwKCwvF9LQNPC9BgNmMk2XlssMlh4MWL1o0qlSphOt1dUaVSiUCgNfrZQSv92FRUdH4mTNngttu32Zkcjk1d95jdpt1eig5NQU93T0JguDRskMDA3s4CZ80Mjzi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'); +} + +.tpay-card-icon { + position: absolute; + bottom: 12px; + right: 18px; +} + +#saved_icon { + margin-left: 5px; + display: inline-block; +} + +.tpay-new-card-section { + padding-top: 7px; +} + +.tpay-amPmCheckbox input[type="checkbox"] { + display: none; +} + +.tpay-amPmCheckbox input[type="checkbox"] + label { + background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAAiCAYAAABStIn6AAAACXBIWXMAAA7EAAAOxAGVKw4bAAA4KGlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxMzIgNzkuMTU5Mjg0LCAyMDE2LzA0LzE5LTEzOjEzOjQwICAgICAgICAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgICAgICAgICAgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ0MgMjAxNS41IChXaW5kb3dzKTwveG1wOkNyZWF0b3JUb29sPgogICAgICAgICA8eG1wOkNyZWF0ZURhdGU+MjAxOS0wNi0xM1QxODoxMTo0MiswMjowMDwveG1wOkNyZWF0ZURhdGU+CiAgICAgICAgIDx4bXA6TW9kaWZ5RGF0ZT4yMDE5LTA2LTEzVDE4OjE1OjE4KzAyOjAwPC94bXA6TW9kaWZ5RGF0ZT4KICAgICAgICAgPHhtcDpNZXRhZGF0YURhdGU+MjAxOS0wNi0xM1QxODoxNToxOCswMjowMDwveG1wOk1ldGFkYXRhRGF0ZT4KICAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9wbmc8L2RjOmZvcm1hdD4KICAgICAgICAgPHBob3Rvc2hvcDpDb2xvck1vZGU+MzwvcGhvdG9zaG9wOkNvbG9yTW9kZT4KICAgICAgICAgPHhtcE1NOkluc3RhbmNlSUQ+eG1wLmlpZDo1NDhmMDUxZC1kNGQxLWViNDktYjczNC1mMjRhOTBkNDVjNWU8L3htcE1NOkluc3RhbmNlSUQ+CiAgICAgICAgIDx4bXBNTTpEb2N1bWVudElEPnhtcC5kaWQ6NTQ4ZjA1MWQtZDRkMS1lYjQ5LWI3MzQtZjI0YTkwZDQ1YzVlPC94bXBNTTpEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06T3JpZ2luYWxEb2N1bWVudElEPnhtcC5kaWQ6NTQ4ZjA1MWQtZDRkMS1lYjQ5LWI3MzQtZjI0YTkwZDQ1YzVlPC94bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ+CiAgICAgICAgIDx4bXBNTTpIaXN0b3J5PgogICAgICAgICAgICA8cmRmOlNlcT4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24+Y3JlYXRlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjU0OGYwNTFkLWQ0ZDEtZWI0OS1iNzM0LWYyNGE5MGQ0NWM1ZTwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAxOS0wNi0xM1QxODoxMTo0MiswMjowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ+QWRvYmUgUGhvdG9zaG9wIENDIDIwMTUuNSAoV2luZG93cyk8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICA8L3JkZjpTZXE+CiAgICAgICAgIDwveG1wTU06SGlzdG9yeT4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPHRpZmY6WFJlc29sdXRpb24+OTYwMDAwLzEwMDAwPC90aWZmOlhSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpZUmVzb2x1dGlvbj45NjAwMDAvMTAwMDA8L3RpZmY6WVJlc29sdXRpb24+CiAgICAgICAgIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiAgICAgICAgIDxleGlmOkNvbG9yU3BhY2U+NjU1MzU8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6UGl4ZWxYRGltZW5zaW9uPjE4PC9leGlmOlBpeGVsWERpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjM0PC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz6Eq5g2AAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAATuSURBVHja7JRdTFNnGMcfZRCJgAIKyeIFky1lMupcdPHGLJv7kJixCynKlzoEKRTwAxDITk9Lz3vOqdCRAFK6rMgunJqYzUxNlsWERQt+tECLtCAaUgcylTDdd0xb+t8FUmSBaBYv9ya/u/P+8pz3/89DJpOJTCYTGY1GYoyliqK4jTH2IWPsg4UQRfEjQRDekSQp0WQyUWNjIzU2NhLNimRZjjEYDMWiKB4VRVEQRdGwEJIkMcaYwBhLnycyGo0ky3J0c3Pzha6uLvT396Ovr29Rent7ce3aNZw4cQKSJBWGRIIgrKuvry+8ePEipqen8awTDAYBACMjI2hqajonyzI1NDQQ8Tz/nl6v5xwOBwDA5/Nhenp6UQKBAAKBACYmJtDe3u7U6/WrJEki4jjufZ7nebvdDgDPnCoYDCIYDGJiYgJtbW39HMfFC4JAxHHcVp7ntf9R1MdxXNz/oucXvZjURFHcKopiaKLn7dHdu3dhsVhcBoNhtdFoJMrOzk4rKCgo7u7uDrX2eZo9OjoKk8n0Q11d3RKdTke0fPlySklJiT958uSl69evw+PxwO12L8rg4CAGBgZw+fJl5OfnaxITE0mhUBBFRERQdHQ0JSUlvZyRkfGZRqOxFhUVWYqKitoXQq1WW3bv2dP29qaNWQmr4mnBs3nzZsrLy6PMzMxFyc7OpvT0dAoLW0pLloZTeOQKemlZNFFsbCxFRUWRSqUis9lMsiyTJEmLIkoytTRo6YiuaVXS3r6k1MIeSi3sITKbzWQ2m6mlpYUYYxmMMSbLMpMkybAQR2UmdLYfPZSnPf+touTWDWWZJ1JZ5qHQhpNluezUqVOw2+2LL7b+PtwZ6Udxgw1rCoagLHUirdRlSyt1RZMkScQYi2xtbbV5vd5nxm86O4nE3W68XuxEWqlrFifp9foInudfPX78+Njk5CT8fn+o3cFgcF7TxdNjiFHZodjvhFLjgrLUCUXJEJLVt8dJp9OFa7XatR0dHd7JyUkAwMM/Ajhjm8K9h76QRP/1OFaq7EgtcUGpcWG9xolX9t/CJo1tZPvhs4nE83w4x3FrrVar9/dfpwAAByxe0Ls27Pn8NoJBgJ0ex8osOzaUDyCt1IX1GhfW7HVjQ8lVCEJ9boNWTSFRR0eH97dHU6j44g5iMu3YeOAGErId2K4bRtKnfU+/BxJyerHDOI5LP3aBaQ8VH6mtmxN9d+Yrb67xBmKynHijZOaCUuPCmt29WKd2QvlkktW7HPhYPwxfAHC7ruJwZVVxbW3tnOib053eOuswYnc5/50I0kpdeKt8ALFZdmzXDeOxzw8AsNm6UV1dPV9ktVq9Ad8jNJ+/j/idDqzXzEneLBvAyiw7tmmH8NfjuRS7uxcW3Xn4y8xjt567h/idjlBCcTvt+MRwMySZrcQ8kcFgiNDr9a91dnaOP3jwAMDMR+YLP2NFlh1RO+zIkm/iz7/9IYnPN1OLK1euoKqqan9NTQ2RIAhUX18ffezYsatjY2PzWmz5fgq5pp/m/c5sUf1+P7q6ulBbW5tbXV1NpFAoKDk5mfbt21fd09ODwcHBJ7gxNjqE+2PDGB5yY/Cp5ebxeOBwOCBJ0gWVSrUsJydnbhclJCREbNmyJV+tVpsPHjxoKS8vNy9ERUVFe2Vl5ZcqlaomLi4uMSwsjCIjI4kAvBD+GQAie2TvjW1Y1AAAAABJRU5ErkJggg==') no-repeat scroll left top transparent; + padding-left: 30px; + font-family: 'Lato', sans-serif; + font-size: 14px; + color: #1B2257; + height: 17px; +} + +.tpay-amPmCheckbox input[type="checkbox"]:checked + label { + background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAAiCAYAAABStIn6AAAACXBIWXMAAA7EAAAOxAGVKw4bAAA4KGlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxMzIgNzkuMTU5Mjg0LCAyMDE2LzA0LzE5LTEzOjEzOjQwICAgICAgICAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgICAgICAgICAgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ0MgMjAxNS41IChXaW5kb3dzKTwveG1wOkNyZWF0b3JUb29sPgogICAgICAgICA8eG1wOkNyZWF0ZURhdGU+MjAxOS0wNi0xM1QxODoxMTo0MiswMjowMDwveG1wOkNyZWF0ZURhdGU+CiAgICAgICAgIDx4bXA6TW9kaWZ5RGF0ZT4yMDE5LTA2LTEzVDE4OjE1OjE4KzAyOjAwPC94bXA6TW9kaWZ5RGF0ZT4KICAgICAgICAgPHhtcDpNZXRhZGF0YURhdGU+MjAxOS0wNi0xM1QxODoxNToxOCswMjowMDwveG1wOk1ldGFkYXRhRGF0ZT4KICAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9wbmc8L2RjOmZvcm1hdD4KICAgICAgICAgPHBob3Rvc2hvcDpDb2xvck1vZGU+MzwvcGhvdG9zaG9wOkNvbG9yTW9kZT4KICAgICAgICAgPHhtcE1NOkluc3RhbmNlSUQ+eG1wLmlpZDo1NDhmMDUxZC1kNGQxLWViNDktYjczNC1mMjRhOTBkNDVjNWU8L3htcE1NOkluc3RhbmNlSUQ+CiAgICAgICAgIDx4bXBNTTpEb2N1bWVudElEPnhtcC5kaWQ6NTQ4ZjA1MWQtZDRkMS1lYjQ5LWI3MzQtZjI0YTkwZDQ1YzVlPC94bXBNTTpEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06T3JpZ2luYWxEb2N1bWVudElEPnhtcC5kaWQ6NTQ4ZjA1MWQtZDRkMS1lYjQ5LWI3MzQtZjI0YTkwZDQ1YzVlPC94bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ+CiAgICAgICAgIDx4bXBNTTpIaXN0b3J5PgogICAgICAgICAgICA8cmRmOlNlcT4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24+Y3JlYXRlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjU0OGYwNTFkLWQ0ZDEtZWI0OS1iNzM0LWYyNGE5MGQ0NWM1ZTwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAxOS0wNi0xM1QxODoxMTo0MiswMjowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ+QWRvYmUgUGhvdG9zaG9wIENDIDIwMTUuNSAoV2luZG93cyk8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICA8L3JkZjpTZXE+CiAgICAgICAgIDwveG1wTU06SGlzdG9yeT4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPHRpZmY6WFJlc29sdXRpb24+OTYwMDAwLzEwMDAwPC90aWZmOlhSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpZUmVzb2x1dGlvbj45NjAwMDAvMTAwMDA8L3RpZmY6WVJlc29sdXRpb24+CiAgICAgICAgIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiAgICAgICAgIDxleGlmOkNvbG9yU3BhY2U+NjU1MzU8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6UGl4ZWxYRGltZW5zaW9uPjE4PC9leGlmOlBpeGVsWERpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjM0PC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz6Eq5g2AAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAATuSURBVHja7JRdTFNnGMcfZRCJgAIKyeIFky1lMupcdPHGLJv7kJixCynKlzoEKRTwAxDITk9Lz3vOqdCRAFK6rMgunJqYzUxNlsWERQt+tECLtCAaUgcylTDdd0xb+t8FUmSBaBYv9ya/u/P+8pz3/89DJpOJTCYTGY1GYoyliqK4jTH2IWPsg4UQRfEjQRDekSQp0WQyUWNjIzU2NhLNimRZjjEYDMWiKB4VRVEQRdGwEJIkMcaYwBhLnycyGo0ky3J0c3Pzha6uLvT396Ovr29Rent7ce3aNZw4cQKSJBWGRIIgrKuvry+8ePEipqen8awTDAYBACMjI2hqajonyzI1NDQQ8Tz/nl6v5xwOBwDA5/Nhenp6UQKBAAKBACYmJtDe3u7U6/WrJEki4jjufZ7nebvdDgDPnCoYDCIYDGJiYgJtbW39HMfFC4JAxHHcVp7ntf9R1MdxXNz/oucXvZjURFHcKopiaKLn7dHdu3dhsVhcBoNhtdFoJMrOzk4rKCgo7u7uDrX2eZo9OjoKk8n0Q11d3RKdTke0fPlySklJiT958uSl69evw+PxwO12L8rg4CAGBgZw+fJl5OfnaxITE0mhUBBFRERQdHQ0JSUlvZyRkfGZRqOxFhUVWYqKitoXQq1WW3bv2dP29qaNWQmr4mnBs3nzZsrLy6PMzMxFyc7OpvT0dAoLW0pLloZTeOQKemlZNFFsbCxFRUWRSqUis9lMsiyTJEmLIkoytTRo6YiuaVXS3r6k1MIeSi3sITKbzWQ2m6mlpYUYYxmMMSbLMpMkybAQR2UmdLYfPZSnPf+touTWDWWZJ1JZ5qHQhpNluezUqVOw2+2LL7b+PtwZ6Udxgw1rCoagLHUirdRlSyt1RZMkScQYi2xtbbV5vd5nxm86O4nE3W68XuxEWqlrFifp9foInudfPX78+Njk5CT8fn+o3cFgcF7TxdNjiFHZodjvhFLjgrLUCUXJEJLVt8dJp9OFa7XatR0dHd7JyUkAwMM/Ajhjm8K9h76QRP/1OFaq7EgtcUGpcWG9xolX9t/CJo1tZPvhs4nE83w4x3FrrVar9/dfpwAAByxe0Ls27Pn8NoJBgJ0ex8osOzaUDyCt1IX1GhfW7HVjQ8lVCEJ9boNWTSFRR0eH97dHU6j44g5iMu3YeOAGErId2K4bRtKnfU+/BxJyerHDOI5LP3aBaQ8VH6mtmxN9d+Yrb67xBmKynHijZOaCUuPCmt29WKd2QvlkktW7HPhYPwxfAHC7ruJwZVVxbW3tnOib053eOuswYnc5/50I0kpdeKt8ALFZdmzXDeOxzw8AsNm6UV1dPV9ktVq9Ad8jNJ+/j/idDqzXzEneLBvAyiw7tmmH8NfjuRS7uxcW3Xn4y8xjt567h/idjlBCcTvt+MRwMySZrcQ8kcFgiNDr9a91dnaOP3jwAMDMR+YLP2NFlh1RO+zIkm/iz7/9IYnPN1OLK1euoKqqan9NTQ2RIAhUX18ffezYsatjY2PzWmz5fgq5pp/m/c5sUf1+P7q6ulBbW5tbXV1NpFAoKDk5mfbt21fd09ODwcHBJ7gxNjqE+2PDGB5yY/Cp5ebxeOBwOCBJ0gWVSrUsJydnbhclJCREbNmyJV+tVpsPHjxoKS8vNy9ERUVFe2Vl5ZcqlaomLi4uMSwsjCIjI4kAvBD+GQAie2TvjW1Y1AAAAABJRU5ErkJggg==') no-repeat scroll left bottom transparent; +} + +#card_payment_form input.wrong, +form select.wrong +{ + border: 1px solid #ff9696; + box-shadow: 0 1px 3px #dcdcdc; + background: #ffeeee; +} + +.tpay-panel-inside-content input.wrong + label +{ + color: #ff9696; +} + +#card_payment_form input.valid, form select.valid { + border: 1px solid #3BD16B; + box-shadow: 0 1px 3px #dcdcdc; + background: #f2fff6; +} + +.tpay-groups-wrapper { + text-align: center; + display: flex; + justify-content: center; + flex-wrap: wrap; + position: relative; + width: 102%; + margin-left: -1%; +} + +.tpay-groups-wrapper .tpay-group-holder { + vertical-align: top; + display: inline-block; + position: relative; + width: 23%; + margin: 5px 1%; + height: 75px; + background: #FFF; + border-radius: 6px; + border-color: #FFF; + transition: box-shadow 125ms ease-out, border-color 125ms ease-out, opacity 125ms ease-out; + -webkit-transition: box-shadow 125ms ease-out, border-color 125ms ease-out, opacity 125ms ease-out; + -moz-transition: box-shadow 125ms ease-out, border-color 125ms ease-out, opacity 125ms ease-out; + -o-transition: box-shadow 125ms ease-out, border-color 125ms ease-out, opacity 125ms ease-out; +} + +.tpay-groups-wrapper .tpay-group-holder { + opacity: 1; + cursor: pointer; + border: 2px solid transparent; + box-sizing: border-box; +} + +.tpay-groups-wrapper .tpay-group-holder:hover, +.tpay-groups-wrapper .tpay-group-holder.tpay-loading, +.tpay-groups-wrapper .tpay-group-holder.tpay-active { + border-color: #C4F1D2; + box-shadow: 0 5px 20px #DCDCDC; +} + +.tpay-groups-wrapper .tpay-group-holder.tpay-offline { + opacity: 0.85; +} + +.tpay-groups-wrapper .tpay-group-holder.tpay-offline:hover, +.tpay-groups-wrapper .tpay-group-holder.tpay-offline.tpay-loading, +.tpay-groups-wrapper .tpay-group-holder.tpay-offline.tpay-active { + cursor: not-allowed; + border-color: transparent; + box-shadow: none; +} + +.tpay-groups-wrapper .tpay-group-holder .tpay-offline-wrapper { + top: -8px; + right: -8px; + width: 60px; + height: 60px; +} + +.tpay-groups-wrapper .tpay-group-holder .tpay-offline-wrapper::before, +.tpay-groups-wrapper .tpay-group-holder .tpay-offline-wrapper::after { + border: 3px solid #AAA; +} + +.tpay-groups-wrapper .tpay-group-holder .tpay-offline-wrapper span { + left: -14px; + top: 12px; + background-color: #AAA; + width: 97px; +} + +.tpay-groups-wrapper .tpay-group-holder.tpay-active { + border-color: #3BD16B; +} + +.tpay-groups-wrapper .tpay-group-holder-content { + display: block; + height: 100%; + width: 100%; +} + +.tpay-groups-wrapper .tpay-group-name { + font-size: 12px; + font-weight: bold; + text-align: center; + padding: 0 12px; + display: table-cell; + height: 100%; + vertical-align: middle; +} + +.tpay-groups-wrapper .tpay-with-logo .tpay-group-name { + display: none; +} + +.tpay-groups-wrapper .tpay-group-logo-holder { + height: 100%; + width: 100%; + text-align: center; + vertical-align: middle; + display: block; +} + +.tpay-groups-wrapper .tpay-group-logo-holder img { + max-width: 80%; + position: relative; + top: 50%; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); +} + +.tpay-groups-wrapper .tpay-line-preloader { + background-color: #FFF; +} + +.tpay-groups-wrapper .tpay-channels-helper { + height: 0; + position: absolute; + top: 0; + z-index: 1; + left: 1%; + width: 98%; + overflow: hidden; + padding-top: 7px; +} + +.tpay-groups-wrapper .tpay-channels-helper .tpay-channels-helper-arrow { + position: absolute; + top: 2px; + left: 330px; + background: #FFF; + width: 10px; + height: 10px; + transform: rotate(45deg); +} + +.tpay-groups-wrapper .tpay-channels-wrapper { + padding: 20px; +} + +.tpay-groups-wrapper .tpay-content-wrapper-class { + background: #FFF; + width: 100%; + padding: 0 20px 0 20px; + box-sizing: border-box; + overflow: hidden; + border-radius: 7px; +} + +.tpay-groups-wrapper .tpay-dev-info { + padding: 10px; + position: absolute; + right: 0; + background: #D4D9FF; + font-size: 24px; + z-index: 100; +} + +.tpay-groups-wrapper .tpay-dev-info:hover { + opacity: 0.7; +} + +.tpay-groups-wrapper .tpay-dev-info-content { + display: none; +} + +@media only screen and (max-width: 650px) { + .tpay-groups-wrapper .tpay-group-holder { + width: 31%; + } +} + +@media only screen and (max-width: 490px) { + .tpay-groups-wrapper .tpay-group-holder { + width: 48%; + } +} + +@media only screen and (max-width: 370px) { + .tpay-groups-wrapper .tpay-group-holder { + width: 98%; + } +} + +.tpay-header-wrapper { + position: relative; + background-color: #4B3AB0; + background-image: linear-gradient(to right, #4B3AB0, #182B6B); + background: -moz-linear-gradient(left, #4B3AB0, #182B6B); + background: -webkit-linear-gradient(left, #4B3AB0, #182B6B); + height: 95px; + border-bottom-left-radius: 5px; + border-bottom-right-radius: 5px; + overflow: hidden; +} + +.tpay-header-wrapper .tpay-header-logo { + overflow: hidden; +} + +.tpay-header-wrapper .tpay-header-belt { + position: absolute; + bottom: 0; + left: 0; + width: 100%; + height: 4px; + background: #3ED36D; + background: -moz-linear-gradient(left, #3ED36D 0%, #4EDB7A 33%, #73EE99 66%, #90FDB1 100%); + background: -webkit-linear-gradient(left, #3ED36D 0%, #4EDB7A 33%, #73EE99 66%, #90FDB1 100%); + background: linear-gradient(to right, #3ED36D 0%, #4EDB7A 33%, #73EE99 66%, #90FDB1 100%); +} + +.tpay-logo { + height: 34px; + width: 90px; + padding-left: 4%; + padding-top: 30px; +} + +.tpay-panel-inside-content { + text-align: center; + padding-bottom: 20px; + background: #FFF; + border-radius: 7px; +} + +.tpay-buttons-holder { + margin-top: 25px; +} + +.tpay-pay-button { + border: 0; + outline: none; + color: #000000; + padding: 14px 13px; + font-family: 'Lato', sans-serif; + cursor: pointer; + opacity: 1; + -webkit-transition: opacity 0.3s; + transition: opacity 0.3s; + display: inline-block; + text-decoration: none; + font-size: 15px; + font-weight: bold; + text-align: center; + border-radius: 35px; + background-image: linear-gradient(270deg, #91FEB2 0%, #3ED36D 100%); + width: 500px; + height:50px; +} + +.tpay-channel-form-wrapper .tpay-info-text { + margin-bottom: 25px; + margin-top: 10px; + text-align: center; +} + +.tpay-channel-form-wrapper .tpay-form-wrapper { + overflow: hidden; + width: 102%; + margin-left: -1%; +} + +.tpay-channel-form-wrapper .tpay-input-wrapper.tpay-expiration-date-input { + display: inline-block; +} + +.tpay-channel-form-wrapper .tpay-input-wrapper.tpay-cvv-input { + display: inline-block; +} + +.tpay-channel-form-wrapper .tpay-input-wrapper.tpay-postcode { + float: left; + width: 40%; + margin-right: 3%; +} + +.tpay-channel-form-wrapper .tpay-input-wrapper.tpay-city { + float: left; + width: 57%; +} + +.tpay-channel-form-wrapper .tpay-input-wrapper .tpay-input-label { + background: #FFF; +} + +.tpay-channel-form-wrapper .tpay-button-wrapper { + margin-top: 10px; +} + +.tpay-channel-form-wrapper .tpay-button-wrapper .tpay-btn { + width: 100%; +} + +.tpay-input-wrapper { + position: relative; +} + +.tpay-input-value::placeholder { + font-family: 'Lato', sans-serif; + font-size: 15px; + color: rgba(103, 105, 134, 0.6); +} + +.tpay-select, +.tpay-input-wrapper .tpay-input-value { + background: transparent; + outline: none; + border: 1px solid #E8E8EE; + border-radius: 4px; + padding: 13px 20px; + max-width: 100%; + width: 100%; + box-sizing: border-box; + font-family: 'Lato', sans-serif; + font-size: 15px; + color: #1B2257; + height: 42px; +} + +.tpay-input-wrapper .tpay-input-value[disabled] { + color: #A6A7B8; +} + +.tpay-input-wrapper.tpay-error .tpay-input-value { + border-color: #D85B5B; +} + +.tpay-input-wrapper .tpay-input-value::-webkit-input-placeholder, +.tpay-input-wrapper .tpay-input-value::-moz-placeholder, +.tpay-input-wrapper .tpay-input-value:-ms-input-placeholder, +.tpay-input-wrapper .tpay-input-value:-moz-placeholder { + color: #A1A2B5; +} + +.tpay-input-wrapper .tpay-input-label { + position: absolute; + font-size: 10px; + font-weight: bold; + font-family: 'Lato', sans-serif; + color: #1B2257; + top: -8px; + left: 15px; + background: #F7F7FA; + padding: 0 5px; +} + +.tpay-input-wrapper .tpay-errors-holder { + position: absolute; + left: 2px; + bottom: -18px; + color: #D85B5B; + font-size: 12px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + width: 100%; + cursor: default; + text-align: left; +} + +.tpay-input-wrapper .tpay-info-wrapper { + width: 100%; + padding: 7px 15px; + padding-top: 7px; + background: #F7F7FA; + border: 1px solid #E8E8EE; + border-top: 0; + border-radius: 0; + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + box-sizing: border-box; + margin-top: -2px; + overflow: hidden; +} + +.tpay-input-wrapper .tpay-button-wrapper { + position: absolute; + top: 0; + right: 0; + height: 100%; +} + +.tpay-input-wrapper .tpay-button-wrapper .tpay-btn { + padding: 4px 8px; + font-size: 12px; + height: 25px; + top: 0; + bottom: 0; + margin: auto; + position: absolute; + right: 10px; +} + +.tpay-input-wrapper .tpay-button-wrapper .tpay-btn i { + display: none; +} + +.tpay-input-cvc { + cursor: help; +} + +.tpay-input-blik-code { + padding: 0 25% 5px 25%; +} + +.tpay-cards-choice label, +.tpay-cards-choice { + padding-left: 20px; + text-align: left; + font-size: 15px; + font-family: 'Lato', sans-serif; + color: #1B2257; +} + +.tpay-select { + margin-bottom: 25px; +} + +.tpay-blik-input { + text-align: center; + letter-spacing: 10px; +} + +#card_payment { + display: flex; + flex-direction: column; + gap: 24px; + margin-bottom: 16px; +} + +.tpay-col { + width: 100%; + flex: 1; +} + +.tpay-row { + display: flex; + width: 100%; + gap: 24px; +} + +.tpay-row > div { + flex: 1; +} + +@media (min-width: 956px) { + #card_payment { + flex-direction: row; + } +} \ No newline at end of file diff --git a/view/base/web/images/card.svg b/view/base/web/images/card.svg new file mode 100644 index 0000000..c642d28 --- /dev/null +++ b/view/base/web/images/card.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/view/base/web/images/loading.gif b/view/base/web/images/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..dfca0c2a026cd4ec73c942af950df61e39b77285 GIT binary patch literal 8638 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 OF20X3)5%Eq&Hn+VUxZ8m literal 0 HcmV?d00001 diff --git a/view/base/web/images/logo_tpay.png b/view/base/web/images/logo_tpay.png index 7d03ad3b777341f7b93af75fc6cd44fc3c7ae676..086b2500585f9e61e241aad487af2adcc906dee7 100644 GIT binary patch literal 3503 zcmX9=c|6qJ7yinU5F;V73}b84NWHRTACYY=Lqv92Gq$WT$d+x4gfdwYLPoOhB#mt* zWF3sRMzRjFWS!smz4voI=bq=e_j&I5oWE`&-01FEHbFK30M6>^YMTN8gCD&PU}dCd z+;=?;o#2EUn8WChNy40262U4%&;JF2NyeQ03W8bs1hPmW{?D5MU^t7E8LP~F7AbQU zNd%OPgpRmDhh69p`rVygK!;tSL$0T#%|T%Je>FXyIMeh@K3R2mWqA`_`lb#hu>yFHvt^@#-M zAyIH}TBKcMzE2vCoQH#hKvhI2Iv-8Wr*BX=3YCw9szcS$L^KMgMdE%B0PH(@+8XA; z3@f7w42%pMOjQRzw)*nCq|{=9F}gDJE>70EbpKQx)Dicjk9Dca_0)or&5bC}+6OvF zT-_t4G!LS|93nm_Zt_pYneg%>ydqCeO`t^TmAGHt113Bq+qlBplBFfWS|p*WOIt%p zTWusNO^*+j-RXL@LaOBtEj1cFPmvCBEfQ$zKlb*!L*AWM^MwS&9QALJr3St`M%Jt_ zZ@#Xm68h>c@A^IOXr96Vkl9ssPJ4JTrLpCGhTiS1tYL46>G)Kg zHRkW_zPWX5>oG1@JsR&Tv^%Ydw~ZVdr^>(Z3cV24|8I&=CGoi@i8bWTf!jm{R-ucr zuI%pAkmygVr%P{MRCvnh*E^fEc`f>G$BD|lcS4~r`GPiEG2w&zr(TG|%#C{V%xWdf z{)yx&kva%vT&+|QoPTl*)F&?liSD*76XcX93i_Ty)Y5Oh)vfmWpf$Sys61!U0@euW zG%heG3_upkVyJKb2D{AxODr8jm4*J^Zp8zY{11MXHU~zR);>;GR_a$7=RrB(CldPA zoWp=9eXwY}NQYSnvlF-aRkaJk#D&xOXWI2&-#GItOPE3BVn4r}dJ6+JaYsPWQxp@E zEKCfa&gm_lkq?V73@iI})v%Yn?xA0&QIRmeUW+i}7AvK{?l4;oaa{*6=JosgG}mSZ z^SN+_AJp)A{Y|}}=-Fl)&zpjoS&J6ZM7{}I&tt2w<C~H~b*kidEX*On#pFypbT? zyDWurGwg!<+=l|mVGg%l#rZ?P@DJsBUAML#cy9(p7{?9x1bJlo#m{1u6LO*d%p3x~ z^%HW47C&bM(8vXaZzQrbHY`a9S+j&14s%bnJzoCpRa<*YzMF{pQ=B+?tCB|}1wFLK z=7$HXW&E2Uq8LB7l-2|i2mz`|V^of9NoW&-P!@9BeM5<`$q?uC;U)bHsa@LqS9W#l4usAxgTTLu`@*+k zz%eb%&{h4)Q=8~d3>{XYgX3`+Dv1x}RgI4|lUXu%RZ0UA3}9n3 z7Nu8X{TI#A3kMO|9&TT*rKPilwWW#9Z>L)&%Qe672z_8XO5$C;d|f!8a?yE2q`+t( zX7v!_x#zi`kIeypttruQ*{95_b>l^8cWMvYUH074S}USE5(UagtesDEykBFm5fCTXXlz$Yl4xOo#0^yY*%LkCQza-|A-l z0;=^*!-liB6sc9~<7cPTH-u?_Dih->%w?Vi&EmHn3}rL2oot z^MYklY@SXTlh~-!h7TfJavKnGfzL%Cv!h%n$i&qAd#l#qcPXC*_X+Wi9s7kLCb7R| z#e%{%Gq0Z`6Q-ndzC;|i-Yn!?Ozf9;s`0$`fjPL~op1eY z0|&&L8`4g&MHP$loi&buBAjWj#_kogD!`6eG6or(>~0U#cx=ey zefh~|DV@3f_a~29;^@PvcC zyY;J$XZ$*bZPJ&$q>~4opq+Z1#~&9^G1mhg&D9a%^g-pa>51I-ShcSAYyVZ9Vxsfj z-~kYSTxhd6_ps;QGDNp2xl3q|)v}Fav%CH!b+;IX{%S>88QcJUHuk4bn#x}G-;lQ% z2_JkHT4i=Qv%<^t56o!v_s%xvr*kv^6kNcLzHd#AAXr-1!|2_}@_l=NV<6_SV$Zpl9nS{3hQLq9=xE&#&3yXn}X_(7MuYyLk ztn2I$av}b9dEf#;e^AheXIl4%{%k?pPKj^C*~X6QPLcp+&2fRS!LEIC^Fm5UQ4=#5 z3Qt3TrtG$U^WG&yfZQs)vZw6@f8nN@q))r}T$}t@Hb%%fFw*9{n{@V|(7Vk}(eRvd z$47$~I;w2ob$-TJzw9qeXJ6=rU~{8FHZ7R^cz)gbfxnX0c;w4#leq;lDh6JdX0Bu7 z@bMj@`*LfCJQN22{Nt|!Pn=Nj=9#oYdA7!6qK42zj`KDgH_yll9%_Z86=|m5jgMyp z)|1ilp0O@DDw}1reA+&vrkds85w<3%p>fUr4*@66wUD06VGL5_lj*Y0eTLx~{b7oq zch4M#pZhv{KmEd+DAV<4Ibx4eGp%2aPFYB~;-rM-qmr(LVfwbNQe}Srsmyhw_0jn5 zcZY?6cUV5iy_6*Q#?`mOOjded&bGYcg^`_6(XmN?O;bPbwuRi@U-gMDu~wNxPkTsk zNhX!I)c&exJ;c-1PsKTZ|QO5)|OA|+2$Yyqo3!t?_I3_EwM9a4B&Z$)Jj@+is+BDfI zGWo{@#5e;3axtxKPJd0Y36BZwz`J+OT-5kZ>h)!=pL^Vi-44L}xbjkBIQM+pj+3rN zzMYgD5)-u~{XM5d@!_r)zm+7dL>YHQ#hJ;nN@GoMX>TKP} zz80tOhI<*NRy-1dZksQvZYa~bw`j%m-)|lO4qtIC3XMByn6h0xq4Z!z+LfC2(f#CBC-scv5m3sOV+Ge27?JRV~lLs_dQvX3R$AEmQ)BKijq)? zvS!O3vSj&<>aMx_-uKt@{9ezW=Ecn6JU^e~xUToPT-W?@i8DH_MMKF!2><|SbhOn? zaGzPY-&5qIxOaE%q+2%2Kw?&C{J;iGs+Pz z?&pcdsQ~~5B|kLG$sLa6afG`fkWjwGx<)=8gfo=S0&E~*fL4RMA+!T9aMOU(W=;X_ zPIAtCN{W;Ue)6~ko^ULT$IsIP=`HUE<@=sj9vAO71NnHqOR(-xK9&7~JeCGVJZdNm zoCho}E#@S7N{UBDPFxZ!CnXCK<&lz*lm<$GfRb`zlBeWxKOhO7pD#W|N?fFXadwe6 zQP=!g4)+(7&kc)3%L9SFzP{qVr^HbhSDal=4k#f7l#&v|Da5?}kyx0Y7}A^nN0Ptt zsKdRTFbFgjfkN`^=Y=_hqIVDPK4);U+i*3K> zhwb}R_%T8XxO0_P!@yx!6vhmN@=*LS%Z&a)$fKsVKdZpvU>+e01kxGh>n*GR{L}P% z#DC|5tHZExMVwboOhQIX;*^;rNd6R9UJ@)KAtf&%ftTcm@{b$_C})I=|KD?f%p}3` zr)1?%$>8U}Q~sF)w}PBuSlIt43%(XFkF%4!3ku^2!zv;?VXkl>8tJM4{N0GB{57xS z)leQN4DPVtil-ES|J01<`aaj>b&%dz7}5!@qppZ+5Jw=KaZC41rn2% z0y&Do;2>u)8EGk5u#1d@3s_F>J46EmeEWZ-R!2Gc?5~%fsh$6qsqyUpk=hW0!0mM~ z4?NBO(f@Bt{6m`mD5Z_?#?4TFyqSxezu$K=Q@GdPTmS0tKz!eo&@hZQe1FYB`TkmT zzqYYoyVSnt``VReVFKmoXa1@J)peJFmk{(Xf0nzR2oq6+&P zn>=nd;EoLTeH0`WfdA3m2}e>#j1esB*IhAufCx2gZlE4n%}6IK+idq!67bu8VAOQxDG^wFF3@7PvgM&5Z8f-@CAps z@M#O3b#C0Gde8C|ud>RMFhqw+zgfBS6g-_$a_`l+!{QdkN9Ep4A z&lmS}U*pS$7~GSAJWkps1^_^S000mg0RU|7;XY>o03Qhe;Ijh&Adh?WkQH^w{;4MJ z(_Tki#msMD?z(>{*O`pAkahDngIkY>9u(H~@>1yVP`S7=(8m_=3Gy*2bGAQg047H; z7D#y!$QW6X5Npu0xi~ZA6H$kY66kAdztFtY^;WMZu<>zb;8aS$PS14`#^V&7-)isF z*-gBCbmqb7F6cU>_;iAy;U<4zxF(VO1Erf;^6?;{LF{;PB-YOlV2NL0W<< z)})Dy=1mj%$TNa=lP32jrY8QTNnerek0<+io8+2El;NZ7LDTdEim8K>M7{uDBGmjH zo<}M3NoQm9Lj6f5wzTt@ACg*9ivmh_iX2QsSwr_;_*ge-QAv&rHgz_=Uc4V}OI+Uo z45!-Yc09Snh~5k=au_BXn+5QZEIzMZ{fKFY3J`d%xw_D0CWUl z&3-JEDfCUpl*yjQ+`_f*(dvsPo*`IdbP9F%#eC5?y{Rs?be+gYz&awGu=A2-rn>Iy zW3R+UB9i3#j(og*2;#4(b2G{oW5fch0N9W1uW}sN1$6p74qp6%K=E@nsuAX-mtqnw~UBn zdM|o>>}yB3a<&0Ob`Z$g9n-|CmKrvCoWiZArzl7{RdvH)+SDz%=EIK`x#qvg@U|ic z=Rdq#sP7NMb_LQ>6p|FSl0lJ-qz$0%@F1@c;Y^beS;|yBYbMn+UAgr1s4Uq>f>SAo zoWNR&Qw}4wl)OP2n6pvE3e|5TRRw#}s~?=0nKg)r9=k-(lEHh{@J2c}h=gkNoA0t; z=E4HA)gVckq^J&DBT~DsxyCjU@T%9Zd^km-3FNy*7DX>q=Hjf;e5 zD~%Xja;+xoQBVpO^Mj6g8xHy79i+yyVN`5#Pll8qJ$l*sv4ptr>qLFyg?`hptNPo8 zPYTv!Fgj{I@6rUXd(FHG2N}2xF}l7OozR!f=Lo&I2Cc7pnB>ruR}4|}hqLkK)rlm{ zBAOY9+P}IXl1^1Cw)G*_LS0(6#LX+t6*t_-%69_{F6TzV*;~i0hO7tGKpYNkL6R9~ z81zkh-d}Otsip0CDISw3)B+Mn9)JDudYc+=R9>xocse1lxH_75IX(Y=8Ql#qc}Zy^ zedX~hr7>*N&$BrgWb)bx)i!-?CzN%Y&r|VHMh|q01SJWr<>~R&iq?;^t12xvTOr4G zN~lxQr}M&jlPk~^MAzRqxRF`WlclxvL>-QOBA69Oz zpuCGEK6g{{G2{+(y4aeRx{XI4&2btv6^T<9a|uFnUba2Y*+XAy`MTqceMq`?D<8A8 zihFubsZCwd=8ECu$~{2`E7F7`V6XRY=uFRWwMZ4BN{M41hH+%7ynNAgo+*Qw%|Hd) z7exi>4xziT$EjhU9Z@U^5xZthRs?Nc31n#DnpkHbmq#K(_;c8vw#KOe*p$jM-KU^BC{#AO zkgX-X)T*~FOY+T&#;>OSa__|aC?T^9v{tf6BrOximVSK|qScF{n_hv}z~wa8f4o9~y}eLQWi(BeboGMO=p0!lBZ&F1o_R_YXUHJtAP zbwP#=l^Q3r(>BHnI{kLm#IWaYmXs`6WskI(C*;f;C5(?q1cdSy-*7(AfJoej%~E_6eg&9jdDIS*aQ!d=b6;7gaaJEw8kB zP>z2UHY-Tl)?+_!#j2^#B$~md^&OXG%{w+2VNQ7%lX*k9Rj)B(td^jJ@z8CeziyN z^JgbwBEbsrfyB4yp$}S?_sXx_jyD;A1X`^QkS0SH=-ZOZZj_g2y)JOKx_>*V2<0(R zc%{K41yUbvVTa&j16kF0h@1$Sl)x=ALI4yhJQ=cRm~Ni2@D@X*HRdTfx@8cHWb#>a zOH3Q=E^hbQyTgex1zgFP&Wb=jpeN=L+ipS|MTj}LW#*rfay}A`mezC5h>UHsLh^M_ zSE~9@mFl9co3cNpo^>1X2|J?}TpN5WZ;1HZ*BIv_kToKjI%(3v%)068+v8fa6`d74 z?@B#RTs6|?mPt3V%vUhrONICJ@%mdm*!copXqYC3X z(}Fb_8??tCBOHU8HH)aRCOmqp-{A40GGUi?-ba`~hGv;e=u=$TAyt=@n_TCIt$Q^B z122v8>vrohr3~UOf=;ySVwNXo(2E~Y5{}y7CwW&wN>XDrP9mnh#XTjAY*85)7^|-S zD(Qk{(c=2}Y?XbD`c@KyFr|alCGFIwkrWMIkOO@NdU~9_)ORrxHT9*uY6%okV$$XA z<8u|9&kJ>E9?hJG`hM7CZq-0iU&=bhzxt8;!x_@ArVP_8eksJ2CqZ3|Ob_0) z>@3pf5AbhYKW=xYHBfL`f<4ORTg`FsePbzh*2q^^g^S`?V!mMRCg&I2W9>aTdO`_$1-Lip ztgEYv3WOe&#$M8P780Sm=cplaD_!llqt|rFNou0}r?3V{NQ_g+W=4tw33c-*pk{tf z9;2&V7IWb?^IE7nF$;MT`xzjHpvY*QQ zd90Xj-)j5*O{z%-gipZjIGn zOFCMI#%2%i>|RJ#8l?wV+l(vhPAge9HY6Uto zUP3NYH&b4un??h-%HB;*<1s!H!hA}0!o@VNen-Acb)yaqJ|kN~;~Cy)ziDLLLYkk5 zsB=+_@tvhiD@%)2-V=k)+N4B^|G(Z8-R?MzaSplK&>yh z&I)J?dfax8&ysk)SY9F1sWkNAbm6lXHiD3G$>6c%&Y91;A^^E^Sz-E!bwcxFw>idF1!nFC|)mEE_pL&?KNpg!VtKFz>T+}c& z4xKD}Txv7?P>ocvl0DgBbuDyu4^!TgYhA|@OvG{&)Xggc&sr7X-GpRo+sx*rTGg*S~IFf zomE}gqJJ9SCkETl0!Rv|E!`y^I+k!Tv&oZ@Ew_svI>_r^5w&BHHkUwJdsJQhSfWQp zI`IIlcI?NCt60~PV@C>tvrzu#6`vi(Zz@vv@?>Bc$O#FaSB^r=-C~l(PvpF0H0&oQ zj&sfgAGMKP%)jMNRfF_Akzf~+@an>OkKOuX!%GTcW%K%1&T82PNkW&oU9MxO@40N= zc``r9R9(GFpFm1MyzQ%F?*|LowO(wP6-~~P?em>$++^b#47gPqKh}>bur*Oj2^06C zP^e}>sZ*Xj`{JsNFk`n?B_oB$pVQ;B@+Om5AY&X_r zvZZgo&zyQRAa&fcWGQxtIVR339y!au^HHjra9mF~@fPhz{CHP+6Qy?P6{|j}gr(Qw3z)P|YAW%p&f0s@+QT8O)AD!7D-0Z|U$Usl z$5%Qgz3djvS7dlJq>&i1fe%gQQiGSg1l^YhKB*Xs;i?c-lW_G0qKB&ysl>c9P1 z7YJ4^CTU(4W;rv-XOU6Be}tPmOs~$NQ0;32hA_7yuZ7b1PWRPq?V5LF{SNBTYBBno zq+&cGugRC7lw(S````Ec7j7r{JdDvjhc)4&pN>>Eo8{ENcDu!c1uN&2S3f=C2CKze zR(U{tKYk&dvKxyDyQx3?#Mc(nWy*Y+ctsdO_pvctK=10Kov!y6Chx^8@U1*(v}(?{ zyc-w2R`rWb3CDdJ{@<}B1&7e4a` z1~R`9mN?4%yiQaX^^B*3Sz|Bz#`+eI_2w=sS$nt`7`(Np%qTQ4{8&f0q+EE6Y{lMr zBAzx`z9!iXq^y9v7i`OF?XKuGwxlBY9I_A)=4X*&pyl!45^Eiv%jY9?G1eVm^~ASD!Orl zx{Q~R;x598jD|*lbH!`8$8+$=RNy9`a@{*Y?p>EJ;Ma$738mn^>!4#h*1ez&Kf@w#CGaa%VAi+}UETHLGgWmf4tesL91^ca7BON}K zU}|eGRo6U~q<#{c%0hnQef6WGy-U+`b7QaD#a+LaE(2cd3=n+?TolpI8PJw@x@SQ$ zT^R0pWQYPfoiLDkB2h({K8d{q``Sh{R=9fRhV<3g&@W|u;t^9D`q%(wikn9z)q9LtX86DZy&_ z$C;#yFMJ6e7+^Fr*L>#8>CvuHP$jA(;V>fH-JzDi1=XX_6~0@Ot1J}NM7h;)acWaB zEk`ly%Lw~O=!`aksP!F|}?t!>xb%s6)Z zRp-a(elUpSlbZ2PsnYZ|=tPmjc$>KR!x155Eke3{_Jk^-$6(ILSi-TJ`6o4noHwgm z6(vRny2))Eu~(-}+F$9Ose2{OUR~i^s_F}2y+g2mn{+!9!Zo{2M2D2pAl-lxiB~W^ zoN=%-J~@j1Bne@J;I6fKb&%^+$i^5-TDcfo^jKWMg&Miyv#%8DGSgg!RDBJz+eRmX z>%Ht-M0E4SlEi(74c`}$aXeUExwB(>T=}{t3c%H$Yx*gNvR9Ci)`?c6xPdpC^lj;9 zht5p9`1sO~S@R(^E2Y6m(vx@i&CH{o4}9ZaRHvua85kTdJ^Lnl{2}i9 z-5anmpT?2o@ddA&Cr7xv9xH<;w6;FoN}<7$5$0Xamzz_zk;w4g{bsM>4W)b4S$6lU z8oPItCS?)`gCZ498V@*jUutskK8ZUal)F*aCuCKh?gCmGEl3uYIqSR2)!yQzklqu! zlV!(;p#r}?0U>C3%(wdqY%)k%kA%VG|%#XoH=#784m?cNNF z=7n-1$;yXqC0ibh0~%;Q*s#?R4iW4{8TKt6SyY#LS!6U{844Xg?a(y{?mv2DrQ?IS zG69hn4SE*>9OkPGUzM zJ%;KuB%GckNb|n)!VLC7X;qu3v3bwt%y3hPj$6etvXi2`t4s>@QqKRx6sXQ9XQ_pN zrk+srMH%C}dK;C!Qq@wj;PgSkv3EMTq4u5+X@$sCqo&pxqMlimAh#`7tsVTk-q~&0 eVVCxZ0N6U+=-cBw9{c~XPe`z-zd diff --git a/view/base/web/js/custom.js b/view/base/web/js/custom.js new file mode 100644 index 0000000..3e646d1 --- /dev/null +++ b/view/base/web/js/custom.js @@ -0,0 +1,5 @@ +/** + * Created by user on 05.04.2017. + */ + +var x=5; diff --git a/view/base/web/js/jquery.formance.min.js b/view/base/web/js/jquery.formance.min.js new file mode 100644 index 0000000..f771deb --- /dev/null +++ b/view/base/web/js/jquery.formance.min.js @@ -0,0 +1,1600 @@ +!function () { + var e, t, n, r, i, s, o, u, a, f, l, c, h, p, d, v, m, g, y, b, w, E, S, x, T, N, C, k, L, A, O, M, _, D, P, H, B, j, F, I, q, R, U, z, W, X, V, $, J, K, Q, G, Y, Z, et, tt, nt, rt, it, st, ot, ut, at, ft, lt = [].slice, ct = [].indexOf || function (e) { + for (var t = 0, n = this.length; t < n; t++) { + if (t in this && this[t] === e)return t + } + return -1 + }; + e = jQuery; + e.formance = {}; + e.formance.fn = {}; + e.fn.formance = function () { + var t, n; + n = arguments[0], t = 2 <= arguments.length ? lt.call(arguments, 1) : []; + return e.formance.fn[n].apply(this, t) + }; + tt = function (t) { + var n, r; + n = e(t.target); + if (t.metaKey || t.ctrlKey) { + return true + } + if (t.which === 32) { + return false + } + if (t.which === 0) { + return true + } + if (t.which < 33) { + return true + } + r = String.fromCharCode(t.which); + return !!/[\d\s]/.test(r) + }; + K = function (t) { + var n, r; + n = e(t.target); + if (t.metaKey || t.ctrlKey) { + return true + } + if (t.which === 32) { + return false + } + if (t.which === 0) { + return true + } + if (t.which < 33) { + return true + } + r = String.fromCharCode(t.which); + return !!/[\d\sA-Za-z]/.test(r) + }; + R = function (e) { + var t; + if (e.prop("selectionStart") != null && e.prop("selectionStart") !== e.prop("selectionEnd")) { + return true + } + if (typeof document !== "undefined" && document !== null ? (t = document.selection) != null ? typeof t.createRange === "function" ? t.createRange().text : void 0 : void 0 : void 0) { + return true + } + return false + }; + e.formance.fn.restrictNumeric = function () { + this.on("keypress", tt); + return this + }; + e.formance.fn.restrictAlphaNumeric = function () { + this.on("keypress", K); + return this + }; + e.formance.fn.hasTextSelected = R; + e = jQuery; + R = e.formance.fn.hasTextSelected; + i = /(\d{1,4})/g; + r = [{ + type: "maestro", + pattern: /^(5018|5020|5038|6304|6759|676[1-3])/, + format: i, + length: [12, 13, 14, 15, 16, 17, 18, 19], + cvcLength: [3], + luhn: true + }, { + type: "dinersclub", + pattern: /^(36|38|30[0-5])/, + format: i, + length: [14], + cvcLength: [3], + luhn: true + }, { + type: "laser", + pattern: /^(6706|6771|6709)/, + format: i, + length: [16, 17, 18, 19], + cvcLength: [3], + luhn: true + }, {type: "jcb", pattern: /^35/, format: i, length: [16], cvcLength: [3], luhn: true}, { + type: "unionpay", + pattern: /^62/, + format: i, + length: [16, 17, 18, 19], + cvcLength: [3], + luhn: false + }, { + type: "discover", + pattern: /^(6011|65|64[4-9]|622)/, + format: i, + length: [16], + cvcLength: [3], + luhn: true + }, {type: "mastercard", pattern: /^5[1-5]/, format: i, length: [16], cvcLength: [3], luhn: true}, { + type: "amex", + pattern: /^3[47]/, + format: /(\d{1,4})(\d{1,6})?(\d{1,5})?/, + length: [15], + cvcLength: [3, 4], + luhn: true + }, {type: "visa", pattern: /^4/, format: i, length: [13, 14, 15, 16], cvcLength: [3], luhn: true}]; + t = function (e) { + var t, n, i; + e = (e + "").replace(/\D/g, ""); + for (n = 0, i = r.length; n < i; n++) { + t = r[n]; + if (t.pattern.test(e)) { + return t + } + } + }; + n = function (e) { + var t, n, i; + for (n = 0, i = r.length; n < i; n++) { + t = r[n]; + if (t.type === e) { + return t + } + } + }; + Q = function (t) { + var n, r, i; + n = e(t.currentTarget); + r = String.fromCharCode(t.which); + if (!/^\d+$/.test(r)) { + return + } + i = n.val() + r; + return i.length <= 4 + }; + e.formance.fn.format_credit_card_cvc = function () { + this.formance("restrictNumeric"); + this.on("keypress", Q); + return this + }; + e.formance.fn.validate_credit_card_cvc = function () { + var t, r, i, s; + r = e(this).data("credit_card_type"); + t = e(this).val(); + t = e.trim(t); + if (!/^\d+$/.test(t)) { + return false + } + if (r) { + return i = t.length, ct.call((s = n(r)) != null ? s.cvcLength : void 0, i) >= 0 + } else { + return t.length >= 3 && t.length <= 4 + } + }; + e = jQuery; + R = e.formance.fn.hasTextSelected; + et = function (t) { + var n, r, i; + n = e(t.currentTarget); + r = String.fromCharCode(t.which); + if (!/^\d+$/.test(r)) { + return + } + if (R(n)) { + return + } + i = n.val() + r; + i = i.replace(/\D/g, ""); + if (i.length > 6) { + return false + } + }; + b = function (t) { + var n, r, i; + r = String.fromCharCode(t.which); + if (!/^\d+$/.test(r)) { + return + } + n = e(t.currentTarget); + i = n.val() + r; + if (/^\d$/.test(i) && i !== "0" && i !== "1") { + t.preventDefault(); + return n.val("0" + i + " / ") + } else if (/^\d\d$/.test(i)) { + t.preventDefault(); + return n.val("" + i + " / ") + } + }; + S = function (t) { + var n, r, i; + r = String.fromCharCode(t.which); + if (!/^\d+$/.test(r)) { + return + } + n = e(t.currentTarget); + i = n.val(); + if (/^\d\d$/.test(i)) { + return n.val("" + i + " / ") + } + }; + N = function (t) { + var n, r, i; + r = String.fromCharCode(t.which); + if (r !== "/") { + return + } + n = e(t.currentTarget); + i = n.val(); + if (/^\d$/.test(i) && i !== "0") { + return n.val("0" + i + " / ") + } + }; + a = function (t) { + var n, r; + if (t.meta) { + return + } + n = e(t.currentTarget); + r = n.val(); + if (t.which !== 8) { + return + } + if (n.prop("selectionStart") != null && n.prop("selectionStart") !== r.length) { + return + } + if (/\d(\s|\/)+$/.test(r)) { + t.preventDefault(); + return n.val(r.replace(/\d(\s|\/)*$/, "")) + } else if (/\s\/\s?\d?$/.test(r)) { + t.preventDefault(); + return n.val(r.replace(/\s\/\s?\d?$/, "")) + } + }; + e.formance.fn.format_credit_card_expiry = function () { + this.formance("restrictNumeric"); + this.on("keypress", et); + this.on("keypress", b); + this.on("keypress", N); + this.on("keypress", S); + this.on("keydown", a); + return this + }; + z = function (e) { + var t, n, r, i, s; + r = e.replace(/\s/g, ""); + s = r.split("/", 2), t = s[0], i = s[1]; + if ((i != null ? i.length : void 0) === 2 && /^\d+$/.test(i)) { + n = (new Date).getFullYear(); + n = n.toString().slice(0, 2); + i = n + i + } + t = parseInt(t, 10); + i = parseInt(i, 10); + return {month: t, year: i} + }; + e.formance.fn.val_credit_card_expiry = function () { + var e; + e = z(this.val()); + if (e.month == null || isNaN(e.month)) { + return false + } + if (e.year == null || isNaN(e.year)) { + return false + } + return new Date(e.year, e.month - 1) + }; + e.formance.fn.validate_credit_card_expiry = function () { + var t, n, r, i, s, o, u; + r = z(this.val()); + i = r.month; + o = r.year; + if (typeof i === "object" && "month" in i) { + u = i, i = u.month, o = u.year + } + if (!(i && o)) { + return false + } + i = e.trim(i); + o = e.trim(o); + if (!/^\d+$/.test(i)) { + return false + } + if (!/^\d+$/.test(o)) { + return false + } + if (!(parseInt(i, 10) <= 12)) { + return false + } + if (o.length === 2) { + s = (new Date).getFullYear(); + s = s.toString().slice(0, 2); + o = s + o + } + n = new Date(o, i); + t = new Date; + n.setMonth(n.getMonth() - 1); + n.setMonth(n.getMonth() + 1, 1); + return n > t + }; + e = jQuery; + R = e.formance.fn.hasTextSelected; + i = /(\d{1,4})/g; + r = [{ + type: "maestro", + pattern: /^(5018|5020|5038|6304|6759|676[1-3])/, + format: i, + length: [12, 13, 14, 15, 16, 17, 18, 19], + cvcLength: [3], + luhn: true + }, { + type: "dinersclub", + pattern: /^(36|38|30[0-5])/, + format: i, + length: [14], + cvcLength: [3], + luhn: true + }, { + type: "laser", + pattern: /^(6706|6771|6709)/, + format: i, + length: [16, 17, 18, 19], + cvcLength: [3], + luhn: true + }, {type: "jcb", pattern: /^35/, format: i, length: [16], cvcLength: [3], luhn: true}, { + type: "unionpay", + pattern: /^62/, + format: i, + length: [16, 17, 18, 19], + cvcLength: [3], + luhn: false + }, { + type: "discover", + pattern: /^(6011|65|64[4-9]|622)/, + format: i, + length: [16], + cvcLength: [3], + luhn: true + }, {type: "mastercard", pattern: /^5[1-5]/, format: i, length: [16], cvcLength: [3], luhn: true}, { + type: "amex", + pattern: /^3[47]/, + format: /(\d{1,4})(\d{1,6})?(\d{1,5})?/, + length: [15], + cvcLength: [3, 4], + luhn: true + }, {type: "visa", pattern: /^4/, format: i, length: [13, 14, 15, 16], cvcLength: [3], luhn: true}]; + t = function (e) { + var t, n, i; + e = (e + "").replace(/\D/g, ""); + for (n = 0, i = r.length; n < i; n++) { + t = r[n]; + if (t.pattern.test(e)) { + return t + } + } + }; + n = function (e) { + var t, n, i; + for (n = 0, i = r.length; n < i; n++) { + t = r[n]; + if (t.type === e) { + return t + } + } + }; + U = function (e) { + var t, n, r, i, s, o; + r = true; + i = 0; + n = (e + "").split("").reverse(); + for (s = 0, o = n.length; s < o; s++) { + t = n[s]; + t = parseInt(t, 10); + if (r = !r) { + t *= 2 + } + if (t > 9) { + t -= 9 + } + i += t + } + return i % 10 === 0 + }; + G = function (n) { + var r, i, s, o; + r = e(n.currentTarget); + s = String.fromCharCode(n.which); + if (!/^\d+$/.test(s)) { + return + } + if (R(r)) { + return + } + o = (r.val() + s).replace(/\D/g, ""); + i = t(o); + if (i) { + return o.length <= i.length[i.length.length - 1] + } else { + return o.length <= 16 + } + }; + $ = function (t) { + var n = this; + return setTimeout(function () { + var n, r; + n = e(t.currentTarget); + r = n.val(); + r = e.formance.formatCardNumber(r); + return n.val(r) + }) + }; + m = function (n) { + var r, i, s, o, u, a, f; + s = String.fromCharCode(n.which); + if (!/^\d+$/.test(s)) { + return + } + r = e(n.currentTarget); + f = r.val(); + i = t(f + s); + o = (f.replace(/\D/g, "") + s).length; + a = 16; + if (i) { + a = i.length[i.length.length - 1] + } + if (o >= a) { + return + } + if (r.prop("selectionStart") != null && r.prop("selectionStart") !== f.length) { + return + } + if (i && i.type === "amex") { + u = /^(\d{4}|\d{4}\s\d{6})$/ + } else { + u = /(?:^|\s)(\d{4})$/ + } + if (u.test(f)) { + n.preventDefault(); + return r.val(f + " " + s) + } else if (u.test(f + s)) { + n.preventDefault(); + return r.val(f + s + " ") + } + }; + s = function (t) { + var n, r; + n = e(t.currentTarget); + r = n.val(); + if (t.meta) { + return + } + if (t.which !== 8) { + return + } + if (n.prop("selectionStart") != null && n.prop("selectionStart") !== r.length) { + return + } + if (/\d\s$/.test(r)) { + t.preventDefault(); + return n.val(r.replace(/\d\s$/, "")) + } else if (/\s\d?$/.test(r)) { + t.preventDefault(); + return n.val(r.replace(/\s\d?$/, "")) + } + }; + ft = function (t) { + var n, i, s, o, u; + n = e(t.currentTarget); + u = n.val(); + o = e.formance.creditCardType(u) || "unknown"; + if (!n.hasClass(o)) { + i = function () { + var e, t, n; + n = []; + for (e = 0, t = r.length; e < t; e++) { + s = r[e]; + n.push(s.type) + } + return n + }(); + n.removeClass("unknown"); + n.removeClass(i.join(" ")); + n.addClass(o); + n.toggleClass("identified", o !== "unknown"); + return n.trigger("payment.cardType", o) + } + }; + e.formance.creditCardType = function (e) { + var n; + if (!e) { + return null + } + return ((n = t(e)) != null ? n.type : void 0) || null + }; + e.formance.formatCreditCardNumber = function (e) { + var n, r, i, s; + n = t(e); + if (!n) { + return e + } + i = n.length[n.length.length - 1]; + e = e.replace(/\D/g, ""); + e = e.slice(0, +i + 1 || 9e9); + if (n.format.global) { + return (s = e.match(n.format)) != null ? s.join(" ") : void 0 + } else { + r = n.format.exec(e); + if (r != null) { + r.shift() + } + return r != null ? r.join(" ") : void 0 + } + }; + e.formance.fn.format_credit_card_number = function () { + this.formance("restrictNumeric"); + this.on("keypress", G); + this.on("keypress", m); + this.on("keydown", s); + this.on("keyup", ft); + this.on("paste", $); + return this + }; + e.formance.fn.validate_credit_card_number = function () { + var n, r, i; + r = e(this).val(); + r = (r + "").replace(/\s+|-/g, ""); + if (!/^\d+$/.test(r)) { + return false + } + n = t(r); + if (!n) { + return false + } + return (i = r.length, ct.call(n.length, i) >= 0) && (n.luhn === false || U(r)) + }; + e = jQuery; + R = e.formance.fn.hasTextSelected; + Y = function (t) { + var n, r, i; + n = e(t.currentTarget); + r = String.fromCharCode(t.which); + if (!/^\d+$/.test(r)) { + return + } + if (R(n)) { + return + } + i = n.val() + r; + i = i.replace(/\D/g, ""); + if (i.length > 8) { + return false + } + }; + g = function (t) { + var n, r, i, s; + r = String.fromCharCode(t.which); + if (!/^\d+$/.test(r)) { + return + } + n = e(t.currentTarget); + i = n.val(); + s = i + r; + if (/^\d$/.test(s) && r !== "0" && r !== "1" && r !== "2" && r !== "3") { + t.preventDefault(); + return n.val("0" + s + " / ") + } else if (/^\d{2}$/.test(s)) { + t.preventDefault(); + return n.val("" + s + " / ") + } else if (/^\d{2}\s\/\s\d$/.test(s) && r !== "0" && r !== "1") { + t.preventDefault(); + return n.val("" + i + "0" + r + " / ") + } else if (/^\d{2}\s\/\s\d{2}$/.test(s)) { + t.preventDefault(); + return n.val("" + s + " / ") + } + }; + w = function (t) { + var n, r, i; + r = String.fromCharCode(t.which); + if (!/^\d+$/.test(r)) { + return + } + n = e(t.currentTarget); + i = n.val(); + if (/^\d{2}$/.test(i) || /^\d{2}\s\/\s\d{2}$/.test(i)) { + return n.val("" + i + " / ") + } + }; + x = function (t) { + var n, r, i, s, o, u, a, f, l; + a = String.fromCharCode(t.which); + if (a !== "/") { + return + } + n = e(t.currentTarget); + f = n.val(); + o = /^(\d)$/; + u = /^(\d{2})\s\/\s(\d)$/; + if (o.test(f) && f !== "0") { + return n.val("0" + f + " / ") + } else if (u.test(f)) { + l = f.match(u), r = l[0], i = l[1], s = l[2]; + if (s !== "0") { + return n.val("" + i + " / 0" + s + " / ") + } + } + }; + o = function (t) { + var n, r; + if (t.meta) { + return + } + n = e(t.currentTarget); + r = n.val(); + if (t.which !== 8) { + return + } + if (n.prop("selectionStart") != null && n.prop("selectionStart") !== r.length) { + return + } + if (/\d(\s|\/)+$/.test(r)) { + t.preventDefault(); + return n.val(r.replace(/\d(\s|\/)*$/, "")) + } else if (/\s\/\s?\d?$/.test(r)) { + t.preventDefault(); + return n.val(r.replace(/\s\/\s?\d?$/, "")) + } + }; + e.formance.fn.format_dd_mm_yyyy = function () { + this.formance("restrictNumeric"); + this.on("keypress", Y); + this.on("keypress", g); + this.on("keypress", x); + this.on("keypress", w); + this.on("keydown", o); + return this + }; + W = function (e) { + var t, n, r, i; + i = e != null ? e.replace(/\s/g, "").split("/", 3) : [NaN, NaN, NaN], t = i[0], n = i[1], r = i[2]; + if (!(r != null && r.length === 4)) { + r = NaN + } + t = parseInt(t, 10); + n = parseInt(n, 10); + r = parseInt(r, 10); + return {day: t, month: n, year: r} + }; + e.formance.fn.val_dd_mm_yyyy = function () { + var e; + e = W(this.val()); + if (e.day == null || isNaN(e.day)) { + return false + } + if (e.month == null || isNaN(e.month)) { + return false + } + if (e.year == null || isNaN(e.year)) { + return false + } + return new Date(e.year, e.month - 1, e.day) + }; + e.formance.fn.validate_dd_mm_yyyy = function () { + var e, t; + t = W(this.val()); + e = this.formance("val_dd_mm_yyyy"); + if (!(e != null && e instanceof Date)) { + return false + } + if (e.getDate() !== t.day) { + return false + } + if (e.getMonth() + 1 !== t.month) { + return false + } + if (e.getFullYear() !== t.year) { + return false + } + return true + }; + e = jQuery; + R = e.formance.fn.hasTextSelected; + e.formance.fn.format_email = function () { + return this + }; + e.formance.fn.validate_email = function () { + var t, n, r, i; + n = { + simple: /^\S+@\S+$/, + complex: /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\ ".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA -Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ + }; + t = e(this); + r = t.val(); + if (r == null) { + return false + } + i = t.data("formance_algorithm"); + if (i != null && i in n) { + return n[i].test(r) + } + return n["simple"].test(r) + }; + e = jQuery; + e.formance.fn.format_number = function () { + var t; + t = e(this).data("formance_length"); + if (t != null) { + e(this).attr("maxLength", t) + } + this.formance("restrictNumeric"); + return this + }; + e.formance.fn.validate_number = function () { + var t, n, r; + t = e(this); + r = t.val(); + n = t.data("formance_length"); + if (n != null && typeof n === "number" && r.length !== n) { + return false + } + if (n != null && typeof n === "string" && n !== "") { + if (isNaN(parseInt(n, 10))) { + return false + } + if (r.length !== parseInt(n, 10)) { + return false + } + } + return /^\d+$/.test(r) + }; + e = jQuery; + R = e.formance.fn.hasTextSelected; + nt = function (t) { + var n, r, i; + n = e(t.currentTarget); + r = String.fromCharCode(t.which); + if (!/^[a-zA-Z\d]+$/.test(r)) { + return + } + if (R(n)) { + return + } + i = n.val() + r; + i = i.replace(/[^a-zA-Z\d]/g, ""); + if (i.length > 15) { + return false + } + }; + A = function (t) { + var n, r, i, s; + r = String.fromCharCode(t.which); + if (!/^[a-zA-Z\d]+$/.test(r)) { + return + } + n = e(t.currentTarget); + i = n.val(); + s = i + r.toUpperCase(); + if (i === "") { + t.preventDefault(); + if (/^[A-Za-z]$/.test(s)) { + return n.val(s) + } + } else if (/^[A-Za-z]\d{0,3}$/.test(i)) { + t.preventDefault(); + if (/^[A-Za-z]\d{4}$/.test(s)) { + s = "" + s + " - " + } + if (/^[A-Za-z]\d{0,4}[\s|\-]*$/.test(s)) { + return n.val(s) + } + } else if (/^[A-Za-z]\d{4}[\s|\-]*\d{0,4}$/.test(i)) { + t.preventDefault(); + if (/^[A-Za-z]\d{4}[\s|\-]*\d{5}$/.test(s)) { + s = "" + s + " - " + } + if (/^[A-Za-z]\d{4}[\s|\-]*\d{0,5}[\s|\-]*$/.test(s)) { + return n.val(s) + } + } + }; + f = function (t) { + var n, r; + if (t.meta) { + return + } + n = e(t.currentTarget); + r = n.val(); + if (t.which !== 8) { + return + } + if (n.prop("selectionStart") != null && n.prop("selectionStart") !== r.length) { + return + } + if (/\d(\s|\-)+$/.test(r)) { + t.preventDefault(); + return n.val(r.replace(/\d(\s|\-)+$/, "")) + } + }; + _ = function (t) { + var n = this; + return setTimeout(function () { + var n, r, i, s, o, u, a; + n = e(t.currentTarget); + u = n.val(); + a = u.match(/^([A-Za-z\d]{5})[\s|\-]*(\d{5})[\s|\-]*(\d{5})$/), i = a[0], r = a[1], o = a[2], s = a[3]; + return n.val("" + r + " - " + o + " - " + s) + }) + }; + e.formance.fn.format_ontario_drivers_license_number = function () { + this.formance("restrictAlphaNumeric"); + this.on("keypress", nt); + this.on("keypress", A); + this.on("keydown", f); + this.on("paste", _); + return this + }; + e.formance.fn.validate_ontario_drivers_license_number = function () { + var t, n; + n = e(this).val(); + if (n == null) { + return false + } + n = n.replace(/[\s|\-]/g, ""); + if (!/^[a-zA-Z\d]+$/.test()) { + return false + } + t = /^[A-Za-z]\d{4}[\s|\-]*\d{5}[\s|\-]*\d{5}$/; + return t.test(n) + }; + e = jQuery; + R = e.formance.fn.hasTextSelected; + rt = function (t) { + var n, r, i; + n = e(t.currentTarget); + r = String.fromCharCode(t.which); + if (!/^\d+$/.test(r)) { + return + } + if (R(n)) { + return + } + i = n.val() + r; + i = i.replace(/\D/g, ""); + if (i.length > 15) { + return false + } + }; + O = function (t) { + var n, r, i, s; + r = String.fromCharCode(t.which); + if (!/^\d+$/.test(r)) { + return + } + n = e(t.currentTarget); + i = n.val(); + s = n.val() + r; + if (i === "") { + t.preventDefault(); + s = /^7$/.test(s) ? "708158 " : "708158 " + s; + return n.val(s) + } else if (/^\d{5}$/.test(i)) { + t.preventDefault(); + if (/^\d{6}$/.test(s)) { + s = "" + s + " " + } + if (/^\d{6}\s*$/.test(s)) { + return target.val(s) + } + } + }; + l = function (t) { + var n, r; + if (t.meta) { + return + } + n = e(t.currentTarget); + r = n.val(); + if (t.which !== 8) { + return + } + if (n.prop("selectionStart") != null && n.prop("selectionStart") !== r.length) { + return + } + if (/708158\s+$/.test(r)) { + t.preventDefault(); + return n.val(r.replace(/708158\s+$/, "")) + } + }; + D = function (t) { + var n = this; + return setTimeout(function () { + var n, r, i, s, o, u; + n = e(t.currentTarget); + o = n.val(); + u = o.match(/^(\d{6})\s*(\d{9})$/), i = u[0], r = u[1], s = u[2]; + return n.val("" + r + " " + s) + }) + }; + e.formance.fn.format_ontario_outdoors_card_number = function () { + this.formance("restrictNumeric"); + this.on("keypress", rt); + this.on("keypress", O); + this.on("keydown", l); + this.on("paste", D); + return this + }; + e.formance.fn.validate_ontario_outdoors_card_number = function () { + var t, n; + n = e(this).val(); + if (n == null) { + return false + } + n = n.replace(/\s/g, ""); + if (!/^\d+$/.test(n)) { + return false + } + t = /^708158\s*\d{9}$/; + return t.test(n) + }; + e = jQuery; + R = e.formance.fn.hasTextSelected; + it = function (t) { + var n, r, i; + n = e(t.currentTarget); + r = String.fromCharCode(t.which); + if (!/^[a-zA-Z\d]+$/.test(r)) { + return + } + if (R(n)) { + return + } + i = n.val() + r; + i = i.replace(/[^a-zA-Z\d]/g, ""); + if (i.length > 12) { + return false + } + }; + M = function (t) { + var n, r, i, s; + r = String.fromCharCode(t.which); + if (!/^[a-zA-Z\d]+$/.test(r)) { + return + } + n = e(t.currentTarget); + i = n.val(); + s = i + r.toUpperCase(); + if (/^\d{0,3}$/.test(i)) { + t.preventDefault(); + if (/^\d{4}$/.test(s)) { + s = "" + s + " - " + } + if (/^\d{0,4}[\s|\-]*$/.test(s)) { + return n.val(s) + } + } else if (/^\d{4}[\s|\-]*\d{0,2}$/.test(i)) { + t.preventDefault(); + if (/^\d{4}[\s|\-]*\d{3}$/.test(s)) { + s = "" + s + " - " + } + if (/^\d{4}[\s|\-]*\d{0,3}[\s|\-]*$/.test(s)) { + return n.val(s) + } + } else if (/^\d{4}[\s|\-]*\d{3}[\s|\-]*\d{0,2}$/.test(i)) { + t.preventDefault(); + if (/^\d{4}[\s|\-]*\d{3}[\s|\-]*\d{3}$/.test(s)) { + s = "" + s + " - " + } + if (/^\d{4}[\s|\-]*\d{3}[\s|\-]*\d{0,3}[\s|\-]*$/.test(s)) { + return n.val(s) + } + } else if (/^\d{4}[\s|\-]*\d{3}[\s|\-]*\d{3}[\s|\-]*[A-Za-z]{0,1}$/.test(i)) { + t.preventDefault(); + if (/^\d{4}[\s|\-]*\d{3}[\s|\-]*\d{3}[\s|\-]*[A-Za-z]{0,2}$/.test(s)) { + return n.val(s) + } + } + }; + c = function (t) { + var n, r; + if (t.meta) { + return + } + n = e(t.currentTarget); + r = n.val(); + if (t.which !== 8) { + return + } + if (n.prop("selectionStart") != null && n.prop("selectionStart") !== r.length) { + return + } + if (/\d(\s|\-)+$/.test(r)) { + t.preventDefault(); + return n.val(r.replace(/\d(\s|\-)+$/, "")) + } + }; + P = function (t) { + var n = this; + return setTimeout(function () { + var n, r, i, s, o, u, a, f; + n = e(t.currentTarget); + a = n.val(); + f = a.match(/^(\d{4})[\s|\-]*(\d{3})[\s|\-]*(\d{3})[\s|\-]*([A-Za-z]{2})$/), i = f[0], r = f[1], o = f[2], u = f[3], s = f[4]; + return n.val("" + r + " - " + o + " - " + u + " - " + s) + }) + }; + e.formance.fn.format_ontario_photo_health_card_number = function () { + this.formance("restrictAlphaNumeric"); + this.on("keypress", it); + this.on("keypress", M); + this.on("keydown", c); + this.on("paste", P); + return this + }; + e.formance.fn.validate_ontario_photo_health_card_number = function () { + var t, n; + n = e(this).val(); + if (n == null) { + return false + } + n = n.replace(/[\s|\-]/g, ""); + if (!/^[a-zA-Z\d]+$/.test()) { + return false + } + t = /^\d{4}[\s|\-]*\d{3}[\s|\-]*\d{3}[\s|\-]*[A-Za-z]{2}$/; + return t.test(n) + }; + e = jQuery; + R = e.formance.fn.hasTextSelected; + J = function (e) { + var t, n, r, i, s, o; + i = e.replace(/\D/g, "").match(/^(\d{0,3})?(\d{0,3})?(\d{0,4})?$/); + o = i, i = o[0], t = o[1], n = o[2], r = o[3]; + s = ""; + if (t != null) { + s += "(" + t + } + if ((t != null ? t.length : void 0) === 3) { + s += ") " + } + if (n != null) { + s += "" + n + } + if ((n != null ? n.length : void 0) === 3) { + s += " - " + } + if (r != null) { + s += "" + r + } + return s + }; + st = function (t) { + var n, r, i; + n = e(t.currentTarget); + r = String.fromCharCode(t.which); + if (!/^\d+$/.test(r)) { + return + } + if (R(n)) { + return + } + i = n.val() + r; + i = i.replace(/\D/g, ""); + if (i.length > 10) { + return false + } + }; + j = function (t) { + var n, r, i, s; + r = String.fromCharCode(t.which); + if (!/^\d+$/.test(r)) { + return + } + n = e(t.currentTarget); + s = n.val() + r; + i = J(s); + t.preventDefault(); + return n.val(i) + }; + h = function (t) { + var n, r; + if (t.meta) { + return + } + n = e(t.currentTarget); + r = n.val(); + if (t.which !== 8) { + return + } + if (n.prop("selectionStart") != null && n.prop("selectionStart") !== r.length) { + return + } + if (/\(\d$/.test(r)) { + t.preventDefault(); + return n.val("") + } else if (/\d\)(\s)+$/.test(r)) { + t.preventDefault(); + return n.val(r.replace(/\d\)(\s)*$/, "")) + } else if (/\d(\s|\-)+$/.test(r)) { + t.preventDefault(); + return n.val(r.replace(/\d(\s|\-)+$/, "")) + } + }; + H = function (t) { + var n = this; + return setTimeout(function () { + var n, r, i; + n = e(t.currentTarget); + i = n.val(); + r = J(i); + return n.val(r) + }) + }; + e.formance.fn.format_phone_number = function () { + this.formance("restrictNumeric"); + this.on("keypress", st); + this.on("keypress", j); + this.on("keydown", h); + this.on("paste", H); + return this + }; + e.formance.fn.validate_phone_number = function () { + var t; + t = e(this).val(); + if (t == null) { + return false + } + t = t.replace(/\(|\)|\s+|-/g, ""); + if (!/^\d+$/.test(t)) { + return false + } + return t.replace(/\D/g, "").length === 10 + }; + e = jQuery; + R = e.formance.fn.hasTextSelected; + ot = function (t) { + var n, r, i; + n = e(t.currentTarget); + r = String.fromCharCode(t.which); + if (!/^[a-zA-Z\d]+$/.test(r)) { + return + } + if (R(n)) { + return + } + i = n.val() + r; + i = i.replace(/[^a-zA-Z\d]/g, ""); + if (i.length > 6) { + return false + } + }; + F = function (t) { + var n, r, i, s; + r = String.fromCharCode(t.which); + if (!/^[a-zA-Z\d]+$/.test(r)) { + return + } + n = e(t.currentTarget); + i = n.val(); + s = i + r.toUpperCase(); + if (i === "") { + t.preventDefault(); + if (/^[ABCEFGHJKLMNPRSTVXY]$/.test(s)) { + return n.val(s) + } + } else if (/^[ABCEFGHJKLMNPRSTVXY]$/.test(i)) { + t.preventDefault(); + if (/^[ABCEFGHJKLMNPRSTVXY][0-9]$/.test(s)) { + return n.val(s) + } + } else if (/^[ABCEFGHJKLMNPRSTVXY][0-9]$/.test(i)) { + t.preventDefault(); + if (/^[ABCEFGHJKLMNPRSTVXY][0-9][ABCEFGHJKLMNPRSTVWXYZ]$/.test(s)) { + return n.val("" + s + " ") + } + } else if (/^[ABCEFGHJKLMNPRSTVXY][0-9][ABCEFGHJKLMNPRSTVWXYZ]\s$/.test(i)) { + t.preventDefault(); + if (/^[ABCEFGHJKLMNPRSTVXY][0-9][ABCEFGHJKLMNPRSTVWXYZ]\s?[0-9]$/.test(s)) { + return n.val(s) + } + } else if (/^[ABCEFGHJKLMNPRSTVXY][0-9][ABCEFGHJKLMNPRSTVWXYZ]\s?[0-9]$/.test(i)) { + t.preventDefault(); + if (/^[ABCEFGHJKLMNPRSTVXY][0-9][ABCEFGHJKLMNPRSTVWXYZ]\s?[0-9][ABCEFGHJKLMNPRSTVWXYZ]$/.test(s)) { + return n.val(s) + } + } else if (/^[ABCEFGHJKLMNPRSTVXY][0-9][ABCEFGHJKLMNPRSTVWXYZ]\s?[0-9][ABCEFGHJKLMNPRSTVWXYZ]$/.test(i)) { + t.preventDefault(); + if (/^[ABCEFGHJKLMNPRSTVXY][0-9][ABCEFGHJKLMNPRSTVWXYZ]\s?[0-9][ABCEFGHJKLMNPRSTVWXYZ][0-9]$/.test(s)) { + return n.val(s) + } + } + }; + p = function (t) { + var n, r; + if (t.meta) { + return + } + n = e(t.currentTarget); + r = n.val(); + if (t.which !== 8) { + return + } + if (n.prop("selectionStart") != null && n.prop("selectionStart") !== r.length) { + return + } + if (/[ABCEFGHJKLMNPRSTVWXYZ](\s)+$/.test(r)) { + t.preventDefault(); + return n.val(r.replace(/[ABCEFGHJKLMNPRSTVWXYZ](\s)*$/, "")) + } + }; + B = function (t) { + var n = this; + return setTimeout(function () { + var n, r, i, s, o, u; + n = e(t.currentTarget); + o = n.val(); + u = o.match(/^([ABCEFGHJKLMNPRSTVXY][0-9][ABCEFGHJKLMNPRSTVWXYZ])\s?([0-9][ABCEFGHJKLMNPRSTVWXYZ][0-9])$/), i = u[0], r = u[1], s = u[2]; + return n.val("" + r + " " + s) + }) + }; + e.formance.fn.format_postal_code = function () { + this.formance("restrictAlphaNumeric"); + this.on("keypress", ot); + this.on("keypress", F); + this.on("keydown", p); + this.on("paste", B); + return this + }; + e.formance.fn.validate_postal_code = function () { + var t; + t = e(this).val(); + if (t == null) { + return false + } + t = t.replace(/\s+/g, ""); + if (!/^[a-zA-Z\d]+$/.test(t)) { + return false + } + t = t.replace(/[^a-zA-Z\d]/g, ""); + return /^[ABCEFGHJKLMNPRSTVXY][0-9][ABCEFGHJKLMNPRSTVWXYZ]\s?[0-9][ABCEFGHJKLMNPRSTVWXYZ][0-9]$/.test(t.toUpperCase()) + }; + e = jQuery; + R = e.formance.fn.hasTextSelected; + ut = function (t) { + var n, r, i; + n = e(t.currentTarget); + r = String.fromCharCode(t.which); + if (!/^\d+$/.test(r)) { + return + } + if (R(n)) { + return + } + i = n.val() + r; + i = i.replace(/\D/g, ""); + if (i.length > 4) { + return false + } + }; + I = function (t) { + var n, r, i, s; + r = String.fromCharCode(t.which); + if (!/^\d+$/.test(r)) { + return + } + n = e(t.currentTarget); + i = n.val(); + s = i + r; + if (/^\d{2}$/.test(s)) { + t.preventDefault(); + return n.val("" + s + " / ") + } else if (/^\d{2}\s\/\s\d{1}$/.test(s) && r !== "0" && r !== "1") { + t.preventDefault(); + return n.val("" + i + "0" + r) + } + }; + k = function (t) { + var n, r, i; + r = String.fromCharCode(t.which); + if (!/^\d+$/.test(r)) { + return + } + n = e(t.currentTarget); + i = n.val(); + if (/^\d{2}$/.test(i)) { + return n.val("" + i + " / ") + } + }; + C = function (t) { + var n, r, i, s; + i = String.fromCharCode(t.which); + if (i !== "/") { + return + } + n = e(t.currentTarget); + s = n.val(); + r = /^(\d)$/; + if (r.test(s) && s.length === 2 || s.length === 1) { + return n.val("0" + s + " / ") + } + }; + d = function (t) { + var n, r; + if (t.meta) { + return + } + n = e(t.currentTarget); + r = n.val(); + if (t.which !== 8) { + return + } + if (n.prop("selectionStart") != null && n.prop("selectionStart") !== r.length) { + return + } + if (/\d(\s|\/)+$/.test(r)) { + t.preventDefault(); + return n.val(r.replace(/\d(\s|\/)*$/, "")) + } else if (/\s\/\s?\d?$/.test(r)) { + t.preventDefault(); + return n.val(r.replace(/\s\/\s?\d?$/, "")) + } + }; + e.formance.fn.format_time_yy_mm = function () { + this.formance("restrictNumeric"); + this.on("keypress", ut); + this.on("keypress", I); + this.on("keypress", k); + this.on("keypress", C); + this.on("keydown", d); + return this + }; + X = function (e) { + var t, n, r; + r = e != null ? e.replace(/\s/g, "").split("/", 2) : [NaN, NaN], n = r[0], t = r[1]; + t = parseInt(t, 10); + n = parseInt(n, 10); + return {years: n, months: t} + }; + e.formance.fn.val_time_yy_mm = function () { + var e; + e = X(this.val()); + if (e.years == null || isNaN(e.years)) { + return false + } + if (e.months == null || isNaN(e.months)) { + return false + } + return e + }; + e.formance.fn.validate_time_yy_mm = function () { + var t, n, r; + n = X(this.val()); + t = this.formance("val_time_yy_mm"); + r = e(this).val(); + if (t.months !== n.months) { + return false + } + if (t.years !== n.years) { + return false + } + if (/^(\d{1}[\d{1}]*)[\s\/]*(\d{1}[\d{1}]*)[\s\/]*$/.test(r)) { + return true + } + return false + }; + e = jQuery; + R = e.formance.fn.hasTextSelected; + at = function (t) { + var n, r, i; + n = e(t.currentTarget); + r = String.fromCharCode(t.which); + if (!/^\d+$/.test(r)) { + return + } + if (R(n)) { + return + } + i = n.val() + r; + i = i.replace(/\D/g, ""); + if (i.length > 6) { + return false + } + }; + L = function (t) { + var n, r, i; + r = String.fromCharCode(t.which); + if (!/^\d+$/.test(r)) { + return + } + n = e(t.currentTarget); + i = n.val(); + if (/^\d{2}$/.test(i) || /^\d{2}\s\-\s\d{2}$/.test(i)) { + return n.val("" + i + " - ") + } + }; + v = function (t) { + var n, r; + if (t.meta) { + return + } + n = e(t.currentTarget); + r = n.val(); + if (t.which !== 8) { + return + } + if (n.prop("selectionStart") != null && n.prop("selectionStart") !== r.length) { + return + } + if (/\d(\s|\-)+$/.test(r)) { + t.preventDefault(); + return n.val(r.replace(/\d(\s|\-)+$/, "")) + } else if (/\s\-\s?\d?$/.test(r)) { + t.preventDefault(); + return n.val(r.replace(/\s\-\s?\d?$/, "")) + } + }; + q = function (t) { + var n, r, i, s; + r = String.fromCharCode(t.which); + if (!/^\d+$/.test(r)) { + return + } + n = e(t.currentTarget); + i = n.val(); + s = i + r; + if (/^\d{2}$/.test(s)) { + t.preventDefault(); + return n.val("" + s + " - ") + } else if (/^\d{2}\s\-\s\d{2}$/.test(s)) { + t.preventDefault(); + return n.val("" + s + " - ") + } + }; + e.formance.fn.format_uk_sort_code = function (e) { + this.formance("restrictNumeric"); + this.on("keypress", at); + this.on("keypress", q); + this.on("keypress", L); + this.on("keydown", v); + return this + }; + e.formance.fn.validate_uk_sort_code = function () { + var t; + t = e(this).val(); + if (/^(\d{2})[\s\-]*(\d{2})[\s\-]*(\d{2})[\s]*$/.test(t)) { + return true + } + return false + }; + e = jQuery; + R = e.formance.fn.hasTextSelected; + Z = function (t) { + var n, r, i; + n = e(t.currentTarget); + r = String.fromCharCode(t.which); + if (!/^\d+$/.test(r)) { + return + } + if (R(n)) { + return + } + i = n.val() + r; + i = i.replace(/\D/g, ""); + if (i.length > 8) { + return false + } + }; + y = function (t) { + var n, r, i, s; + r = String.fromCharCode(t.which); + if (!/^\d+$/.test(r)) { + return + } + n = e(t.currentTarget); + i = n.val(); + s = i + r; + if (/^\d{4}$/.test(s)) { + t.preventDefault(); + return n.val("" + s + " / ") + } else if (/^\d{4}\s\/\s\d$/.test(s) && r !== "0" && r !== "1") { + t.preventDefault(); + return n.val("" + i + "0" + r + " / ") + } else if (/^\d{4}\s\/\s\d{2}$/.test(s)) { + t.preventDefault(); + return n.val("" + s + " / ") + } else if (/^\d{4}\s\/\s\d{2}\s\/\s\d$/.test(s) && r !== "0" && r !== "1" && r !== "2" && r !== "3") { + t.preventDefault(); + return n.val("" + i + "0" + r) + } + }; + E = function (t) { + var n, r, i; + r = String.fromCharCode(t.which); + if (!/^\d+$/.test(r)) { + return + } + n = e(t.currentTarget); + i = n.val(); + if (/^\d{4}$/.test(i) || /^\d{4}\s\/\s\d{2}$/.test(i)) { + return n.val("" + i + " / ") + } + }; + T = function (t) { + var n, r, i, s, o, u, a, f; + o = String.fromCharCode(t.which); + if (o !== "/") { + return + } + n = e(t.currentTarget); + u = n.val(); + s = /^(\d{4})\s\/\s(\d)$/; + if (s.test(u)) { + f = u.match(s), r = f[0], a = f[1], i = f[2]; + if (i !== "0") { + return n.val("" + a + " / 0" + i + " / ") + } + } + }; + u = function (t) { + var n, r; + if (t.meta) { + return + } + n = e(t.currentTarget); + r = n.val(); + if (t.which !== 8) { + return + } + if (n.prop("selectionStart") != null && n.prop("selectionStart") !== r.length) { + return + } + if (/\d(\s|\/)+$/.test(r)) { + t.preventDefault(); + return n.val(r.replace(/\d(\s|\/)*$/, "")) + } else if (/\s\/\s?\d?$/.test(r)) { + t.preventDefault(); + return n.val(r.replace(/\s\/\s?\d?$/, "")) + } + }; + e.formance.fn.format_yyyy_mm_dd = function () { + this.formance("restrictNumeric"); + this.on("keypress", Z); + this.on("keypress", y); + this.on("keypress", T); + this.on("keypress", E); + this.on("keydown", u); + return this + }; + V = function (e) { + var t, n, r, i; + i = e != null ? e.replace(/\s/g, "").split("/", 3) : [NaN, NaN, NaN], r = i[0], n = i[1], t = i[2]; + if (!(r != null && r.length === 4)) { + r = NaN + } + t = parseInt(t, 10); + n = parseInt(n, 10); + r = parseInt(r, 10); + return {day: t, month: n, year: r} + }; + e.formance.fn.val_yyyy_mm_dd = function () { + var e; + e = V(this.val()); + if (e.day == null || isNaN(e.day)) { + return false + } + if (e.month == null || isNaN(e.month)) { + return false + } + if (e.year == null || isNaN(e.year)) { + return false + } + return new Date(e.year, e.month - 1, e.day) + }; + e.formance.fn.validate_yyyy_mm_dd = function () { + var e, t; + t = V(this.val()); + e = this.formance("val_yyyy_mm_dd"); + if (!(e != null && e instanceof Date)) { + return false + } + if (e.getDate() !== t.day) { + return false + } + if (e.getMonth() + 1 !== t.month) { + return false + } + if (e.getFullYear() !== t.year) { + return false + } + return true + } +}.call(this) diff --git a/view/base/web/js/jquery.payment.min.js b/view/base/web/js/jquery.payment.min.js new file mode 100644 index 0000000..07bc87f --- /dev/null +++ b/view/base/web/js/jquery.payment.min.js @@ -0,0 +1 @@ +(function(){var t,e,n,r,a,o,i,l,u,s,c,h,p,g,v,f,d,m,y,C,T,w,$,D,S=[].slice,k=[].indexOf||function(t){for(var e=0,n=this.length;n>e;e++)if(e in this&&this[e]===t)return e;return-1};t=window.jQuery||window.Zepto||window.$,t.payment={},t.payment.fn={},t.fn.payment=function(){var e,n;return n=arguments[0],e=2<=arguments.length?S.call(arguments,1):[],t.payment.fn[n].apply(this,e)},a=/(\d{1,4})/g,t.payment.cards=r=[{type:"maestro",patterns:[5018,502,503,506,56,58,639,6220,67],format:a,length:[12,13,14,15,16,17,18,19],cvcLength:[3],luhn:!0},{type:"forbrugsforeningen",patterns:[600],format:a,length:[16],cvcLength:[3],luhn:!0},{type:"dankort",patterns:[5019],format:a,length:[16],cvcLength:[3],luhn:!0},{type:"visa",patterns:[4],format:a,length:[13,16],cvcLength:[3],luhn:!0},{type:"mastercard",patterns:[51,52,53,54,55,22,23,24,25,26,27],format:a,length:[16],cvcLength:[3],luhn:!0},{type:"amex",patterns:[34,37],format:/(\d{1,4})(\d{1,6})?(\d{1,5})?/,length:[15],cvcLength:[3,4],luhn:!0},{type:"dinersclub",patterns:[30,36,38,39],format:/(\d{1,4})(\d{1,6})?(\d{1,4})?/,length:[14],cvcLength:[3],luhn:!0},{type:"discover",patterns:[60,64,65,622],format:a,length:[16],cvcLength:[3],luhn:!0},{type:"unionpay",patterns:[62,88],format:a,length:[16,17,18,19],cvcLength:[3],luhn:!1},{type:"jcb",patterns:[35],format:a,length:[16],cvcLength:[3],luhn:!0}],e=function(t){var e,n,a,o,i,l,u,s;for(t=(t+"").replace(/\D/g,""),o=0,l=r.length;l>o;o++)for(e=r[o],s=e.patterns,i=0,u=s.length;u>i;i++)if(a=s[i],n=a+"",t.substr(0,n.length)===n)return e},n=function(t){var e,n,a;for(n=0,a=r.length;a>n;n++)if(e=r[n],e.type===t)return e},p=function(t){var e,n,r,a,o,i;for(r=!0,a=0,n=(t+"").split("").reverse(),o=0,i=n.length;i>o;o++)e=n[o],e=parseInt(e,10),(r=!r)&&(e*=2),e>9&&(e-=9),a+=e;return a%10===0},h=function(t){var e;return null!=t.prop("selectionStart")&&t.prop("selectionStart")!==t.prop("selectionEnd")?!0:null!=("undefined"!=typeof document&&null!==document&&null!=(e=document.selection)?e.createRange:void 0)&&document.selection.createRange().text?!0:!1},$=function(t,e){var n,r,a,o,i,l;try{r=e.prop("selectionStart")}catch(u){o=u,r=null}return i=e.val(),e.val(t),null!==r&&e.is(":focus")?(r===i.length&&(r=t.length),i!==t&&(l=i.slice(r-1,+r+1||9e9),n=t.slice(r-1,+r+1||9e9),a=t[r],/\d/.test(a)&&l===""+a+" "&&n===" "+a&&(r+=1)),e.prop("selectionStart",r),e.prop("selectionEnd",r)):void 0},m=function(t){var e,n,r,a,o,i,l,u;for(null==t&&(t=""),r="0123456789",a="0123456789",i="",e=t.split(""),l=0,u=e.length;u>l;l++)n=e[l],o=r.indexOf(n),o>-1&&(n=a[o]),i+=n;return i},d=function(e){var n;return n=t(e.currentTarget),setTimeout(function(){var t;return t=n.val(),t=m(t),t=t.replace(/\D/g,""),$(t,n)})},v=function(e){var n;return n=t(e.currentTarget),setTimeout(function(){var e;return e=n.val(),e=m(e),e=t.payment.formatCardNumber(e),$(e,n)})},l=function(n){var r,a,o,i,l,u,s;return o=String.fromCharCode(n.which),!/^\d+$/.test(o)||(r=t(n.currentTarget),s=r.val(),a=e(s+o),i=(s.replace(/\D/g,"")+o).length,u=16,a&&(u=a.length[a.length.length-1]),i>=u||null!=r.prop("selectionStart")&&r.prop("selectionStart")!==s.length)?void 0:(l=a&&"amex"===a.type?/^(\d{4}|\d{4}\s\d{6})$/:/(?:^|\s)(\d{4})$/,l.test(s)?(n.preventDefault(),setTimeout(function(){return r.val(s+" "+o)})):l.test(s+o)?(n.preventDefault(),setTimeout(function(){return r.val(s+o+" ")})):void 0)},o=function(e){var n,r;return n=t(e.currentTarget),r=n.val(),8!==e.which||null!=n.prop("selectionStart")&&n.prop("selectionStart")!==r.length?void 0:/\d\s$/.test(r)?(e.preventDefault(),setTimeout(function(){return n.val(r.replace(/\d\s$/,""))})):/\s\d?$/.test(r)?(e.preventDefault(),setTimeout(function(){return n.val(r.replace(/\d$/,""))})):void 0},f=function(e){var n;return n=t(e.currentTarget),setTimeout(function(){var e;return e=n.val(),e=m(e),e=t.payment.formatExpiry(e),$(e,n)})},u=function(e){var n,r,a;return r=String.fromCharCode(e.which),/^\d+$/.test(r)?(n=t(e.currentTarget),a=n.val()+r,/^\d$/.test(a)&&"0"!==a&&"1"!==a?(e.preventDefault(),setTimeout(function(){return n.val("0"+a+" / ")})):/^\d\d$/.test(a)?(e.preventDefault(),setTimeout(function(){var t,e;return t=parseInt(a[0],10),e=parseInt(a[1],10),e>2&&0!==t?n.val("0"+t+" / "+e):n.val(""+a+" / ")})):void 0):void 0},s=function(e){var n,r,a;return r=String.fromCharCode(e.which),/^\d+$/.test(r)?(n=t(e.currentTarget),a=n.val(),/^\d\d$/.test(a)?n.val(""+a+" / "):void 0):void 0},c=function(e){var n,r,a;return a=String.fromCharCode(e.which),"/"===a||" "===a?(n=t(e.currentTarget),r=n.val(),/^\d$/.test(r)&&"0"!==r?n.val("0"+r+" / "):void 0):void 0},i=function(e){var n,r;return n=t(e.currentTarget),r=n.val(),8!==e.which||null!=n.prop("selectionStart")&&n.prop("selectionStart")!==r.length?void 0:/\d\s\/\s$/.test(r)?(e.preventDefault(),setTimeout(function(){return n.val(r.replace(/\d\s\/\s$/,""))})):void 0},g=function(e){var n;return n=t(e.currentTarget),setTimeout(function(){var t;return t=n.val(),t=m(t),t=t.replace(/\D/g,"").slice(0,4),$(t,n)})},w=function(t){var e;return t.metaKey||t.ctrlKey?!0:32===t.which?!1:0===t.which?!0:t.which<33?!0:(e=String.fromCharCode(t.which),!!/[\d\s]/.test(e))},C=function(n){var r,a,o,i;return r=t(n.currentTarget),o=String.fromCharCode(n.which),/^\d+$/.test(o)&&!h(r)?(i=(r.val()+o).replace(/\D/g,""),a=e(i),a?i.length<=a.length[a.length.length-1]:i.length<=16):void 0},T=function(e){var n,r,a;return n=t(e.currentTarget),r=String.fromCharCode(e.which),/^\d+$/.test(r)&&!h(n)?(a=n.val()+r,a=a.replace(/\D/g,""),a.length>6?!1:void 0):void 0},y=function(e){var n,r,a;return n=t(e.currentTarget),r=String.fromCharCode(e.which),/^\d+$/.test(r)&&!h(n)?(a=n.val()+r,a.length<=4):void 0},D=function(e){var n,a,o,i,l;return n=t(e.currentTarget),l=n.val(),i=t.payment.cardType(l)||"unknown",n.hasClass(i)?void 0:(a=function(){var t,e,n;for(n=[],t=0,e=r.length;e>t;t++)o=r[t],n.push(o.type);return n}(),n.removeClass("unknown"),n.removeClass(a.join(" ")),n.addClass(i),n.toggleClass("identified","unknown"!==i),n.trigger("payment.cardType",i))},t.payment.fn.formatCardCVC=function(){return this.on("keypress",w),this.on("keypress",y),this.on("paste",g),this.on("change",g),this.on("input",g),this},t.payment.fn.formatCardExpiry=function(){return this.on("keypress",w),this.on("keypress",T),this.on("keypress",u),this.on("keypress",c),this.on("keypress",s),this.on("keydown",i),this.on("change",f),this.on("input",f),this},t.payment.fn.formatCardNumber=function(){return this.on("keypress",w),this.on("keypress",C),this.on("keypress",l),this.on("keydown",o),this.on("keyup",D),this.on("paste",v),this.on("change",v),this.on("input",v),this.on("input",D),this},t.payment.fn.restrictNumeric=function(){return this.on("keypress",w),this.on("paste",d),this.on("change",d),this.on("input",d),this},t.payment.fn.cardExpiryVal=function(){return t.payment.cardExpiryVal(t(this).val())},t.payment.cardExpiryVal=function(t){var e,n,r,a;return a=t.split(/[\s\/]+/,2),e=a[0],r=a[1],2===(null!=r?r.length:void 0)&&/^\d+$/.test(r)&&(n=(new Date).getFullYear(),n=n.toString().slice(0,2),r=n+r),e=parseInt(e,10),r=parseInt(r,10),{month:e,year:r}},t.payment.validateCardNumber=function(t){var n,r;return t=(t+"").replace(/\s+|-/g,""),/^\d+$/.test(t)?(n=e(t),n?(r=t.length,k.call(n.length,r)>=0&&(n.luhn===!1||p(t))):!1):!1},t.payment.validateCardExpiry=function(e,n){var r,a,o;return"object"==typeof e&&"month"in e&&(o=e,e=o.month,n=o.year),e&&n?(e=t.trim(e),n=t.trim(n),/^\d+$/.test(e)&&/^\d+$/.test(n)&&e>=1&&12>=e?(2===n.length&&(n=70>n?"20"+n:"19"+n),4!==n.length?!1:(a=new Date(n,e),r=new Date,a.setMonth(a.getMonth()-1),a.setMonth(a.getMonth()+1,1),a>r)):!1):!1},t.payment.validateCardCVC=function(e,r){var a,o;return e=t.trim(e),/^\d+$/.test(e)?(a=n(r),null!=a?(o=e.length,k.call(a.cvcLength,o)>=0):e.length>=3&&e.length<=4):!1},t.payment.cardType=function(t){var n;return t?(null!=(n=e(t))?n.type:void 0)||null:null},t.payment.formatCardNumber=function(n){var r,a,o,i;return n=n.replace(/\D/g,""),(r=e(n))?(o=r.length[r.length.length-1],n=n.slice(0,o),r.format.global?null!=(i=n.match(r.format))?i.join(" "):void 0:(a=r.format.exec(n),null!=a?(a.shift(),a=t.grep(a,function(t){return t}),a.join(" ")):void 0)):n},t.payment.formatExpiry=function(t){var e,n,r,a;return(n=t.match(/^\D*(\d{1,2})(\D+)?(\d{1,4})?/))?(e=n[1]||"",r=n[2]||"",a=n[3]||"",a.length>0?r=" / ":" /"===r?(e=e.substring(0,1),r=""):2===e.length||r.length>0?r=" / ":1===e.length&&"0"!==e&&"1"!==e&&(e="0"+e,r=" / "),e+r+a):""}}).call(this); diff --git a/view/base/web/js/jsencrypt.min.js b/view/base/web/js/jsencrypt.min.js new file mode 100644 index 0000000..d525906 --- /dev/null +++ b/view/base/web/js/jsencrypt.min.js @@ -0,0 +1,1069 @@ +var JSEncryptExports = {}; +(function (T) { + function e(a, b, c) { + null != a && ("number" == typeof a ? this.fromNumber(a, b, c) : null == b && "string" != typeof a ? this.fromString(a, 256) : this.fromString(a, b)) + } + + function l() { + return new e(null) + } + + function U(a, b, c, d, f, e) { + for (; 0 <= --e;) { + var g = b * this[a++] + c[d] + f; + f = Math.floor(g / 67108864); + c[d++] = g & 67108863 + } + return f + } + + function V(a, b, c, d, f, e) { + var g = b & 32767; + for (b >>= 15; 0 <= --e;) { + var h = this[a] & 32767, l = this[a++] >> 15, k = b * h + l * g, h = g * h + ((k & 32767) << 15) + c[d] + (f & 1073741823); + f = (h >>> 30) + (k >>> 15) + b * l + (f >>> 30); + c[d++] = h & 1073741823 + } + return f + } + + function W(a, b, c, d, f, e) { + var g = b & 16383; + for (b >>= 14; 0 <= --e;) { + var h = this[a] & 16383, l = this[a++] >> 14, k = b * h + l * g, h = g * h + ((k & 16383) << 14) + c[d] + f; + f = (h >> 28) + (k >> 14) + b * l; + c[d++] = h & 268435455 + } + return f + } + + function N(a, b) { + var c = F[a.charCodeAt(b)]; + return null == c ? -1 : c + } + + function w(a) { + var b = l(); + b.fromInt(a); + return b + } + + function G(a) { + var b = 1, c; + if (0 != (c = a >>> 16))a = c, b += 16; + if (0 != (c = a >> 8))a = c, b += 8; + if (0 != (c = a >> 4))a = c, b += 4; + if (0 != (c = a >> 2))a = c, b += 2; + 0 != a >> 1 && (b += 1); + return b + } + + function y(a) { + this.m = a + } + + function z(a) { + this.m = a; + this.mp = a.invDigit(); + this.mpl = this.mp & 32767; + this.mph = this.mp >> 15; + this.um = (1 << a.DB - 15) - 1; + this.mt2 = 2 * a.t + } + + function X(a, b) { + return a & b + } + + function I(a, b) { + return a | b + } + + function O(a, b) { + return a ^ b + } + + function P(a, b) { + return a & ~b + } + + function E() { + } + + function Q(a) { + return a + } + + function B(a) { + this.r2 = l(); + this.q3 = l(); + e.ONE.dlShiftTo(2 * a.t, this.r2); + this.mu = this.r2.divide(a); + this.m = a + } + + function J() { + this.j = this.i = 0; + this.S = [] + } + + function R(a) { + s[m++] ^= a & 255; + s[m++] ^= a >> 8 & 255; + s[m++] ^= a >> 16 & 255; + s[m++] ^= a >> 24 & 255; + m >= K && (m -= K) + } + + function L() { + } + + function t(a, b) { + return new e(a, + b) + } + + function p() { + this.n = null; + this.e = 0; + this.coeff = this.dmq1 = this.dmp1 = this.q = this.p = this.d = null + } + + function M(a) { + var b, c, d = ""; + for (b = 0; b + 3 <= a.length; b += 3)c = parseInt(a.substring(b, b + 3), 16), d += C.charAt(c >> 6) + C.charAt(c & 63); + b + 1 == a.length ? (c = parseInt(a.substring(b, b + 1), 16), d += C.charAt(c << 2)) : b + 2 == a.length && (c = parseInt(a.substring(b, b + 2), 16), d += C.charAt(c >> 2) + C.charAt((c & 3) << 4)); + for (; 0 < (d.length & 3);)d += S; + return d + } + + function Y(a) { + var b = "", c, d = 0, f; + for (c = 0; c < a.length && a.charAt(c) != S; ++c)v = C.indexOf(a.charAt(c)), + 0 > v || (0 == d ? (b += u.charAt(v >> 2), f = v & 3, d = 1) : 1 == d ? (b += u.charAt(f << 2 | v >> 4), f = v & 15, d = 2) : 2 == d ? (b += u.charAt(f), b += u.charAt(v >> 2), f = v & 3, d = 3) : (b += u.charAt(f << 2 | v >> 4), b += u.charAt(v & 15), d = 0)); + 1 == d && (b += u.charAt(f << 2)); + return b + } + + var k; + "Microsoft Internet Explorer" == navigator.appName ? (e.prototype.am = V, k = 30) : "Netscape" != navigator.appName ? (e.prototype.am = U, k = 26) : (e.prototype.am = W, k = 28); + e.prototype.DB = k; + e.prototype.DM = (1 << k) - 1; + e.prototype.DV = 1 << k; + e.prototype.FV = Math.pow(2, 52); + e.prototype.F1 = 52 - k; + e.prototype.F2 = 2 * k - + 52; + var u = "0123456789abcdefghijklmnopqrstuvwxyz", F = [], n; + k = 48; + for (n = 0; 9 >= n; ++n)F[k++] = n; + k = 97; + for (n = 10; 36 > n; ++n)F[k++] = n; + k = 65; + for (n = 10; 36 > n; ++n)F[k++] = n; + y.prototype.convert = function (a) { + return 0 > a.s || 0 <= a.compareTo(this.m) ? a.mod(this.m) : a + }; + y.prototype.revert = function (a) { + return a + }; + y.prototype.reduce = function (a) { + a.divRemTo(this.m, null, a) + }; + y.prototype.mulTo = function (a, b, c) { + a.multiplyTo(b, c); + this.reduce(c) + }; + y.prototype.sqrTo = function (a, b) { + a.squareTo(b); + this.reduce(b) + }; + z.prototype.convert = function (a) { + var b = + l(); + a.abs().dlShiftTo(this.m.t, b); + b.divRemTo(this.m, null, b); + 0 > a.s && 0 < b.compareTo(e.ZERO) && this.m.subTo(b, b); + return b + }; + z.prototype.revert = function (a) { + var b = l(); + a.copyTo(b); + this.reduce(b); + return b + }; + z.prototype.reduce = function (a) { + for (; a.t <= this.mt2;)a[a.t++] = 0; + for (var b = 0; b < this.m.t; ++b) { + var c = a[b] & 32767, d = c * this.mpl + ((c * this.mph + (a[b] >> 15) * this.mpl & this.um) << 15) & a.DM, c = b + this.m.t; + for (a[c] += this.m.am(0, d, a, b, 0, this.m.t); a[c] >= a.DV;)a[c] -= a.DV, a[++c]++ + } + a.clamp(); + a.drShiftTo(this.m.t, a); + 0 <= a.compareTo(this.m) && + a.subTo(this.m, a) + }; + z.prototype.mulTo = function (a, b, c) { + a.multiplyTo(b, c); + this.reduce(c) + }; + z.prototype.sqrTo = function (a, b) { + a.squareTo(b); + this.reduce(b) + }; + e.prototype.copyTo = function (a) { + for (var b = this.t - 1; 0 <= b; --b)a[b] = this[b]; + a.t = this.t; + a.s = this.s + }; + e.prototype.fromInt = function (a) { + this.t = 1; + this.s = 0 > a ? -1 : 0; + 0 < a ? this[0] = a : -1 > a ? this[0] = a + DV : this.t = 0 + }; + e.prototype.fromString = function (a, b) { + var c; + if (16 == b)c = 4; else if (8 == b)c = 3; else if (256 == b)c = 8; else if (2 == b)c = 1; else if (32 == b)c = 5; else if (4 == b)c = 2; else { + this.fromRadix(a, + b); + return + } + this.s = this.t = 0; + for (var d = a.length, f = !1, j = 0; 0 <= --d;) { + var g = 8 == c ? a[d] & 255 : N(a, d); + 0 > g ? "-" == a.charAt(d) && (f = !0) : (f = !1, 0 == j ? this[this.t++] = g : j + c > this.DB ? (this[this.t - 1] |= (g & (1 << this.DB - j) - 1) << j, this[this.t++] = g >> this.DB - j) : this[this.t - 1] |= g << j, j += c, j >= this.DB && (j -= this.DB)) + } + 8 == c && 0 != (a[0] & 128) && (this.s = -1, 0 < j && (this[this.t - 1] |= (1 << this.DB - j) - 1 << j)); + this.clamp(); + f && e.ZERO.subTo(this, this) + }; + e.prototype.clamp = function () { + for (var a = this.s & this.DM; 0 < this.t && this[this.t - 1] == a;)--this.t + }; + e.prototype.dlShiftTo = + function (a, b) { + var c; + for (c = this.t - 1; 0 <= c; --c)b[c + a] = this[c]; + for (c = a - 1; 0 <= c; --c)b[c] = 0; + b.t = this.t + a; + b.s = this.s + }; + e.prototype.drShiftTo = function (a, b) { + for (var c = a; c < this.t; ++c)b[c - a] = this[c]; + b.t = Math.max(this.t - a, 0); + b.s = this.s + }; + e.prototype.lShiftTo = function (a, b) { + var c = a % this.DB, d = this.DB - c, f = (1 << d) - 1, e = Math.floor(a / this.DB), g = this.s << c & this.DM, h; + for (h = this.t - 1; 0 <= h; --h)b[h + e + 1] = this[h] >> d | g, g = (this[h] & f) << c; + for (h = e - 1; 0 <= h; --h)b[h] = 0; + b[e] = g; + b.t = this.t + e + 1; + b.s = this.s; + b.clamp() + }; + e.prototype.rShiftTo = function (a, + b) { + b.s = this.s; + var c = Math.floor(a / this.DB); + if (c >= this.t)b.t = 0; else { + var d = a % this.DB, f = this.DB - d, e = (1 << d) - 1; + b[0] = this[c] >> d; + for (var g = c + 1; g < this.t; ++g)b[g - c - 1] |= (this[g] & e) << f, b[g - c] = this[g] >> d; + 0 < d && (b[this.t - c - 1] |= (this.s & e) << f); + b.t = this.t - c; + b.clamp() + } + }; + e.prototype.subTo = function (a, b) { + for (var c = 0, d = 0, f = Math.min(a.t, this.t); c < f;)d += this[c] - a[c], b[c++] = d & this.DM, d >>= this.DB; + if (a.t < this.t) { + for (d -= a.s; c < this.t;)d += this[c], b[c++] = d & this.DM, d >>= this.DB; + d += this.s + } else { + for (d += this.s; c < a.t;)d -= a[c], b[c++] = d & + this.DM, d >>= this.DB; + d -= a.s + } + b.s = 0 > d ? -1 : 0; + -1 > d ? b[c++] = this.DV + d : 0 < d && (b[c++] = d); + b.t = c; + b.clamp() + }; + e.prototype.multiplyTo = function (a, b) { + var c = this.abs(), d = a.abs(), f = c.t; + for (b.t = f + d.t; 0 <= --f;)b[f] = 0; + for (f = 0; f < d.t; ++f)b[f + c.t] = c.am(0, d[f], b, f, 0, c.t); + b.s = 0; + b.clamp(); + this.s != a.s && e.ZERO.subTo(b, b) + }; + e.prototype.squareTo = function (a) { + for (var b = this.abs(), c = a.t = 2 * b.t; 0 <= --c;)a[c] = 0; + for (c = 0; c < b.t - 1; ++c) { + var d = b.am(c, b[c], a, 2 * c, 0, 1); + if ((a[c + b.t] += b.am(c + 1, 2 * b[c], a, 2 * c + 1, d, b.t - c - 1)) >= b.DV)a[c + b.t] -= b.DV, a[c + b.t + + 1] = 1 + } + 0 < a.t && (a[a.t - 1] += b.am(c, b[c], a, 2 * c, 0, 1)); + a.s = 0; + a.clamp() + }; + e.prototype.divRemTo = function (a, b, c) { + var d = a.abs(); + if (!(0 >= d.t)) { + var f = this.abs(); + if (f.t < d.t)null != b && b.fromInt(0), null != c && this.copyTo(c); else { + null == c && (c = l()); + var j = l(), g = this.s; + a = a.s; + var h = this.DB - G(d[d.t - 1]); + 0 < h ? (d.lShiftTo(h, j), f.lShiftTo(h, c)) : (d.copyTo(j), f.copyTo(c)); + d = j.t; + f = j[d - 1]; + if (0 != f) { + var k = f * (1 << this.F1) + (1 < d ? j[d - 2] >> this.F2 : 0), p = this.FV / k, k = (1 << this.F1) / k, m = 1 << this.F2, A = c.t, n = A - d, r = null == b ? l() : b; + j.dlShiftTo(n, r); + 0 <= c.compareTo(r) && + (c[c.t++] = 1, c.subTo(r, c)); + e.ONE.dlShiftTo(d, r); + for (r.subTo(j, j); j.t < d;)j[j.t++] = 0; + for (; 0 <= --n;) { + var q = c[--A] == f ? this.DM : Math.floor(c[A] * p + (c[A - 1] + m) * k); + if ((c[A] += j.am(0, q, c, n, 0, d)) < q) { + j.dlShiftTo(n, r); + for (c.subTo(r, c); c[A] < --q;)c.subTo(r, c) + } + } + null != b && (c.drShiftTo(d, b), g != a && e.ZERO.subTo(b, b)); + c.t = d; + c.clamp(); + 0 < h && c.rShiftTo(h, c); + 0 > g && e.ZERO.subTo(c, c) + } + } + } + }; + e.prototype.invDigit = function () { + if (1 > this.t)return 0; + var a = this[0]; + if (0 == (a & 1))return 0; + var b = a & 3, b = b * (2 - (a & 15) * b) & 15, b = b * (2 - (a & 255) * b) & 255, b = b * + (2 - ((a & 65535) * b & 65535)) & 65535, b = b * (2 - a * b % this.DV) % this.DV; + return 0 < b ? this.DV - b : -b + }; + e.prototype.isEven = function () { + return 0 == (0 < this.t ? this[0] & 1 : this.s) + }; + e.prototype.exp = function (a, b) { + if (4294967295 < a || 1 > a)return e.ONE; + var c = l(), d = l(), f = b.convert(this), j = G(a) - 1; + for (f.copyTo(c); 0 <= --j;)if (b.sqrTo(c, d), 0 < (a & 1 << j))b.mulTo(d, f, c); else var g = c, c = d, d = g; + return b.revert(c) + }; + e.prototype.toString = function (a) { + if (0 > this.s)return "-" + this.negate().toString(a); + if (16 == a)a = 4; else if (8 == a)a = 3; else if (2 == a)a = 1; else if (32 == + a)a = 5; else if (4 == a)a = 2; else return this.toRadix(a); + var b = (1 << a) - 1, c, d = !1, f = "", e = this.t, g = this.DB - e * this.DB % a; + if (0 < e--) { + if (g < this.DB && 0 < (c = this[e] >> g))d = !0, f = u.charAt(c); + for (; 0 <= e;)g < a ? (c = (this[e] & (1 << g) - 1) << a - g, c |= this[--e] >> (g += this.DB - a)) : (c = this[e] >> (g -= a) & b, 0 >= g && (g += this.DB, --e)), 0 < c && (d = !0), d && (f += u.charAt(c)) + } + return d ? f : "0" + }; + e.prototype.negate = function () { + var a = l(); + e.ZERO.subTo(this, a); + return a + }; + e.prototype.abs = function () { + return 0 > this.s ? this.negate() : this + }; + e.prototype.compareTo = function (a) { + var b = + this.s - a.s; + if (0 != b)return b; + var c = this.t, b = c - a.t; + if (0 != b)return 0 > this.s ? -b : b; + for (; 0 <= --c;)if (0 != (b = this[c] - a[c]))return b; + return 0 + }; + e.prototype.bitLength = function () { + return 0 >= this.t ? 0 : this.DB * (this.t - 1) + G(this[this.t - 1] ^ this.s & this.DM) + }; + e.prototype.mod = function (a) { + var b = l(); + this.abs().divRemTo(a, null, b); + 0 > this.s && 0 < b.compareTo(e.ZERO) && a.subTo(b, b); + return b + }; + e.prototype.modPowInt = function (a, b) { + var c; + c = 256 > a || b.isEven() ? new y(b) : new z(b); + return this.exp(a, c) + }; + e.ZERO = w(0); + e.ONE = w(1); + E.prototype.convert = + Q; + E.prototype.revert = Q; + E.prototype.mulTo = function (a, b, c) { + a.multiplyTo(b, c) + }; + E.prototype.sqrTo = function (a, b) { + a.squareTo(b) + }; + B.prototype.convert = function (a) { + if (0 > a.s || a.t > 2 * this.m.t)return a.mod(this.m); + if (0 > a.compareTo(this.m))return a; + var b = l(); + a.copyTo(b); + this.reduce(b); + return b + }; + B.prototype.revert = function (a) { + return a + }; + B.prototype.reduce = function (a) { + a.drShiftTo(this.m.t - 1, this.r2); + a.t > this.m.t + 1 && (a.t = this.m.t + 1, a.clamp()); + this.mu.multiplyUpperTo(this.r2, this.m.t + 1, this.q3); + for (this.m.multiplyLowerTo(this.q3, + this.m.t + 1, this.r2); 0 > a.compareTo(this.r2);)a.dAddOffset(1, this.m.t + 1); + for (a.subTo(this.r2, a); 0 <= a.compareTo(this.m);)a.subTo(this.m, a) + }; + B.prototype.mulTo = function (a, b, c) { + a.multiplyTo(b, c); + this.reduce(c) + }; + B.prototype.sqrTo = function (a, b) { + a.squareTo(b); + this.reduce(b) + }; + var q = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, + 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997], Z = 67108864 / q[q.length - 1]; + e.prototype.chunkSize = function (a) { + return Math.floor(Math.LN2 * + this.DB / Math.log(a)) + }; + e.prototype.toRadix = function (a) { + null == a && (a = 10); + if (0 == this.signum() || 2 > a || 36 < a)return "0"; + var b = this.chunkSize(a), b = Math.pow(a, b), c = w(b), d = l(), f = l(), e = ""; + for (this.divRemTo(c, d, f); 0 < d.signum();)e = (b + f.intValue()).toString(a).substr(1) + e, d.divRemTo(c, d, f); + return f.intValue().toString(a) + e + }; + e.prototype.fromRadix = function (a, b) { + this.fromInt(0); + null == b && (b = 10); + for (var c = this.chunkSize(b), d = Math.pow(b, c), f = !1, j = 0, g = 0, h = 0; h < a.length; ++h) { + var l = N(a, h); + 0 > l ? "-" == a.charAt(h) && 0 == this.signum() && + (f = !0) : (g = b * g + l, ++j >= c && (this.dMultiply(d), this.dAddOffset(g, 0), g = j = 0)) + } + 0 < j && (this.dMultiply(Math.pow(b, j)), this.dAddOffset(g, 0)); + f && e.ZERO.subTo(this, this) + }; + e.prototype.fromNumber = function (a, b, c) { + if ("number" == typeof b)if (2 > a)this.fromInt(1); else { + this.fromNumber(a, c); + this.testBit(a - 1) || this.bitwiseTo(e.ONE.shiftLeft(a - 1), I, this); + for (this.isEven() && this.dAddOffset(1, 0); !this.isProbablePrime(b);)this.dAddOffset(2, 0), this.bitLength() > a && this.subTo(e.ONE.shiftLeft(a - 1), this) + } else { + c = []; + var d = a & 7; + c.length = + (a >> 3) + 1; + b.nextBytes(c); + c[0] = 0 < d ? c[0] & (1 << d) - 1 : 0; + this.fromString(c, 256) + } + }; + e.prototype.bitwiseTo = function (a, b, c) { + var d, f, e = Math.min(a.t, this.t); + for (d = 0; d < e; ++d)c[d] = b(this[d], a[d]); + if (a.t < this.t) { + f = a.s & this.DM; + for (d = e; d < this.t; ++d)c[d] = b(this[d], f); + c.t = this.t + } else { + f = this.s & this.DM; + for (d = e; d < a.t; ++d)c[d] = b(f, a[d]); + c.t = a.t + } + c.s = b(this.s, a.s); + c.clamp() + }; + e.prototype.changeBit = function (a, b) { + var c = e.ONE.shiftLeft(a); + this.bitwiseTo(c, b, c); + return c + }; + e.prototype.addTo = function (a, b) { + for (var c = 0, d = 0, f = Math.min(a.t, + this.t); c < f;)d += this[c] + a[c], b[c++] = d & this.DM, d >>= this.DB; + if (a.t < this.t) { + for (d += a.s; c < this.t;)d += this[c], b[c++] = d & this.DM, d >>= this.DB; + d += this.s + } else { + for (d += this.s; c < a.t;)d += a[c], b[c++] = d & this.DM, d >>= this.DB; + d += a.s + } + b.s = 0 > d ? -1 : 0; + 0 < d ? b[c++] = d : -1 > d && (b[c++] = this.DV + d); + b.t = c; + b.clamp() + }; + e.prototype.dMultiply = function (a) { + this[this.t] = this.am(0, a - 1, this, 0, 0, this.t); + ++this.t; + this.clamp() + }; + e.prototype.dAddOffset = function (a, b) { + if (0 != a) { + for (; this.t <= b;)this[this.t++] = 0; + for (this[b] += a; this[b] >= this.DV;)this[b] -= + this.DV, ++b >= this.t && (this[this.t++] = 0), ++this[b] + } + }; + e.prototype.multiplyLowerTo = function (a, b, c) { + var d = Math.min(this.t + a.t, b); + c.s = 0; + for (c.t = d; 0 < d;)c[--d] = 0; + var f; + for (f = c.t - this.t; d < f; ++d)c[d + this.t] = this.am(0, a[d], c, d, 0, this.t); + for (f = Math.min(a.t, b); d < f; ++d)this.am(0, a[d], c, d, 0, b - d); + c.clamp() + }; + e.prototype.multiplyUpperTo = function (a, b, c) { + --b; + var d = c.t = this.t + a.t - b; + for (c.s = 0; 0 <= --d;)c[d] = 0; + for (d = Math.max(b - this.t, 0); d < a.t; ++d)c[this.t + d - b] = this.am(b - d, a[d], c, 0, 0, this.t + d - b); + c.clamp(); + c.drShiftTo(1, c) + }; + e.prototype.modInt = function (a) { + if (0 >= a)return 0; + var b = this.DV % a, c = 0 > this.s ? a - 1 : 0; + if (0 < this.t)if (0 == b)c = this[0] % a; else for (var d = this.t - 1; 0 <= d; --d)c = (b * c + this[d]) % a; + return c + }; + e.prototype.millerRabin = function (a) { + var b = this.subtract(e.ONE), c = b.getLowestSetBit(); + if (0 >= c)return !1; + var d = b.shiftRight(c); + a = a + 1 >> 1; + a > q.length && (a = q.length); + for (var f = l(), j = 0; j < a; ++j) { + f.fromInt(q[Math.floor(Math.random() * q.length)]); + var g = f.modPow(d, this); + if (0 != g.compareTo(e.ONE) && 0 != g.compareTo(b)) { + for (var h = 1; h++ < c && 0 != g.compareTo(b);)if (g = + g.modPowInt(2, this), 0 == g.compareTo(e.ONE))return !1; + if (0 != g.compareTo(b))return !1 + } + } + return !0 + }; + e.prototype.clone = function () { + var a = l(); + this.copyTo(a); + return a + }; + e.prototype.intValue = function () { + if (0 > this.s) { + if (1 == this.t)return this[0] - this.DV; + if (0 == this.t)return -1 + } else { + if (1 == this.t)return this[0]; + if (0 == this.t)return 0 + } + return (this[1] & (1 << 32 - this.DB) - 1) << this.DB | this[0] + }; + e.prototype.byteValue = function () { + return 0 == this.t ? this.s : this[0] << 24 >> 24 + }; + e.prototype.shortValue = function () { + return 0 == this.t ? this.s : this[0] << + 16 >> 16 + }; + e.prototype.signum = function () { + return 0 > this.s ? -1 : 0 >= this.t || 1 == this.t && 0 >= this[0] ? 0 : 1 + }; + e.prototype.toByteArray = function () { + var a = this.t, b = []; + b[0] = this.s; + var c = this.DB - a * this.DB % 8, d, f = 0; + if (0 < a--) { + if (c < this.DB && (d = this[a] >> c) != (this.s & this.DM) >> c)b[f++] = d | this.s << this.DB - c; + for (; 0 <= a;)if (8 > c ? (d = (this[a] & (1 << c) - 1) << 8 - c, d |= this[--a] >> (c += this.DB - 8)) : (d = this[a] >> (c -= 8) & 255, 0 >= c && (c += this.DB, --a)), 0 != (d & 128) && (d |= -256), 0 == f && (this.s & 128) != (d & 128) && ++f, 0 < f || d != this.s)b[f++] = d + } + return b + }; + e.prototype.equals = + function (a) { + return 0 == this.compareTo(a) + }; + e.prototype.min = function (a) { + return 0 > this.compareTo(a) ? this : a + }; + e.prototype.max = function (a) { + return 0 < this.compareTo(a) ? this : a + }; + e.prototype.and = function (a) { + var b = l(); + this.bitwiseTo(a, X, b); + return b + }; + e.prototype.or = function (a) { + var b = l(); + this.bitwiseTo(a, I, b); + return b + }; + e.prototype.xor = function (a) { + var b = l(); + this.bitwiseTo(a, O, b); + return b + }; + e.prototype.andNot = function (a) { + var b = l(); + this.bitwiseTo(a, P, b); + return b + }; + e.prototype.not = function () { + for (var a = l(), b = 0; b < this.t; ++b)a[b] = + this.DM & ~this[b]; + a.t = this.t; + a.s = ~this.s; + return a + }; + e.prototype.shiftLeft = function (a) { + var b = l(); + 0 > a ? this.rShiftTo(-a, b) : this.lShiftTo(a, b); + return b + }; + e.prototype.shiftRight = function (a) { + var b = l(); + 0 > a ? this.lShiftTo(-a, b) : this.rShiftTo(a, b); + return b + }; + e.prototype.getLowestSetBit = function () { + for (var a = 0; a < this.t; ++a)if (0 != this[a]) { + var b = a * this.DB; + a = this[a]; + if (0 == a)a = -1; else { + var c = 0; + 0 == (a & 65535) && (a >>= 16, c += 16); + 0 == (a & 255) && (a >>= 8, c += 8); + 0 == (a & 15) && (a >>= 4, c += 4); + 0 == (a & 3) && (a >>= 2, c += 2); + 0 == (a & 1) && ++c; + a = c + } + return b + + a + } + return 0 > this.s ? this.t * this.DB : -1 + }; + e.prototype.bitCount = function () { + for (var a = 0, b = this.s & this.DM, c = 0; c < this.t; ++c) { + for (var d = this[c] ^ b, f = 0; 0 != d;)d &= d - 1, ++f; + a += f + } + return a + }; + e.prototype.testBit = function (a) { + var b = Math.floor(a / this.DB); + return b >= this.t ? 0 != this.s : 0 != (this[b] & 1 << a % this.DB) + }; + e.prototype.setBit = function (a) { + return this.changeBit(a, I) + }; + e.prototype.clearBit = function (a) { + return this.changeBit(a, P) + }; + e.prototype.flipBit = function (a) { + return this.changeBit(a, O) + }; + e.prototype.add = function (a) { + var b = l(); + this.addTo(a, b); + return b + }; + e.prototype.subtract = function (a) { + var b = l(); + this.subTo(a, b); + return b + }; + e.prototype.multiply = function (a) { + var b = l(); + this.multiplyTo(a, b); + return b + }; + e.prototype.divide = function (a) { + var b = l(); + this.divRemTo(a, b, null); + return b + }; + e.prototype.remainder = function (a) { + var b = l(); + this.divRemTo(a, null, b); + return b + }; + e.prototype.divideAndRemainder = function (a) { + var b = l(), c = l(); + this.divRemTo(a, b, c); + return [b, c] + }; + e.prototype.modPow = function (a, b) { + var c = a.bitLength(), d, f = w(1), e; + if (0 >= c)return f; + d = 18 > + c ? 1 : 48 > c ? 3 : 144 > c ? 4 : 768 > c ? 5 : 6; + e = 8 > c ? new y(b) : b.isEven() ? new B(b) : new z(b); + var g = [], h = 3, k = d - 1, p = (1 << d) - 1; + g[1] = e.convert(this); + if (1 < d) { + c = l(); + for (e.sqrTo(g[1], c); h <= p;)g[h] = l(), e.mulTo(c, g[h - 2], g[h]), h += 2 + } + for (var m = a.t - 1, n, q = !0, r = l(), c = G(a[m]) - 1; 0 <= m;) { + c >= k ? n = a[m] >> c - k & p : (n = (a[m] & (1 << c + 1) - 1) << k - c, 0 < m && (n |= a[m - 1] >> this.DB + c - k)); + for (h = d; 0 == (n & 1);)n >>= 1, --h; + if (0 > (c -= h))c += this.DB, --m; + if (q)g[n].copyTo(f), q = !1; else { + for (; 1 < h;)e.sqrTo(f, r), e.sqrTo(r, f), h -= 2; + 0 < h ? e.sqrTo(f, r) : (h = f, f = r, r = h); + e.mulTo(r, g[n], f) + } + for (; 0 <= + m && 0 == (a[m] & 1 << c);)e.sqrTo(f, r), h = f, f = r, r = h, 0 > --c && (c = this.DB - 1, --m) + } + return e.revert(f) + }; + e.prototype.modInverse = function (a) { + var b = a.isEven(); + if (this.isEven() && b || 0 == a.signum())return e.ZERO; + for (var c = a.clone(), d = this.clone(), f = w(1), j = w(0), g = w(0), h = w(1); 0 != c.signum();) { + for (; c.isEven();) { + c.rShiftTo(1, c); + if (b) { + if (!f.isEven() || !j.isEven())f.addTo(this, f), j.subTo(a, j); + f.rShiftTo(1, f) + } else j.isEven() || j.subTo(a, j); + j.rShiftTo(1, j) + } + for (; d.isEven();) { + d.rShiftTo(1, d); + if (b) { + if (!g.isEven() || !h.isEven())g.addTo(this, + g), h.subTo(a, h); + g.rShiftTo(1, g) + } else h.isEven() || h.subTo(a, h); + h.rShiftTo(1, h) + } + 0 <= c.compareTo(d) ? (c.subTo(d, c), b && f.subTo(g, f), j.subTo(h, j)) : (d.subTo(c, d), b && g.subTo(f, g), h.subTo(j, h)) + } + if (0 != d.compareTo(e.ONE))return e.ZERO; + if (0 <= h.compareTo(a))return h.subtract(a); + if (0 > h.signum())h.addTo(a, h); else return h; + return 0 > h.signum() ? h.add(a) : h + }; + e.prototype.pow = function (a) { + return this.exp(a, new E) + }; + e.prototype.gcd = function (a) { + var b = 0 > this.s ? this.negate() : this.clone(); + a = 0 > a.s ? a.negate() : a.clone(); + if (0 > b.compareTo(a)) { + var c = + b, b = a; + a = c + } + var c = b.getLowestSetBit(), d = a.getLowestSetBit(); + if (0 > d)return b; + c < d && (d = c); + 0 < d && (b.rShiftTo(d, b), a.rShiftTo(d, a)); + for (; 0 < b.signum();)0 < (c = b.getLowestSetBit()) && b.rShiftTo(c, b), 0 < (c = a.getLowestSetBit()) && a.rShiftTo(c, a), 0 <= b.compareTo(a) ? (b.subTo(a, b), b.rShiftTo(1, b)) : (a.subTo(b, a), a.rShiftTo(1, a)); + 0 < d && a.lShiftTo(d, a); + return a + }; + e.prototype.isProbablePrime = function (a) { + var b, c = this.abs(); + if (1 == c.t && c[0] <= q[q.length - 1]) { + for (b = 0; b < q.length; ++b)if (c[0] == q[b])return !0; + return !1 + } + if (c.isEven())return !1; + for (b = 1; b < q.length;) { + for (var d = q[b], e = b + 1; e < q.length && d < Z;)d *= q[e++]; + for (d = c.modInt(d); b < e;)if (0 == d % q[b++])return !1 + } + return c.millerRabin(a) + }; + e.prototype.square = function () { + var a = l(); + this.squareTo(a); + return a + }; + J.prototype.init = function (a) { + var b, c, d; + for (b = 0; 256 > b; ++b)this.S[b] = b; + for (b = c = 0; 256 > b; ++b)c = c + this.S[b] + a[b % a.length] & 255, d = this.S[b], this.S[b] = this.S[c], this.S[c] = d; + this.j = this.i = 0 + }; + J.prototype.next = function () { + var a; + this.i = this.i + 1 & 255; + this.j = this.j + this.S[this.i] & 255; + a = this.S[this.i]; + this.S[this.i] = + this.S[this.j]; + this.S[this.j] = a; + return this.S[a + this.S[this.i] & 255] + }; + var K = 256, H, s, m; + if (null == s) { + s = []; + m = 0; + if ("Netscape" == navigator.appName && "5" > navigator.appVersion && window.crypto) { + n = window.crypto.random(32); + for (k = 0; k < n.length; ++k)s[m++] = n.charCodeAt(k) & 255 + } + for (; m < K;)k = Math.floor(65536 * Math.random()), s[m++] = k >>> 8, s[m++] = k & 255; + m = 0; + R((new Date).getTime()) + } + L.prototype.nextBytes = function (a) { + var b; + for (b = 0; b < a.length; ++b) { + var c = a, d = b, e; + if (null == H) { + R((new Date).getTime()); + H = new J; + H.init(s); + for (m = 0; m < s.length; ++m)s[m] = + 0; + m = 0 + } + e = H.next(); + c[d] = e + } + }; + p.prototype.doPublic = function (a) { + return a.modPowInt(this.e, this.n) + }; + p.prototype.setPublic = function (a, b) { + null != a && null != b && 0 < a.length && 0 < b.length ? (this.n = t(a, 16), this.e = parseInt(b, 16)) : alert("Invalid RSA public key") + }; + p.prototype.encrypt = function (a) { + var b; + b = this.n.bitLength() + 7 >> 3; + if (b < a.length + 11)alert("Message too long for RSA"), b = null; else { + for (var c = [], d = a.length - 1; 0 <= d && 0 < b;) { + var f = a.charCodeAt(d--); + 128 > f ? c[--b] = f : 127 < f && 2048 > f ? (c[--b] = f & 63 | 128, c[--b] = f >> 6 | 192) : (c[--b] = + f & 63 | 128, c[--b] = f >> 6 & 63 | 128, c[--b] = f >> 12 | 224) + } + c[--b] = 0; + a = new L; + for (d = []; 2 < b;) { + for (d[0] = 0; 0 == d[0];)a.nextBytes(d); + c[--b] = d[0] + } + c[--b] = 2; + c[--b] = 0; + b = new e(c) + } + if (null == b)return null; + b = this.doPublic(b); + if (null == b)return null; + b = b.toString(16); + return 0 == (b.length & 1) ? b : "0" + b + }; + p.prototype.doPrivate = function (a) { + if (null == this.p || null == this.q)return a.modPow(this.d, this.n); + var b = a.mod(this.p).modPow(this.dmp1, this.p); + for (a = a.mod(this.q).modPow(this.dmq1, this.q); 0 > b.compareTo(a);)b = b.add(this.p); + return b.subtract(a).multiply(this.coeff).mod(this.p).multiply(this.q).add(a) + }; + p.prototype.setPrivate = function (a, b, c) { + null != a && null != b && 0 < a.length && 0 < b.length ? (this.n = t(a, 16), this.e = parseInt(b, 16), this.d = t(c, 16)) : alert("Invalid RSA private key") + }; + p.prototype.setPrivateEx = function (a, b, c, d, e, j, g, h) { + null != a && null != b && 0 < a.length && 0 < b.length ? (this.n = t(a, 16), this.e = parseInt(b, 16), this.d = t(c, 16), this.p = t(d, 16), this.q = t(e, 16), this.dmp1 = t(j, 16), this.dmq1 = t(g, 16), this.coeff = t(h, 16)) : alert("Invalid RSA private key") + }; + p.prototype.generate = function (a, b) { + var c = new L, d = a >> 1; + this.e = parseInt(b, + 16); + for (var f = new e(b, 16); ;) { + for (; !(this.p = new e(a - d, 1, c), 0 == this.p.subtract(e.ONE).gcd(f).compareTo(e.ONE) && this.p.isProbablePrime(10));); + for (; !(this.q = new e(d, 1, c), 0 == this.q.subtract(e.ONE).gcd(f).compareTo(e.ONE) && this.q.isProbablePrime(10));); + if (0 >= this.p.compareTo(this.q)) { + var j = this.p; + this.p = this.q; + this.q = j + } + var j = this.p.subtract(e.ONE), g = this.q.subtract(e.ONE), h = j.multiply(g); + if (0 == h.gcd(f).compareTo(e.ONE)) { + this.n = this.p.multiply(this.q); + this.d = f.modInverse(h); + this.dmp1 = this.d.mod(j); + this.dmq1 = + this.d.mod(g); + this.coeff = this.q.modInverse(this.p); + break + } + } + }; + p.prototype.decrypt = function (a) { + a = t(a, 16); + a = this.doPrivate(a); + if (null == a)return null; + a:{ + var b = this.n.bitLength() + 7 >> 3; + a = a.toByteArray(); + for (var c = 0; c < a.length && 0 == a[c];)++c; + if (a.length - c != b - 1 || 2 != a[c])a = null; else { + for (++c; 0 != a[c];)if (++c >= a.length) { + a = null; + break a + } + for (b = ""; ++c < a.length;) { + var d = a[c] & 255; + 128 > d ? b += String.fromCharCode(d) : 191 < d && 224 > d ? (b += String.fromCharCode((d & 31) << 6 | a[c + 1] & 63), ++c) : (b += String.fromCharCode((d & 15) << 12 | (a[c + 1] & 63) << + 6 | a[c + 2] & 63), c += 2) + } + a = b + } + } + return a + }; + var C = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/", S = "="; + p.prototype.parseKey = function (a) { + a = this.prepareKey(a); + var b = this.structure(), c = 0, d = null, e = null, j = 0, g; + for (g in b)d = b[g], d.hasOwnProperty("offset") && (c += 2 * d.offset), j = "string" == typeof d.length ? this[d.length] : d.length, j *= 2, e = a.substr(c, j), d.hasOwnProperty("type") && ("int" == d.type ? e = parseInt(e, 16) : "bigint" == d.type && (e = t(e, 16))), c += j, this[g] = e + }; + p.prototype.char64ToHex = function (a) { + var b = ""; + a = + atob(a); + for (var c = 0; c < a.length; ++c) { + var d = a.charCodeAt(c).toString(16); + 1 === d.length && (d = "0" + d); + b += d + } + return b + }; + p.prototype.prepareKey = function (a) { + a = a.replace(/^\s+|\s+$/g, ""); + a = a.split(/\r?\n/); + "-----BEGIN" == a[0].substring(0, 10) && (a = a.slice(1, a.length - 1)); + a = a.join(""); + return this.char64ToHex(a) + }; + p.prototype.getBaseKey = function () { + var a = "", b = this.structure(), c = null, d = null, e = 0, j; + for (j in b)c = b[j], c.variable && (d = this[j].toString(16), d.length % 2 && (d = "0" + d), c.hasOwnProperty("padded") && c.padded && (d = "00" + d), + e = d.length / 2, e = e.toString(16), e.length % 2 && (e = "0" + e), c.hasOwnProperty("extraspace") && (a += e), a += e, a += d, a += "02"); + return a.slice(0, -2) + }; + p.prototype.wordwrap = function (a, b) { + b = b || 64; + return !a ? a : a.match(RegExp("(.{1," + b + "})( +|$\n?)|(.{1," + b + "})", "g")).join("\n") + }; + p.prototype.getPrivateKey = function () { + var a = "-----BEGIN RSA PRIVATE KEY-----\n", b; + b = "3082025e02010002" + this.getBaseKey(); + a += this.wordwrap(M(b)) + "\n"; + return a + "-----END RSA PRIVATE KEY-----" + }; + p.prototype.getPublicKey = function () { + var a = "-----BEGIN PUBLIC KEY-----\n", + b; + b = "30819f300d06092a864886f70d010101050003818d0030818902" + this.getBaseKey(); + a += this.wordwrap(M(b)) + "\n"; + return a + "-----END PUBLIC KEY-----" + }; + var D = function (a) { + p.call(this); + a && this.parseKey(a) + }; + D.prototype = new p; + D.prototype.constructor = D; + D.prototype.structure = function () { + return { + header: {length: 4}, + versionlength: {length: 1, offset: 1, type: "int"}, + version: {length: "versionlength", type: "int"}, + n_length: {length: 1, offset: 2, type: "int"}, + n: {length: "n_length", type: "bigint", variable: !0, padded: !0, extraspace: !0}, + e_length: { + length: 1, + offset: 1, type: "int" + }, + e: {length: "e_length", type: "int", variable: !0}, + d_length: {length: 1, offset: 2, type: "int"}, + d: {length: "d_length", type: "bigint", variable: !0, padded: !0, extraspace: !0}, + p_length: {length: 1, offset: 1, type: "int"}, + p: {length: "p_length", type: "bigint", variable: !0, padded: !0}, + q_length: {length: 1, offset: 1, type: "int"}, + q: {length: "q_length", type: "bigint", variable: !0, padded: !0}, + dmp1_length: {length: 1, offset: 1, type: "int"}, + dmp1: {length: "dmp1_length", type: "bigint", variable: !0}, + dmq1_length: { + length: 1, offset: 1, + type: "int" + }, + dmq1: {length: "dmq1_length", type: "bigint", variable: !0, padded: !0}, + coeff_length: {length: 1, offset: 1, type: "int"}, + coeff: {length: "coeff_length", type: "bigint", variable: !0, padded: !0} + } + }; + var x = function (a) { + p.call(this); + a && ("string" == typeof a ? this.parseKey(a) : a.hasOwnProperty("n") && a.hasOwnProperty("e") && (this.n = a.n, this.e = a.e)) + }; + x.prototype = new p; + x.prototype.constructor = x; + x.prototype.structure = function () { + return { + header: {length: 25}, n_length: {length: 1, offset: 2, type: "int"}, n: { + length: "n_length", type: "bigint", + variable: !0, padded: !0, extraspace: !0 + }, e_length: {length: 1, offset: 1, type: "int"}, e: {length: "e_length", type: "int", variable: !0} + } + }; + k = function () { + this.pubkey = this.privkey = null + }; + k.prototype.setPrivateKey = function (a) { + this.privkey = new D(a); + this.pubkey = new x(this.privkey) + }; + k.prototype.setPublicKey = function (a) { + this.pubkey = new x(a) + }; + k.prototype.decrypt = function (a) { + return this.privkey ? this.privkey.decrypt(Y(a)) : !1 + }; + k.prototype.encrypt = function (a) { + var b = this.pubkey || this.privkey; + return b ? M(b.encrypt(a)) : !1 + }; + k.prototype.getPrivateKey = + function () { + this.privkey || (this.privkey = new D, this.privkey.generate(1024, "010001"), this.pubkey = new x(this.privkey)); + return this.privkey.getPrivateKey() + }; + k.prototype.getPublicKey = function () { + this.pubkey || (this.pubkey = new x, this.pubkey.generate(1024, "010001")); + return this.pubkey.getPublicKey() + }; + T.JSEncrypt = k +})(JSEncryptExports); +var JSEncrypt = JSEncryptExports.JSEncrypt; diff --git a/view/base/web/js/open_render_channels.js b/view/base/web/js/open_render_channels.js new file mode 100644 index 0000000..a33756d --- /dev/null +++ b/view/base/web/js/open_render_channels.js @@ -0,0 +1,149 @@ +/** + * + * @category payment gateway + * @package Tpaycom_Magento2.3 + * @author Tpay.com + * @copyright (https://tpay.com) + */ +require(['jquery', 'mage/translate'], function ($, $t) { + + var payButton = $('#tpaycom_magento2basic_submit'), + tos = $('#accept_tos'); + + function getBankTile(groupId, groupName, logoSrc) { + return ''; + } + + function inArray(needle, haystack) { + var length = haystack.length; + for (var i = 0; i < length; i++) { + if (haystack[i] == needle) return true; + } + return false; + } + + function doesAmountFitToInstallments(grandTotal, channelId) { + switch (channelId) { + case 167: //twisto + return grandTotal >= 1 && grandTotal <= 1500; + break; + case 169: //raty pekao + return grandTotal >= 100 && grandTotal <= 20000; + break; + case 109: //alior raty + return grandTotal >= 300 && grandTotal <= 9259; + break; + case 172: //paypo + return grandTotal >= 40 && grandTotal <= 3000; + break; + } + + return true; + } + + function ShowChannelsCombo() { + var str = '', + i, + str2 = '', + tile, + others = [157, 106, 109, 148, 104], + installmentsGroupId = [109, 169, 167, 172], + group, + id, + groupName, + logoSrc, + bank_selection_form = document.getElementById('bank-selection-form'); + for (i in tr_groups) { + group = tr_groups[i]; + id = group['id']; + groupName = group['name']; + logoSrc = group['img']; + + if (window.checkoutConfig.tpay.payment.blikStatus === true && id === '150') { + continue; + } + + if (inArray(id, installmentsGroupId) && !doesAmountFitToInstallments(parseFloat(window.checkoutConfig.tpay.payment.grandTotal), parseInt(id))) { + continue; + } + + tile = getBankTile(id, groupName, logoSrc); + + if (inArray(id, others) === false) { + str += tile; + } else { + str2 += tile; + } + } + + bank_selection_form.innerHTML = str + str2; + $('.tpay-group-holder').each(function () { + $(this).on('click', function () { + var input = $('#tpay-channel-input'), + active_bank_blocks = document.getElementsByClassName('tpay-active'), + that = $(this); + input.val(that.attr('id').substr(5)); + if (active_bank_blocks.length > 0) { + active_bank_blocks[0].className = active_bank_blocks[0].className.replace('tpay-active', ''); + } + this.className = this.className + ' tpay-active'; + if (input.val() > 0 && $('#blik_code').val().length === 0 && tos.is(':checked')) { + payButton.removeClass('disabled'); + } + }); + }); + } + + function checkBlikInput() { + if (window.checkoutConfig.tpay.payment.blikStatus !== true) { + $(".blik").hide(); + } + } + + function setBlikInputAction() { + const TRIGGER_EVENTS = 'input change blur'; + + $('#blik_code').on(TRIGGER_EVENTS, function () { + var that = $(this); + if (that.val().length > 0) { + $('#tpay-basic-main-payment').css('display', 'none'); + } else { + $('#tpay-basic-main-payment').css('display', 'block'); + } + if ( + (that.val().length === 6 || (that.val().length === 0 && $('#tpay-channel-input').val() > 0)) + && + tos.is(':checked') + ) { + payButton.removeClass('disabled'); + } + if (that.val().length > 0 && that.val().length !== 6) { + payButton.addClass('disabled'); + } + }); + } + + var tr_groups = window.checkoutConfig.tpay.payment.groups; + ShowChannelsCombo(); + checkBlikInput(); + setBlikInputAction(); + payButton.addClass('disabled'); + tos.on('change', function () { + var input = $('#tpay-channel-input'); + if (input.val() > 0 && $('#blik_code').val().length === 0 && tos.is(':checked')) { + payButton.removeClass('disabled'); + return; + } + + if ($('#blik_code').val().length === 6 && tos.is(':checked')) { + payButton.removeClass('disabled'); + return; + } + payButton.addClass('disabled'); + }); + } +); diff --git a/view/base/web/js/renderSavedCards.js b/view/base/web/js/renderSavedCards.js new file mode 100644 index 0000000..e5e2088 --- /dev/null +++ b/view/base/web/js/renderSavedCards.js @@ -0,0 +1,87 @@ +/** + * + * @category payment gateway + * @package Tpaycom_Magento2.2 + * @author Tpay.com + * @copyright (https://tpay.com) + */ +require(['jquery', 'mage/translate'], function ($, $t) { + + function renderForm() { + var cards = generateHtml(); + if (cards === undefined) { + $('#card_form').css('display', 'block'); + $('#saved_card_payment').css('display', 'none'); + return; + } + + $('input[name=savedId]').each(function () { + if ($(this).val() !== 'new') { + $(this).click(function () { + if ($(this).is(":checked") && $('#card_accept_tos').is(':checked')) { + $('#card_form').css({opacity: 1.0}).animate({opacity: 0.0}, 500); + setTimeout( + function () { + $('#card_form').css({display: "none"}) + }, 500 + ); + $("#tpaycom_magento2cards_submit").removeClass('disabled'); + } + }); + } + }); + + $('#newCard').click(function () { + if ($(this).is(":checked")) { + $('#card_form').css({opacity: 0.0, display: "block"}).animate({opacity: 1.0}, 500); + var x = false, cn = $('#card_number').val(), ed = $('#expiry_date').val(), cvc = $('#cvc').val(); + $('input').each(function () { + if ($(this).hasClass('wrong')) { + x = true; + } + }); + if (cn.length === 0 || ed.length === 0 || cvc.length === 0) { + x = true; + } + if (x) { + $("#tpaycom_magento2cards_submit").addClass('disabled'); + } + } + }); + } + + function generateHtml() { + var userTokens = window.checkoutConfig.tpaycards.payment.customerTokens, + divContent = '', + text = $t('Pay with saved card '); + + if (userTokens.length === 0) { + return; + } + + for (var i = 0; i < userTokens.length; i++) { + var card = userTokens[i]; + var cardCode = card.cardShortCode, cardId = card.id; + var vendor = card.vendor; + var img = ''; + divContent += (''); + divContent += ('
'); + } + + $('#saved_card_payment').prepend(divContent); + $('input[name=savedId]').first().prop('checked', "checked"); + return divContent; + } + + $('document').ready(function () { + var tos = $('#card_accept_tos'); + + renderForm(); + tos.on('change', function () { + if (tos.is(':checked')) { + $("#tpaycom_magento2cards_submit").removeClass('disabled'); + } + }); + }); + +}); diff --git a/view/base/web/js/render_channels.js b/view/base/web/js/render_channels.js index 63508f3..ac33b65 100644 --- a/view/base/web/js/render_channels.js +++ b/view/base/web/js/render_channels.js @@ -7,7 +7,8 @@ */ require(['jquery', 'mage/translate'], function ($, $t) { - var payButton = $('#tpaycom_magento2basic_submit'); + var payButton = $('#tpaycom_magento2basic_submit'), + tos = $('#accept_tos'); function getBankTile(groupId, groupName, logoSrc) { return '