mirror of
https://github.com/woocommerce/woocommerce-paypal-payments.git
synced 2025-09-05 08:59:14 +08:00
258 lines
21 KiB
PHP
258 lines
21 KiB
PHP
<?php
|
|
/**
|
|
* The Applepay module.
|
|
*
|
|
* @package WooCommerce\PayPalCommerce\Applepay
|
|
*/
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace WooCommerce\PayPalCommerce\Applepay;
|
|
|
|
use Automattic\WooCommerce\Blocks\Payments\PaymentMethodRegistry;
|
|
use WooCommerce\PayPalCommerce\ApiClient\Helper\Cache;
|
|
use WooCommerce\PayPalCommerce\Applepay\Assets\ApplePayButton;
|
|
use WooCommerce\PayPalCommerce\Applepay\Assets\AppleProductStatus;
|
|
use WooCommerce\PayPalCommerce\Button\Assets\ButtonInterface;
|
|
use WooCommerce\PayPalCommerce\Button\Assets\SmartButtonInterface;
|
|
use WooCommerce\PayPalCommerce\Onboarding\Environment;
|
|
use WooCommerce\PayPalCommerce\Vendor\Dhii\Container\ServiceProvider;
|
|
use WooCommerce\PayPalCommerce\Vendor\Dhii\Modular\Module\ModuleInterface;
|
|
use WooCommerce\PayPalCommerce\Vendor\Interop\Container\ServiceProviderInterface;
|
|
use WooCommerce\PayPalCommerce\Vendor\Psr\Container\ContainerInterface;
|
|
use WooCommerce\PayPalCommerce\WcGateway\Settings\Settings;
|
|
|
|
/**
|
|
* Class ApplepayModule
|
|
*/
|
|
class ApplepayModule implements ModuleInterface {
|
|
/**
|
|
* {@inheritDoc}
|
|
*/
|
|
public function setup(): ServiceProviderInterface {
|
|
return new ServiceProvider(
|
|
require __DIR__ . '/../services.php',
|
|
require __DIR__ . '/../extensions.php'
|
|
);
|
|
}
|
|
|
|
/**
|
|
* {@inheritDoc}
|
|
*/
|
|
public function run( ContainerInterface $c ): void {
|
|
$apple_payment_method = $c->get( 'applepay.button' );
|
|
// add onboarding and referrals hooks.
|
|
$apple_payment_method->initialize();
|
|
if ( ! $c->get( 'applepay.enabled' ) ) {
|
|
return;
|
|
}
|
|
if ( ! $c->get( 'applepay.server_supported' ) ) {
|
|
add_action(
|
|
'admin_notices',
|
|
static function () {
|
|
?>
|
|
<div class="notice notice-error is-dismissible">
|
|
<p>
|
|
<?php
|
|
echo wp_kses_post(
|
|
__( 'Apple Pay is not supported on this server. Please contact your hosting provider to enable it.', 'woocommerce-paypal-payments' )
|
|
);
|
|
?>
|
|
</p>
|
|
</div>
|
|
<?php
|
|
}
|
|
);
|
|
|
|
return;
|
|
}
|
|
$settings = $c->get( 'wcgateway.settings' );
|
|
$merchant_validated = $settings->has( 'applepay_validated' ) ? $settings->get( 'applepay_validated' ) === true : false;
|
|
if ( ! $merchant_validated ) {
|
|
add_action(
|
|
'admin_notices',
|
|
static function () {
|
|
?>
|
|
<div class="notice notice-error is-dismissible">
|
|
<p>
|
|
<?php
|
|
echo wp_kses_post(
|
|
__( 'Apple Pay Validation Error. Please check the requirements.', 'woocommerce-paypal-payments' )
|
|
);
|
|
?>
|
|
</p>
|
|
</div>
|
|
<?php
|
|
}
|
|
);
|
|
}
|
|
$this->load_assets( $c );
|
|
$this->handle_validation_file( $c );
|
|
$this->render_buttons( $c );
|
|
assert( $apple_payment_method instanceof ApplepayButton );
|
|
$apple_payment_method->bootstrap_ajax_request();
|
|
|
|
$this->remove_status_cache( $c );
|
|
}
|
|
|
|
/**
|
|
* Returns the key for the module.
|
|
*
|
|
* @return string|void
|
|
*/
|
|
public function getKey() {
|
|
}
|
|
|
|
/**
|
|
* Loads the validation string.
|
|
*
|
|
* @param boolean $is_sandbox The environment for this merchant.
|
|
*/
|
|
protected function load_domain_association_file( bool $is_sandbox ): void {
|
|
if ( ! isset( $_SERVER['REQUEST_URI'] ) ) {
|
|
return;
|
|
}
|
|
$request_uri = (string) filter_var( wp_unslash( $_SERVER['REQUEST_URI'] ), FILTER_SANITIZE_URL );
|
|
if ( strpos( $request_uri, '.well-known/apple-developer-merchantid-domain-association' ) !== false ) {
|
|
$validation_string = $this->validation_string( $is_sandbox );
|
|
nocache_headers();
|
|
header( 'Content-Type: text/plain', true, 200 );
|
|
echo $validation_string;// phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
|
|
exit;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Registers and enqueues the assets.
|
|
*
|
|
* @param ContainerInterface $c The container.
|
|
* @return void
|
|
*/
|
|
public function load_assets( ContainerInterface $c ): void {
|
|
add_action(
|
|
'wp_enqueue_scripts',
|
|
function () use ( $c ) {
|
|
$button = $c->get( 'applepay.button' );
|
|
assert( $button instanceof ApplePayButton );
|
|
$smart_button = $c->get( 'button.smart-button' );
|
|
assert( $smart_button instanceof SmartButtonInterface );
|
|
$page_has_block = has_block( 'woocommerce/checkout' ) || has_block( 'woocommerce/cart' );
|
|
if ( $smart_button->should_load_ppcp_script() || $page_has_block ) {
|
|
$button->enqueue();
|
|
}
|
|
}
|
|
);
|
|
add_action(
|
|
'woocommerce_blocks_payment_method_type_registration',
|
|
function( PaymentMethodRegistry $payment_method_registry ) use ( $c ): void {
|
|
$payment_method_registry->register( $c->get( 'applepay.blocks-payment-method' ) );
|
|
}
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Renders the Apple Pay buttons in the enabled places.
|
|
*
|
|
* @param ContainerInterface $c The container.
|
|
* @return void
|
|
*/
|
|
public function render_buttons( ContainerInterface $c ): void {
|
|
add_action(
|
|
'wp',
|
|
static function () use ( $c ) {
|
|
if ( is_admin() ) {
|
|
return;
|
|
}
|
|
$button = $c->get( 'applepay.button' );
|
|
|
|
/**
|
|
* The Button.
|
|
*
|
|
* @var ButtonInterface $button
|
|
*/
|
|
$button->render();
|
|
}
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Removes the status cache.
|
|
*
|
|
* @param ContainerInterface $c The container.
|
|
*
|
|
* @return void
|
|
*/
|
|
public function remove_status_cache( ContainerInterface $c ): void {
|
|
add_action(
|
|
'woocommerce_paypal_payments_gateway_migrate_on_update',
|
|
static function () use ( $c ) {
|
|
$apple_status_cache = $c->get( 'applepay.status-cache' );
|
|
assert( $apple_status_cache instanceof Cache );
|
|
|
|
$apple_status_cache->delete( AppleProductStatus::APPLE_STATUS_CACHE_KEY );
|
|
|
|
$settings = $c->get( 'wcgateway.settings' );
|
|
$settings->set( 'products_apple_enabled', false );
|
|
$settings->persist();
|
|
|
|
// Update caches.
|
|
$apple_status = $c->get( 'applepay.apple-product-status' );
|
|
assert( $apple_status instanceof AppleProductStatus );
|
|
$apple_status->apple_is_active();
|
|
}
|
|
);
|
|
|
|
add_action(
|
|
'woocommerce_paypal_payments_on_listening_request',
|
|
static function () use ( $c ) {
|
|
$apple_status = $c->get( 'applepay.status-cache' );
|
|
if ( $apple_status->has( AppleProductStatus::APPLE_STATUS_CACHE_KEY ) ) {
|
|
$apple_status->delete( AppleProductStatus::APPLE_STATUS_CACHE_KEY );
|
|
}
|
|
}
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Handles the validation file.
|
|
*
|
|
* @param ContainerInterface $c The container.
|
|
* @return void
|
|
*/
|
|
public function handle_validation_file( ContainerInterface $c ): void {
|
|
$env = $c->get( 'onboarding.environment' );
|
|
assert( $env instanceof Environment );
|
|
$is_sandobx = $env->current_environment_is( Environment::SANDBOX );
|
|
$this->load_domain_association_file( $is_sandobx );
|
|
}
|
|
|
|
/**
|
|
* Returns the validation string, depending on the environment.
|
|
*
|
|
* @param bool $is_sandbox The environment for this merchant.
|
|
* @return string
|
|
*/
|
|
public function validation_string( bool $is_sandbox ) {
|
|
$sandbox_string = $this->sandbox_validation_string();
|
|
$live_string = $this->live_validation_string();
|
|
return $is_sandbox ? $sandbox_string : $live_string;
|
|
}
|
|
|
|
/**
|
|
* Returns the sandbox validation string.
|
|
*
|
|
* @return string
|
|
*/
|
|
private function sandbox_validation_string(): string {
|
|
return '7B227073704964223A2241443631324543383841333039314132314539434132433035304439454130353741414535444341304542413237424243333838463239344231353534434233222C2276657273696F6E223A312C22637265617465644F6E223A313632343438393037393630362C227369676E6174757265223A2233303830303630393261383634383836663730643031303730326130383033303830303230313031333130663330306430363039363038363438303136353033303430323031303530303330383030363039326138363438383666373064303130373031303030306130383033303832303365343330383230333862613030333032303130323032303835396438613162636161663465336364333030613036303832613836343863653364303430333032333037613331326533303263303630333535303430333063323534313730373036633635323034313730373036633639363336313734363936663665323034393665373436353637373236313734363936663665323034333431323032643230343733333331323633303234303630333535303430623063316434313730373036633635323034333635373237343639363636393633363137343639366636653230343137353734363836663732363937343739333131333330313130363033353530343061306330613431373037303663363532303439366536333265333130623330303930363033353530343036313330323535353333303165313730643332333133303334333233303331333933333337333033303561313730643332333633303334333133393331333933333336333533393561333036323331323833303236303630333535303430333063316636353633363332643733366437303264363237323666366236353732326437333639363736653566353534333334326435333431346534343432346635383331313433303132303630333535303430623063306236393466353332303533373937333734363536643733333131333330313130363033353530343061306330613431373037303663363532303439366536333265333130623330303930363033353530343036313330323535353333303539333031333036303732613836343863653364303230313036303832613836343863653364303330313037303334323030303438323330666461626333396366373565323032633530643939623435313265363337653261393031646436636233653062316364346235323637393866386366346562646538316132356138633231653463333364646365386532613936633266366166613139333033343563346538376134343236636539353162313239356133383230323131333038323032306433303063303630333535316431333031303166663034303233303030333031663036303335353164323330343138333031363830313432336632343963343466393365346566323765366334663632383663336661326262666432653462333034353036303832623036303130353035303730313031303433393330333733303335303630383262303630313035303530373330303138363239363837343734373033613266326636663633373337303265363137303730366336353265363336663664326636663633373337303330333432643631373037303663363536313639363336313333333033323330383230313164303630333535316432303034383230313134333038323031313033303832303130633036303932613836343838366637363336343035303133303831666533303831633330363038326230363031303530353037303230323330383162363063383162333532363536633639363136653633363532303666366532303734363836393733323036333635373237343639363636393633363137343635323036323739323036313665373932303730363137323734373932303631373337333735366436353733323036313633363336353730373436313665363336353230366636363230373436383635323037343638363536653230363137303730366336393633363136323663363532303733373436313665363436313732363432303734363537323664373332303631366536343230363336663665363436393734363936663665373332303666363632303735373336353263323036333635373237343639363636393633363137343635323037303666366336393633373932303631366536343230363336353732373436393636363936333631373436393666366532303730373236313633373436393633363532303733373436313734363536643635366537343733326533303336303630383262303630313035303530373032303131363261363837343734373033613266326637373737373732653631373037303663363532653633366636643266363336353732373436393636363936333631373436353631373537343638366637323639373437393266333033343036303335353164316630343264333032623330323961303237613032353836323336383734373437303361326632663633373236633265363137303730366336353265363336663664326636313730373036633635363136393633363133333265363337323663333031643036303335353164306530343136303431343032323433303062396165656564343633313937613461363561323939653432373138323163343533303065303630333535316430663031303166663034303430333032303738303330306630363039326138363438383666373633363430363164303430323035303033303061303630383261383634386365336430343033303230333437303033303434303232303734613162333234646234323439343330646433323734633530373463343830386439613166343830653361383563356331333632353636333235666263613330323230363933363930353361626635306235613532663966363030346463353861616436633530613764363038363833373930653061373361643031653461643938313330383230326565333038323032373561303033303230313032303230383439366432666266336139386461393733303061303630383261383634386365336430343033303233303637333131623330313930363033353530343033306331323431373037303663363532303532366636663734323034333431323032643230343733333331323633303234303630333535303430623063316434313730373036633635323034333635373237343639363636393633363137343639366636653230343137353734363836663732363937343739333131333330313130363033353530343061306330613431373037303663363532303439366536333265333130623330303930363033353530343036313330323535353333303165313730643331333433303335333033363332333333343336333333303561313730643332333933303335333033363332333333343336333333303561333037613331326533303263303630333535303430333063323534313730373036633635323034313730373036633639363336313734363936663665323034393665373436353637373236313734363936663665323034333431323032643230343733333331323633303234303630333535303430623063316434313730373036633635323034333635373237343639363636393633363137343639366636653230343137353734363836663732363937343739333131333330313130363033353530343061306330613431373037303663363532303439366536333265333130623330303930363033353530343036313330323535353333303539333031333036303732613836343863653364303230313036303832613836343863653364303330313037303334323030303466303137313138343139643736343835643531613565323538313037373665383830613265666465376261653464653038646663346239336531333335366435363635623335616532326430393737363064323234653762626130386664373631376365383863623736626236363730626563386538323938346666353434356133383166373330383166343330343630363038326230363031303530353037303130313034336133303338333033363036303832623036303130353035303733303031383632613638373437343730336132663266366636333733373032653631373037303663363532653633366636643266366636333733373033303334326436313730373036633635373236663666373436333631363733333330316430363033353531643065303431363034313432336632343963343466393365346566323765366334663632383663336661326262666432653462333030663036303335353164313330313031666630343035333030333031303166663330316630363033353531643233303431383330313638303134626262306465613135383333383839616134386139396465626562646562616664616362323461623330333730363033353531643166303433303330326533303263613032616130323838363236363837343734373033613266326636333732366332653631373037303663363532653633366636643266363137303730366336353732366636663734363336313637333332653633373236633330306530363033353531643066303130316666303430343033303230313036333031303036306132613836343838366637363336343036303230653034303230353030333030613036303832613836343863653364303430333032303336373030333036343032333033616366373238333531313639396231383666623335633335366361363262666634313765646439306637353464613238656265663139633831356534326237383966383938663739623539396639386435343130643866396465396332666530323330333232646435343432316230613330353737366335646633333833623930363766643137376332633231366439363466633637323639383231323666353466383761376431623939636239623039383932313631303639393066303939323164303030303331383230313863333038323031383830323031303133303831383633303761333132653330326330363033353530343033306332353431373037303663363532303431373037303663363936333631373436393666366532303439366537343635363737323631373436393666366532303433343132303264323034373333333132363330323430363033353530343062306331643431373037303663363532303433363537323734363936363639363336313734363936663665323034313735373436383666373236393734373933313133333031313036303335353034306130633061343137303730366336353230343936653633326533313062333030393036303335353034303631333032353535333032303835396438613162636161663465336364333030643036303936303836343830313635303330343032303130353030613038313935333031383036303932613836343838366637306430313039303333313062303630393261383634383836663730643031303730313330316330363039326138363438383666373064303130393035333130663137306433323331333033363332333333323332333533373335333935613330326130363039326138363438383666373064303130393334333131643330316233303064303630393630383634383031363530333034303230313035303061313061303630383261383634386365336430343033303233303266303630393261383634383836663730643031303930343331323230343230343239323932333766306638303764346538373932333134643438393635623165626262633038636265386333333432643365643261333939623963336538353330306130363038326138363438636533643034303330323034343733303435303232313030643430333138326637626530396663386265393738316463646461613434623332663362353634386566353666323664323933363738343237393933616530383032323037646663306563316361306461343531653464663031386236376538326231366330313065313930373431363762666632363839356230336563336430396134303030303030303030303030227D';
|
|
}
|
|
|
|
/**
|
|
* Returns the live validation string.
|
|
*
|
|
* @return string
|
|
*/
|
|
private function live_validation_string(): string {
|
|
return 'MIIQYQYJKoZIhvcNAQcCoIIQUjCCEE4CAQExCzAJBgUrDgMCGgUAMHAGCSqGSIb3DQEHAaBjBGF7InRlYW1JZCI6IjcyN0s1NldWNjciLCJkb21haW4iOiJ3d3cucGF5cGFsLmNvbSIsImRhdGVDcmVhdGVkIjoiMjAyMy0wNS0yMiwxNjo1NzoyOCIsInZlcnNpb24iOjF9oIINPzCCBDQwggMcoAMCAQICCEc8TGHymYjUMA0GCSqGSIb3DQEBCwUAMHMxLTArBgNVBAMMJEFwcGxlIGlQaG9uZSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEgMB4GA1UECwwXQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxEzARBgNVBAoMCkFwcGxlIEluYy4xCzAJBgNVBAYTAlVTMB4XDTIzMDQxMTIyMjM1OVoXDTI4MDQwOTIyMjM1OFowWTE1MDMGA1UEAwwsQXBwbGUgaVBob25lIE9TIFByb3Zpc2lvbmluZyBQcm9maWxlIFNpZ25pbmcxEzARBgNVBAoMCkFwcGxlIEluYy4xCzAJBgNVBAYTAlVTMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA6kPk_NNTn7aAD_zGbW6KydbD0o773Zv3wEvh-0jpzfMsGDLG7izTMTAX0ahEwvmpZKPijuurp4OCLC3BhgKvBFdTmU0MN5BDdnZ7bpwbaxWx5AH9nZwVm3d_wPQj0a6gskT6IUvSTYi8apgD0VGldPJf7vu-WYFH409ie7ljpU_SjsoQTjFVje1ckUe29jfT3zbfLFvPF05NwwVRPfwZcJ8A-LWJ19fLMBXrudbtTXuSzF2Ayww7K0cNyFtxe7TB28bXZ9DXU4aQlwHe_wa9HZmFpNfP7upB5F7-CmdwIBUdlO40Zu5Cas_fo_UQSsSYstVcaEjt-5qncP4WmbMX9QIDAQABo4HlMIHiMAwGA1UdEwEB_wQCMAAwHwYDVR0jBBgwFoAUb_GVGGJc4Mjxxe1sGMng02RSmCAwQAYIKwYBBQUHAQEENDAyMDAGCCsGAQUFBzABhiRodHRwOi8vb2NzcC5hcHBsZS5jb20vb2NzcDAzLWFpcGNhMDcwLwYDVR0fBCgwJjAkoCKgIIYeaHR0cDovL2NybC5hcHBsZS5jb20vYWlwY2EuY3JsMB0GA1UdDgQWBBRPsztIfUSNaiCLQOVDMYL5hruH4jAOBgNVHQ8BAf8EBAMCB4AwDwYJKoZIhvdjZAY6BAIFADANBgkqhkiG9w0BAQsFAAOCAQEAP44cFOLwsvb_dVEWxh0DGYwdt-PnsJMYi76pcsUEhG4O2XscXyM6Iy-r_ILncpnbI6B1w2JOhGfLjsAsTsbilw_h0AdfXNiM93uQ7R3QAN6zZwIXbVs-82myx9PJV2TRrgJGzAt6I0LQcv11D6dZC_7VVGZFu6HlvcU9C0AQy19-ifAN32E-p3NBeGVWeZWGZRtm9QxOCq5uX-1HUrDyZ3YBpKIvhXNWFSARqVcSBWu8sPcbRjhdNf__mMZpCRNlH03Fuyutu6zgtIAu3gGzvhIn8SmRhyym5WGVP65-NQtcLg5N8jZPsYEIy6_ZYl6t7zppIJugeLueH3xKgW56JTCCBEQwggMsoAMCAQICCFxjyuRKN1PJMA0GCSqGSIb3DQEBCwUAMGIxCzAJBgNVBAYTAlVTMRMwEQYDVQQKEwpBcHBsZSBJbmMuMSYwJAYDVQQLEx1BcHBsZSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEWMBQGA1UEAxMNQXBwbGUgUm9vdCBDQTAeFw0xNzA1MTAyMTI3MzBaFw0zMDEyMzEwMDAwMDBaMHMxLTArBgNVBAMMJEFwcGxlIGlQaG9uZSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEgMB4GA1UECwwXQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxEzARBgNVBAoMCkFwcGxlIEluYy4xCzAJBgNVBAYTAlVTMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyUVqAQ8-gwSGx_y_3F7wHoHuFzBzYyYu3j16JM2TPk85R7p1vvPA0vFZoqsf_gqGPNktmgfyDmu5KZEaXyIKi_FyWAWuTEtExXmngDywiOCMDCeEXRnlhxk2y-PFdrew9EFyUfQFXINLom2mUbjxJt97Xq1lDMaymFGMu30bTMFOyAjH0u1kC7TdG41PQH0bj0iWklvz0Jh-2bykGQ6ZYbtBXQHMW3d6fSTQ3NNT_8PcxZQstlpNjhgjOb3ZxlI-0fL0JYqhKof92AxGKVH_7RdsiSVrh7-KaRSfd5_DFbdos4hFvYTmBgJBZA-tKii4FcngrKeKunIENLJ4jPiyhQIDAQABo4HsMIHpMA8GA1UdEwEB_wQFMAMBAf8wHwYDVR0jBBgwFoAUK9BpR5R2Cf70a40uQKb3R01_CF4wRAYIKwYBBQUHAQEEODA2MDQGCCsGAQUFBzABhihodHRwOi8vb2NzcC5hcHBsZS5jb20vb2NzcDAzLWFwcGxlcm9vdGNhMC4GA1UdHwQnMCUwI6AhoB-GHWh0dHA6Ly9jcmwuYXBwbGUuY29tL3Jvb3QuY3JsMB0GA1UdDgQWBBRv8ZUYYlzgyPHF7WwYyeDTZFKYIDAOBgNVHQ8BAf8EBAMCAQYwEAYKKoZIhvdjZAYCEgQCBQAwDQYJKoZIhvcNAQELBQADggEBADrPrJiNvpIgIQmtlfOxXCH6Ni1XIER0c2SSCLOWrPdtl_pbNDgnzxJG0zwR8AfJmZCx0egRCaXjpWtsYwg_niX61ZmcTOblzo6yTWjsi6ujok-KERU-3BQrHMZEtm9nxVtPlSkth1w_3IMed0_t2lSnLecTgcFjxFQLG0sKaigiCNQ3knx_Zyhfrz0_t6xZHTg0ZFruM0oZQkQpxMoYa-HBUy0t9E3CFfYzMhh48SZvik3rlEyj6P8PswOLZdrrLthlUJ_cn4rfMaiEVNxSUkHSshMdMUZHiF8-7sPyjCMEleusij6CbAafLuOLQ5piWzQN9JnPLO66coYZI6X8jrUwggS7MIIDo6ADAgECAgECMA0GCSqGSIb3DQEBBQUAMGIxCzAJBgNVBAYTAlVTMRMwEQYDVQQKEwpBcHBsZSBJbmMuMSYwJAYDVQQLEx1BcHBsZSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEWMBQGA1UEAxMNQXBwbGUgUm9vdCBDQTAeFw0wNjA0MjUyMTQwMzZaFw0zNTAyMDkyMTQwMzZaMGIxCzAJBgNVBAYTAlVTMRMwEQYDVQQKEwpBcHBsZSBJbmMuMSYwJAYDVQQLEx1BcHBsZSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEWMBQGA1UEAxMNQXBwbGUgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOSRqQkfkdseR1DrBe1eeYQt6zaiV0xV7IsZid75S2z1B6siMALoGD74UAnTf0GomPnRymacJGsR0KO75Bsqwx-VnnoMpEeLW9QWNzPLxA9NzhRp0ckZcvVdDtV_X5vyJQO6VY9NXQ3xZDUjFUsVWR2zlPf2nJ7PULrBWFBnjwi0IPfLrCwgb3C2PwEwjLdDzw-dPfMrSSgayP7OtbkO2V4c1ss9tTqt9A8OAJILsSEWLnTVPA3bYharo3GSR1NVwa8vQbP4--NwzeajTEV-H0xrUJZBicR0YgsQg0GHM4qBsTBY7FoEMoxos48d3mVz_2deZbxJ2HafMxRloXeUyS0CAwEAAaOCAXowggF2MA4GA1UdDwEB_wQEAwIBBjAPBgNVHRMBAf8EBTADAQH_MB0GA1UdDgQWBBQr0GlHlHYJ_vRrjS5ApvdHTX8IXjAfBgNVHSMEGDAWgBQr0GlHlHYJ_vRrjS5ApvdHTX8IXjCCAREGA1UdIASCAQgwggEEMIIBAAYJKoZIhvdjZAUBMIHyMCoGCCsGAQUFBwIBFh5odHRwczovL3d3dy5hcHBsZS5jb20vYXBwbGVjYS8wgcMGCCsGAQUFBwICMIG2GoGzUmVsaWFuY2Ugb24gdGhpcyBjZXJ0aWZpY2F0ZSBieSBhbnkgcGFydHkgYXNzdW1lcyBhY2NlcHRhbmNlIG9mIHRoZSB0aGVuIGFwcGxpY2FibGUgc3RhbmRhcmQgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdXNlLCBjZXJ0aWZpY2F0ZSBwb2xpY3kgYW5kIGNlcnRpZmljYXRpb24gcHJhY3RpY2Ugc3RhdGVtZW50cy4wDQYJKoZIhvcNAQEFBQADggEBAFw2mUwteLftjJvc83eb8nbSdzBPwR-Fg4UbmT1HN_Kpm0COLNSxkBLYvvRzm-7SZA_LeU802KI--Xj_a8gH7H05g4tTINM4xLG_mk8Ka_8r_FmnBQl8F0BWER5007eLIztHo9VvJOLr0bdw3w9F4SfK8W147ee1Fxeo3H4iNcol1dkP1mvUoiQjEfehrI9zgWDGG1sJL5Ky-ERI8GA4nhX1PSZnIIozavcNgs_e66Mv-VNqW2TAYzN39zoHLFbr2g8hDtq6cxlPtdk2f8GHVdmnmbkyQvvY1XGefqFStxu9k0IkEirHDx22TZxeY8hLgBdQqorV2uT80AkHN7B1dSExggKFMIICgQIBATB_MHMxLTArBgNVBAMMJEFwcGxlIGlQaG9uZSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEgMB4GA1UECwwXQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxEzARBgNVBAoMCkFwcGxlIEluYy4xCzAJBgNVBAYTAlVTAghHPExh8pmI1DAJBgUrDgMCGgUAoIHcMBgGCSqGSIb3DQEJAzELBgkqhkiG9w0BBwEwHAYJKoZIhvcNAQkFMQ8XDTIzMDUyMjE2NTcyOFowIwYJKoZIhvcNAQkEMRYEFBk0Jou5Q9k_Gz261EnWre3Q-OPtMCkGCSqGSIb3DQEJNDEcMBowCQYFKw4DAhoFAKENBgkqhkiG9w0BAQEFADBSBgkqhkiG9w0BCQ8xRTBDMAoGCCqGSIb3DQMHMA4GCCqGSIb3DQMCAgIAgDANBggqhkiG9w0DAgIBQDAHBgUrDgMCBzANBggqhkiG9w0DAgIBKDANBgkqhkiG9w0BAQEFAASCAQDjOe_MP0OcjbZQC0lu6X5sf4MoUVimMKvnJgNLVgYPtZXufz6-_P98rgh5EPtPb-UBi1MPh2w6mHr-i9qZxklMR3sa-CuVwlkFFrPthelMfZU0YsMBv2zAOD5ZWnUrMc1Tc4myrZEK4DoNVtSG5kS5TvU_F_Cd3gPuCML4DIzrfaRMW9u9h_VehOcQIlultruQn2Wl1ihmi2_D8Q5fXF4E1dXe-a5ohdKCLWCXa7IhW818nfFbophoVDN4ymAY_1bMXp4iLa06iXXfZqQJqHnG2rFsUSLsGX49qSnNtR-1N23EtHgJQMqQpTz8C6VKI93ySOC3ijSqvRnm4Dgdl0HZ';
|
|
}
|
|
}
|